rename project to fhdhview
No files matched your search
@@ -1,4 +1,4 @@
|
|||||||
# FDH View
|
# FHDH View
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ The endpoint serves the 10 upcoming screenings for the day. The frontend automat
|
|||||||
For development run the application locally:
|
For development run the application locally:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
poetry run uvicorn fdhview.main:app --reload
|
poetry run uvicorn fhdhview.main:app --reload
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
@@ -59,6 +59,6 @@ docker compose -f docker/docker-compose.yml up
|
|||||||
|
|
||||||
The code for this repository is available under the `GNU Affero General Public License v3.0 or later`.
|
The code for this repository is available under the `GNU Affero General Public License v3.0 or later`.
|
||||||
|
|
||||||
Figtree fonts in `fdhview/static/fonts/` are under the `SIL Open Font License, Version 1.1`.
|
Figtree fonts in `fhdhview/static/fonts/` are under the `SIL Open Font License, Version 1.1`.
|
||||||
|
|
||||||
The logo in `fdhview/static/Logo.svg` is copyright of `Filmhuis Den Haag` and must be replaced.
|
The logo in `fhdhview/static/Logo.svg` is copyright of `Filmhuis Den Haag` and must be replaced.
|
||||||
@@ -34,4 +34,4 @@ ENV PATH="/app/.venv/bin:$PATH"
|
|||||||
USER appuser
|
USER appuser
|
||||||
|
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
CMD ["uvicorn", "fdhview.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
CMD ["uvicorn", "fhdhview.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
@@ -7,9 +7,9 @@ from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status
|
|||||||
from fastapi.responses import FileResponse, JSONResponse
|
from fastapi.responses import FileResponse, JSONResponse
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.api.deps import check_auth, get_session
|
from fhdhview.api.deps import check_auth, get_session
|
||||||
from fdhview.services.screenwriter.importer import import_sessions
|
from fhdhview.services.screenwriter.importer import import_sessions
|
||||||
from fdhview.services.screenwriter.parser import XmlParseError, parse_screenwriter_xml
|
from fhdhview.services.screenwriter.parser import XmlParseError, parse_screenwriter_xml
|
||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
@@ -8,8 +8,8 @@ from fastapi import Depends, HTTPException, status
|
|||||||
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
from fastapi.security import HTTPBasic, HTTPBasicCredentials
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.core.config import settings
|
from fhdhview.core.config import settings
|
||||||
from fdhview.core.database import async_session
|
from fhdhview.core.database import async_session
|
||||||
|
|
||||||
security = HTTPBasic()
|
security = HTTPBasic()
|
||||||
|
|
||||||
@@ -8,10 +8,10 @@ from fastapi import APIRouter, Depends
|
|||||||
from sqlmodel import col, select
|
from sqlmodel import col, select
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.api.deps import get_session
|
from fhdhview.api.deps import get_session
|
||||||
from fdhview.core.config import settings
|
from fhdhview.core.config import settings
|
||||||
from fdhview.models.screening import Screening
|
from fhdhview.models.screening import Screening
|
||||||
from fdhview.schemas.screening import ScreeningRead
|
from fhdhview.schemas.screening import ScreeningRead
|
||||||
|
|
||||||
router = APIRouter(prefix="/screenings", tags=["Screenings"])
|
router = APIRouter(prefix="/screenings", tags=["Screenings"])
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
|||||||
from sqlmodel import SQLModel
|
from sqlmodel import SQLModel
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.core.config import settings
|
from fhdhview.core.config import settings
|
||||||
|
|
||||||
sqlite_url = f"sqlite+aiosqlite:///{settings.sql_file_name}"
|
sqlite_url = f"sqlite+aiosqlite:///{settings.sql_file_name}"
|
||||||
|
|
||||||
@@ -7,11 +7,11 @@ from pathlib import Path
|
|||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
|
|
||||||
from fdhview.api.admin import router as admin_router
|
from fhdhview.api.admin import router as admin_router
|
||||||
from fdhview.api.health import router as health_router
|
from fhdhview.api.health import router as health_router
|
||||||
from fdhview.api.info import router as info_router
|
from fhdhview.api.info import router as info_router
|
||||||
from fdhview.api.screenings import router as screenings_router
|
from fhdhview.api.screenings import router as screenings_router
|
||||||
from fdhview.core.database import init_db
|
from fhdhview.core.database import init_db
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
@@ -7,7 +7,7 @@ import sqlalchemy as sa
|
|||||||
from pydantic import field_serializer, field_validator
|
from pydantic import field_serializer, field_validator
|
||||||
from sqlmodel import Field, SQLModel
|
from sqlmodel import Field, SQLModel
|
||||||
|
|
||||||
from fdhview.models.enums import KijkWijzer, Screen
|
from fhdhview.models.enums import KijkWijzer, Screen
|
||||||
|
|
||||||
|
|
||||||
class Screening(SQLModel, table=True):
|
class Screening(SQLModel, table=True):
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-FileCopyrightText: 2026 Filmhuis Den Haag
|
# SPDX-FileCopyrightText: 2026 Filmhuis Den Haag
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
from fdhview.models.enums import KijkWijzer, Screen
|
from fhdhview.models.enums import KijkWijzer, Screen
|
||||||
|
|
||||||
screens = {
|
screens = {
|
||||||
'DenHaag_zaal_1': Screen.ONE,
|
'DenHaag_zaal_1': Screen.ONE,
|
||||||
@@ -5,7 +5,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
from sqlmodel import SQLModel
|
from sqlmodel import SQLModel
|
||||||
|
|
||||||
from fdhview.models.enums import KijkWijzer, Screen
|
from fhdhview.models.enums import KijkWijzer, Screen
|
||||||
|
|
||||||
|
|
||||||
class ScreeningRead(SQLModel):
|
class ScreeningRead(SQLModel):
|
||||||
@@ -4,10 +4,10 @@
|
|||||||
from sqlmodel import delete
|
from sqlmodel import delete
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.models.enums import Screen
|
from fhdhview.models.enums import Screen
|
||||||
from fdhview.models.screening import KijkWijzer, Screening
|
from fhdhview.models.screening import KijkWijzer, Screening
|
||||||
from fdhview.models.tags import kijkwijzer, screens
|
from fhdhview.models.tags import kijkwijzer, screens
|
||||||
from fdhview.services.screenwriter.schema import AAMPos
|
from fhdhview.services.screenwriter.schema import AAMPos
|
||||||
|
|
||||||
# Delimiters used to attach notes to titles
|
# Delimiters used to attach notes to titles
|
||||||
DASH_DELIMITERS = (" - ", " – ", " — ", "- ")
|
DASH_DELIMITERS = (" - ", " – ", " — ", "- ")
|
||||||
@@ -5,7 +5,7 @@ from xml.etree import ElementTree as ET
|
|||||||
|
|
||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
|
|
||||||
from fdhview.services.screenwriter.schema import AAMPos
|
from fhdhview.services.screenwriter.schema import AAMPos
|
||||||
|
|
||||||
|
|
||||||
class XmlParseError(Exception):
|
class XmlParseError(Exception):
|
||||||
@@ -8,7 +8,7 @@ from zoneinfo import ZoneInfo
|
|||||||
from pydantic import BeforeValidator
|
from pydantic import BeforeValidator
|
||||||
from pydantic_xml import BaseXmlModel, RootXmlModel, element, wrapped
|
from pydantic_xml import BaseXmlModel, RootXmlModel, element, wrapped
|
||||||
|
|
||||||
from fdhview.core.config import settings
|
from fhdhview.core.config import settings
|
||||||
|
|
||||||
DT = Annotated[datetime, BeforeValidator(lambda v: datetime.strptime(v, "%Y%m%d%H%M").replace(
|
DT = Annotated[datetime, BeforeValidator(lambda v: datetime.strptime(v, "%Y%m%d%H%M").replace(
|
||||||
tzinfo=ZoneInfo(settings.timezone)
|
tzinfo=ZoneInfo(settings.timezone)
|
||||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
@@ -1,5 +1,5 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "fdhview"
|
name = "fhdhview"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
description = "Filmhuis Den Haag schedule viewer"
|
description = "Filmhuis Den Haag schedule viewer"
|
||||||
authors = [
|
authors = [
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from fdhview.services.screenwriter.schema import AAMPos
|
from fhdhview.services.screenwriter.schema import AAMPos
|
||||||
|
|
||||||
|
|
||||||
def read_xml():
|
def read_xml():
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
|||||||
from sqlmodel import SQLModel
|
from sqlmodel import SQLModel
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.api.deps import get_session
|
from fhdhview.api.deps import get_session
|
||||||
from fdhview.main import app
|
from fhdhview.main import app
|
||||||
|
|
||||||
test_engine = create_async_engine("sqlite+aiosqlite:///:memory:", echo=False)
|
test_engine = create_async_engine("sqlite+aiosqlite:///:memory:", echo=False)
|
||||||
test_session_maker = async_sessionmaker(test_engine, class_=AsyncSession, expire_on_commit=False)
|
test_session_maker = async_sessionmaker(test_engine, class_=AsyncSession, expire_on_commit=False)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
from fdhview.core.config import settings
|
from fhdhview.core.config import settings
|
||||||
|
|
||||||
AUTH = ("username", settings.api_password)
|
AUTH = ("username", settings.api_password)
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ from pathlib import Path
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from fdhview.services.screenwriter.importer import _clean_title
|
from fhdhview.services.screenwriter.importer import _clean_title
|
||||||
from fdhview.services.screenwriter.schema import AAMPos
|
from fhdhview.services.screenwriter.schema import AAMPos
|
||||||
|
|
||||||
|
|
||||||
def test_xml():
|
def test_xml():
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ from zoneinfo import ZoneInfo
|
|||||||
import pytest
|
import pytest
|
||||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||||
|
|
||||||
from fdhview.core.config import settings
|
from fhdhview.core.config import settings
|
||||||
from fdhview.models.enums import Screen
|
from fhdhview.models.enums import Screen
|
||||||
from fdhview.models.screening import Screening
|
from fhdhview.models.screening import Screening
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|||||||