diff --git a/derivation.nix b/derivation.nix index 241000d..d27b324 100644 --- a/derivation.nix +++ b/derivation.nix @@ -7,4 +7,7 @@ buildPythonApplication { src = ./.; pyproject = true; build-system = [setuptools]; + postInstall = '' + install -Dm755 scripts/seed.py $out/bin/seed + ''; } diff --git a/scripts/seed.py b/scripts/seed.py new file mode 100644 index 0000000..0099977 --- /dev/null +++ b/scripts/seed.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +from sqlalchemy.orm import Session +from src.infra.publication import ( + PublicationEntryModel, + PublicationSequenceModel, + PublicationModel, + PublicationOrderModel, +) +import argparse +import os +from src.config.database import Database +from src.infra.db import get_database + +if __name__ == '__main__': + arg_parser = argparse.ArgumentParser('seed.py', 'run to load seed data into a database') + arg_parser.add_argument('-u', '--url', help='The URL for the database', required=True) + arg_parser.add_argument('-d', '--data', help='the directory containing large content files', required=True) + args = arg_parser.parse_args() + + with open(os.path.join(args.data, './a-study-in-scarlet.txt')) as infile: + text = infile.read() + + db = get_database(Database(url=args.url, echo=True)) + with Session(db) as session: + entry = PublicationEntryModel(text=text) + session.add(entry) + publication = PublicationModel( + title='Sherlock Holmes Canon', + description='A collection of detective mystery novels featuring Sherlock Holmes', + by_line='Sir Arthur Conan Doyle', + ) + session.flush() + order = PublicationOrderModel(title='Published Timeline', publication_id=publication.id) + session.flush() + sequence = PublicationSequenceModel( + position=0, + entry_id=entry.id, + order_id=order.id, + duration=None, + ) + session.commit() diff --git a/src/infra/publication.py b/src/infra/publication.py index d42dfc1..b07df6d 100644 --- a/src/infra/publication.py +++ b/src/infra/publication.py @@ -12,7 +12,6 @@ class PublicationEntryModel(Base): id: Mapped[int] = mapped_column(primary_key=True) text: Mapped[str] = mapped_column(Text()) - html: Mapped[str | None] = mapped_column(Text()) sequences: Mapped[list['PublicationSequenceModel']] = relationship(back_populates='entry') @@ -56,7 +55,7 @@ class PublicationModel(Base): def model_to_entry(db_pub_entry: PublicationEntryModel) -> Entry: - return Entry(id=db_pub_entry.id, text=db_pub_entry.text, html=db_pub_entry.html) + return Entry(id=db_pub_entry.id, text=db_pub_entry.text) def model_to_sequence(db_pub_position: PublicationSequenceModel) -> Sequence: diff --git a/src/infra/users.py b/src/infra/users.py index c1ed09c..0150631 100644 --- a/src/infra/users.py +++ b/src/infra/users.py @@ -6,7 +6,8 @@ from sqlalchemy import String, VARCHAR, Engine, select from sqlalchemy.orm import mapped_column, Mapped, Session from argon2 import PasswordHasher from src.infra.db import Base -from src.services.users import UserRepo, UserDTO, User +from src.services.users.data import UserDTO, User +from src.services.users.repo import UserRepo class UserModel(Base): diff --git a/src/main.py b/src/main.py index f71eeff..aca6e66 100644 --- a/src/main.py +++ b/src/main.py @@ -4,7 +4,7 @@ from src.services.router import Router from src.services.notifications import NotificationService, get_notification_service from src.services.email import EmailService, get_email_service from src.services.auth import AuthService -from src.services.users import UserService +from src.services.users.service import UserService from dataclasses import dataclass from src.infra.db import get_database from src.infra.users import UserRepoImpl diff --git a/src/services/auth.py b/src/services/auth.py index 2fb5261..26d7b55 100644 --- a/src/services/auth.py +++ b/src/services/auth.py @@ -7,7 +7,7 @@ from dataclasses import dataclass, asdict from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey import jwt -from src.services.users import User +from src.services.users.data import User from src.config.auth import Auth as AuthConfig JWT = str diff --git a/src/services/publications/data.py b/src/services/publications/data.py index 64ec929..7d2bf59 100644 --- a/src/services/publications/data.py +++ b/src/services/publications/data.py @@ -6,7 +6,6 @@ from dataclasses import dataclass, field class Entry: id: int text: str - html: str | None = None @dataclass diff --git a/src/services/users/__init__.py b/src/services/users/__init__.py index f733467..e69de29 100644 --- a/src/services/users/__init__.py +++ b/src/services/users/__init__.py @@ -1,5 +0,0 @@ -from .data import User, UserProfile, UserDTO, SignupError, LoginError -from .service import UserService -from .repo import UserRepo - -__all__ = ['User', 'UserProfile', 'UserDTO', 'SignupError', 'LoginError', 'UserService', 'UserRepo']