Use SQLite

This commit is contained in:
Joakim Hellsén 2024-03-28 02:58:22 +01:00
commit 20f38de611
No known key found for this signature in database
GPG key ID: D196AE66FEBE1DC9
8 changed files with 11 additions and 91 deletions

View file

@ -3,8 +3,4 @@ SECRET_KEY=
EMAIL_HOST_USER= EMAIL_HOST_USER=
EMAIL_HOST_PASSWORD= EMAIL_HOST_PASSWORD=
DISCORD_WEBHOOK_URL= DISCORD_WEBHOOK_URL=
DB_NAME= DATABASE_PATH=/data
DB_USER=
DB_PASSWORD=
DB_HOST=
DB_PORT=

View file

@ -15,21 +15,6 @@ jobs:
ADMIN_EMAIL: 4153203+TheLovinator1@users.noreply.github.com ADMIN_EMAIL: 4153203+TheLovinator1@users.noreply.github.com
EMAIL_HOST_USER: ${{ secrets.EMAIL_HOST_USER }} EMAIL_HOST_USER: ${{ secrets.EMAIL_HOST_USER }}
EMAIL_HOST_PASSWORD: ${{ secrets.EMAIL_HOST_PASSWORD }} 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: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-python@v5 - uses: actions/setup-python@v5

View file

@ -6,7 +6,6 @@ services:
user: "1000:1000" user: "1000:1000"
restart: always restart: always
networks: networks:
- feedvault_db
- feedvault_web - feedvault_web
environment: environment:
- SECRET_KEY=${SECRET_KEY} - SECRET_KEY=${SECRET_KEY}
@ -14,11 +13,6 @@ services:
- EMAIL_HOST_USER=${EMAIL_HOST_USER} - EMAIL_HOST_USER=${EMAIL_HOST_USER}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD} - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD}
- DISCORD_WEBHOOK_URL=${DISCORD_WEBHOOK_URL} - DISCORD_WEBHOOK_URL=${DISCORD_WEBHOOK_URL}
- DB_NAME=feedvault
- DB_HOST=feedvault_postgres
- DB_PORT=5432
- DB_USER=feedvault
- DB_PASSWORD=${DB_PASSWORD}
volumes: volumes:
- /mnt/Fourteen/Docker/FeedVault/staticfiles:/app/staticfiles - /mnt/Fourteen/Docker/FeedVault/staticfiles:/app/staticfiles
- /mnt/Fourteen/Docker/FeedVault/media:/app/media - /mnt/Fourteen/Docker/FeedVault/media:/app/media
@ -42,23 +36,6 @@ services:
- feedvault_web - feedvault_web
- feedvault_tunnel - 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 # Cloudflare Tunnel - Securely connect your server to Cloudflare
tunnel: tunnel:
container_name: feedvault_tunnel container_name: feedvault_tunnel
@ -73,7 +50,5 @@ services:
networks: networks:
feedvault_tunnel: feedvault_tunnel:
driver: bridge driver: bridge
feedvault_db:
driver: bridge
feedvault_web: feedvault_web:
driver: bridge driver: bridge

View file

@ -15,13 +15,7 @@ def add_global_context(request: HttpRequest) -> dict[str, str | int]:
Returns: Returns:
A dictionary with the global context. A dictionary with the global context.
""" """
from feedvault.stats import get_db_size # noqa: PLC0415
from .models import Feed # noqa: PLC0415 from .models import Feed # noqa: PLC0415
db_size: str = get_db_size()
amount_of_feeds: int = Feed.objects.count() amount_of_feeds: int = Feed.objects.count()
return { return {"amount_of_feeds": amount_of_feeds}
"db_size": db_size,
"amount_of_feeds": amount_of_feeds,
}

View file

@ -81,15 +81,14 @@ MIDDLEWARE: list[str] = [
"django_htmx.middleware.HtmxMiddleware", "django_htmx.middleware.HtmxMiddleware",
] ]
# Use PostgreSQL as the default database DATABASE_PATH: str = os.getenv("DATABASE_PATH", "/data")
DATABASES: dict[str, dict[str, str]] = { DATABASES = {
"default": { "default": {
"ENGINE": "django.db.backends.postgresql", "ENGINE": "django.db.backends.sqlite3",
"NAME": os.getenv("DB_NAME", default="feedvault"), "NAME": Path(DATABASE_PATH) / "feedvault.sqlite3",
"USER": os.getenv("DB_USER", default="feedvault"), "OPTIONS": {
"PASSWORD": os.getenv("DB_PASSWORD", default="feedvault"), "timeout": 30,
"HOST": os.getenv("DB_HOST", default="localhost"), },
"PORT": os.getenv("DB_PORT", default="5432"),
}, },
} }

View file

@ -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"

View file

@ -9,7 +9,6 @@ from django.test import Client, TestCase
from django.urls import reverse from django.urls import reverse
from feedvault.models import Domain, Entry, Feed, UserUploadedFile from feedvault.models import Domain, Entry, Feed, UserUploadedFile
from feedvault.stats import get_db_size
if TYPE_CHECKING: if TYPE_CHECKING:
from django.http import HttpResponse 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}" 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): class TestSearch(TestCase):
def setUp(self) -> None: def setUp(self) -> None:
"""Create a test feed.""" """Create a test feed."""

View file

@ -461,6 +461,8 @@ class SearchView(View):
if not query: if not query:
return FeedsView().get(request) 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] feeds: BaseManager[Feed] = Feed.objects.filter(feed_url__icontains=query).order_by("-created_at")[:100]
context = { context = {