diff --git a/.env.example b/.env.example index 80bb7ef..aef2c23 100644 --- a/.env.example +++ b/.env.example @@ -3,8 +3,4 @@ SECRET_KEY= EMAIL_HOST_USER= EMAIL_HOST_PASSWORD= DISCORD_WEBHOOK_URL= -DB_NAME= -DB_USER= -DB_PASSWORD= -DB_HOST= -DB_PORT= +DATABASE_PATH=/data diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 98ad567..3a1e175 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -15,21 +15,6 @@ jobs: ADMIN_EMAIL: 4153203+TheLovinator1@users.noreply.github.com EMAIL_HOST_USER: ${{ secrets.EMAIL_HOST_USER }} EMAIL_HOST_PASSWORD: ${{ secrets.EMAIL_HOST_PASSWORD }} - DB_NAME: feedvault - DB_USER: feedvault - DB_PASSWORD: githubtest - DB_HOST: 127.0.0.1 - DB_PORT: 5432 - services: - postgres: - image: postgres:16 - env: - POSTGRES_PASSWORD: ${{ env.DB_PASSWORD }} - POSTGRES_DB: ${{ env.DB_NAME }} - POSTGRES_USER: ${{ env.DB_USER }} - ports: - - 5432:5432 - options: --health-cmd pg_isready --health-interval 1s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/docker-compose.yml b/docker-compose.yml index dc2b45b..51f2857 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,6 @@ services: user: "1000:1000" restart: always networks: - - feedvault_db - feedvault_web environment: - SECRET_KEY=${SECRET_KEY} @@ -14,11 +13,6 @@ services: - EMAIL_HOST_USER=${EMAIL_HOST_USER} - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD} - DISCORD_WEBHOOK_URL=${DISCORD_WEBHOOK_URL} - - DB_NAME=feedvault - - DB_HOST=feedvault_postgres - - DB_PORT=5432 - - DB_USER=feedvault - - DB_PASSWORD=${DB_PASSWORD} volumes: - /mnt/Fourteen/Docker/FeedVault/staticfiles:/app/staticfiles - /mnt/Fourteen/Docker/FeedVault/media:/app/media @@ -42,23 +36,6 @@ services: - feedvault_web - feedvault_tunnel - # Postgres - Database - postgres: - container_name: feedvault_postgres - image: postgres:16 - user: "1000:1000" - ports: - - 5432:5432 - restart: always - environment: - - POSTGRES_USER=feedvault - - POSTGRES_PASSWORD=${DB_PASSWORD} - - POSTGRES_DB=feedvault - volumes: - - /mnt/Fourteen/Docker/FeedVault/Postgres:/var/lib/postgresql/data - networks: - - feedvault_db - # Cloudflare Tunnel - Securely connect your server to Cloudflare tunnel: container_name: feedvault_tunnel @@ -73,7 +50,5 @@ services: networks: feedvault_tunnel: driver: bridge - feedvault_db: - driver: bridge feedvault_web: driver: bridge diff --git a/feedvault/context_processors.py b/feedvault/context_processors.py index 1e96bfa..ea89b31 100644 --- a/feedvault/context_processors.py +++ b/feedvault/context_processors.py @@ -15,13 +15,7 @@ def add_global_context(request: HttpRequest) -> dict[str, str | int]: Returns: A dictionary with the global context. """ - from feedvault.stats import get_db_size # noqa: PLC0415 - from .models import Feed # noqa: PLC0415 - db_size: str = get_db_size() amount_of_feeds: int = Feed.objects.count() - return { - "db_size": db_size, - "amount_of_feeds": amount_of_feeds, - } + return {"amount_of_feeds": amount_of_feeds} diff --git a/feedvault/settings.py b/feedvault/settings.py index a7724cc..23c4412 100644 --- a/feedvault/settings.py +++ b/feedvault/settings.py @@ -81,15 +81,14 @@ MIDDLEWARE: list[str] = [ "django_htmx.middleware.HtmxMiddleware", ] -# Use PostgreSQL as the default database -DATABASES: dict[str, dict[str, str]] = { +DATABASE_PATH: str = os.getenv("DATABASE_PATH", "/data") +DATABASES = { "default": { - "ENGINE": "django.db.backends.postgresql", - "NAME": os.getenv("DB_NAME", default="feedvault"), - "USER": os.getenv("DB_USER", default="feedvault"), - "PASSWORD": os.getenv("DB_PASSWORD", default="feedvault"), - "HOST": os.getenv("DB_HOST", default="localhost"), - "PORT": os.getenv("DB_PORT", default="5432"), + "ENGINE": "django.db.backends.sqlite3", + "NAME": Path(DATABASE_PATH) / "feedvault.sqlite3", + "OPTIONS": { + "timeout": 30, + }, }, } diff --git a/feedvault/stats.py b/feedvault/stats.py deleted file mode 100644 index 60dccf8..0000000 --- a/feedvault/stats.py +++ /dev/null @@ -1,22 +0,0 @@ -from __future__ import annotations - -import logging - -from django.db import connection - -logger: logging.Logger = logging.getLogger(__name__) - - -def get_db_size() -> str: - """Get the size of the database. - - Returns: - str: The size of the database. - """ - # Get Postgres database size - with connection.cursor() as cursor: - cursor.execute("SELECT pg_size_pretty(pg_database_size(current_database()))") - db_size_result: tuple[str, ...] | None = cursor.fetchone() - db_size: str | None = db_size_result[0] if db_size_result else None - - return db_size if db_size is not None else "0 MB" diff --git a/feedvault/tests.py b/feedvault/tests.py index d28e8a8..612af3b 100644 --- a/feedvault/tests.py +++ b/feedvault/tests.py @@ -9,7 +9,6 @@ from django.test import Client, TestCase from django.urls import reverse from feedvault.models import Domain, Entry, Feed, UserUploadedFile -from feedvault.stats import get_db_size if TYPE_CHECKING: from django.http import HttpResponse @@ -238,14 +237,6 @@ class TestSitemap(TestCase): assert "urlset" in response2.content.decode(), f"Expected 'urlset' in response, got {response2.content}" -class TestStats(TestCase): - def test_db_size(self) -> None: - """Test if the database size is returned.""" - response: str = get_db_size() - assert isinstance(response, str), f"Expected a string, got {response}" - assert "kB" in response, f"Expected 'kB' in response, got {response}" - - class TestSearch(TestCase): def setUp(self) -> None: """Create a test feed.""" diff --git a/feedvault/views.py b/feedvault/views.py index d720bf2..2d8df2c 100644 --- a/feedvault/views.py +++ b/feedvault/views.py @@ -461,6 +461,8 @@ class SearchView(View): if not query: return FeedsView().get(request) + # TODO(TheLovinator): #20 Search more fields + # https://github.com/TheLovinator1/FeedVault/issues/20 feeds: BaseManager[Feed] = Feed.objects.filter(feed_url__icontains=query).order_by("-created_at")[:100] context = {