From 149e67b44ad6264f7a0d566ba177d76a982a5e5c Mon Sep 17 00:00:00 2001 From: Hassan Abouelela Date: Tue, 12 Jul 2022 07:22:34 +0400 Subject: Remove IP From Compose Ports Specifying the port IP in compose seems to significantly slow down networking with postgres. This effect is epically noticeable in tests, which are 5-10x faster with the change. Signed-off-by: Hassan Abouelela --- docker-compose.yml | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index eb987624..a6f4fd18 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,12 +8,12 @@ # and additionally use the Django development server which is # unsuitable for production. -version: "3.6" +version: "3.8" services: postgres: image: postgres:13-alpine ports: - - "127.0.0.1:7777:5432" + - "7777:5432" environment: POSTGRES_DB: pysite POSTGRES_PASSWORD: pysite @@ -38,7 +38,7 @@ services: - admin.web - staff.web ports: - - "127.0.0.1:8000:8000" + - "8000:8000" depends_on: postgres: condition: service_healthy diff --git a/pyproject.toml b/pyproject.toml index b350836e..f0864061 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ start = "python manage.py run --debug" makemigrations = "python manage.py makemigrations" django_shell = "python manage.py shell" test = "coverage run manage.py test" -coverage = "coverage run manage.py test --no-input; coverage report -m" +coverage = "coverage run manage.py test --no-input && coverage report -m" report = "coverage report -m" lint = "pre-commit run --all-files" precommit = "pre-commit install" -- cgit v1.2.3 From 98fa1598535b506b1a0189f248aa4dd926c3c7c2 Mon Sep 17 00:00:00 2001 From: Hassan Abouelela Date: Tue, 12 Jul 2022 07:39:10 +0400 Subject: Run Migrations For Tests Call the migration handler in manage.py when running tests, before handing control back to django. Signed-off-by: Hassan Abouelela --- .github/workflows/lint-test.yaml | 1 - manage.py | 20 ++++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/lint-test.yaml index f97cd758..a167ce32 100644 --- a/.github/workflows/lint-test.yaml +++ b/.github/workflows/lint-test.yaml @@ -97,7 +97,6 @@ jobs: - name: Migrations and run tests with coverage.py run: | python manage.py makemigrations --check - python manage.py migrate coverage run manage.py test --no-input coverage report -m env: diff --git a/manage.py b/manage.py index 90912da3..697960c6 100755 --- a/manage.py +++ b/manage.py @@ -95,13 +95,15 @@ class SiteManager: name="pythondiscord.local:8000" ) - def prepare_server(self) -> None: - """Perform preparation tasks before running the server.""" + def prepare_environment(self) -> None: + """Perform common preparation tasks.""" django.setup() print("Applying migrations.") call_command("migrate", verbosity=self.verbosity) + def prepare_server(self) -> None: + """Preform runserver-specific preparation tasks.""" if self.debug: # In Production, collectstatic is ran in the Docker image print("Collecting static files.") @@ -121,6 +123,7 @@ class SiteManager: # Prevent preparing twice when in dev mode due to reloader if not self.debug or in_reloader: + self.prepare_environment() self.prepare_server() print("Starting server.") @@ -148,6 +151,11 @@ class SiteManager: # Run gunicorn for the production server. gunicorn.app.wsgiapp.run() + def run_tests(self) -> None: + """Prepare and run the test suite.""" + self.prepare_environment() + call_command(*sys.argv[1:]) + def clean_up_static_files(build_folder: Path) -> None: """Recursively loop over the build directory and fix links.""" @@ -168,8 +176,12 @@ def clean_up_static_files(build_folder: Path) -> None: def main() -> None: """Entry point for Django management script.""" # Use the custom site manager for launching the server - if len(sys.argv) > 1 and sys.argv[1] == "run": - SiteManager(sys.argv).run_server() + if len(sys.argv) > 1 and sys.argv[1] in ("run", "test"): + manager = SiteManager(sys.argv) + if sys.argv[1] == "run": + manager.run_server() + elif sys.argv[1] == "test": + manager.run_tests() # Pass any others directly to standard management commands else: -- cgit v1.2.3