Compare commits

..
Author SHA1 Message Date
Gustavo Henrique Miranda 9499daa68b Merge 78e45e26fd into 8f36e5a770 2025-07-19 22:06:55 +00:00
Gustavo Henrique Miranda 8f36e5a770 Merge pull request #37 from gmbrax/dependabot/pip/typing-extensions-4.14.1
Bump typing-extensions from 4.14.0 to 4.14.1
2025-07-14 19:15:54 -03:00
Gustavo Henrique Miranda 11e9cf6e75 Merge pull request #38 from gmbrax/dependabot/pip/textual-approx-eq-4.0.0
Update textual requirement from ~=3.3.0 to ~=4.0.0
2025-07-14 19:14:47 -03:00
9 changed files with 47 additions and 76 deletions
+33 -29
View File
@@ -1,32 +1,36 @@
[build-system] [build-system]
requires = ["hatchling"] requires = ["hatchling"]
build-backend = "hatchling.build" build-backend = "hatchling.build"
[project]
name = "pilgrim"
version = "0.0.4"
authors = [
{ name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" }
]
description = "Pilgrim's Travel Log"
readme = "README.md"
requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
]
dependencies = [
"sqlalchemy",
"textual",
"tomli",
"tomli_w",
"unidecode"
]
[project.urls] [project]
Homepage = "https://github.com/gmbrax/Pilgrim/" name = "Pilgrim"
Issues = "https://github.com/gmbrax/Pilgrim/issues" version = "0.0.4"
authors = [
{ name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" }
]
description = "Pilgrim's Travel Log"
readme = "README.md"
requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
]
dependencies = [
"sqlalchemy",
"textual",
"tomli",
"tomli_w"
[project.scripts]
pilgrim = "pilgrim.command:main" ]
[template.plugins.default]
src-layout = true
[project.urls]
Homepage = "https://github.com/gmbrax/Pilgrim/"
Issues = "https://github.com/gmbrax/Pilgrim/issues"
[tool.hatch.build.targets.wheel]
packages = ["src/pilgrim"]
[project.scripts]
pilgrim = "pilgrim:main"
+1 -1
View File
@@ -1,5 +1,5 @@
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from pathlib import Path from pathlib import Path
import os import os
+3 -4
View File
@@ -4,16 +4,15 @@ from pilgrim.models.photo_in_entry import photo_entry_association
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime from sqlalchemy import Column, Integer, String, ForeignKey, DateTime
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from pilgrim.database import Base from ..database import Base
class Entry(Base): class Entry(Base):
__tablename__ = "entries" __tablename__ = "entries"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
title = Column(String,nullable=False) title = Column(String)
text = Column(String) text = Column(String)
date = Column(DateTime,nullable=False) date = Column(DateTime)
photos = relationship( photos = relationship(
"Photo", "Photo",
secondary=photo_entry_association, secondary=photo_entry_association,
+1 -2
View File
@@ -7,8 +7,7 @@ from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import Index from sqlalchemy.sql.schema import Index
from pilgrim.models.photo_in_entry import photo_entry_association from pilgrim.models.photo_in_entry import photo_entry_association
from pilgrim.database import Base from ..database import Base
class Photo(Base): class Photo(Base):
+1 -1
View File
@@ -1,6 +1,6 @@
from sqlalchemy import Table, Column, Integer, ForeignKey from sqlalchemy import Table, Column, Integer, ForeignKey
from pilgrim.database import Base from ..database import Base
photo_entry_association = Table('photo_entry_association', Base.metadata, photo_entry_association = Table('photo_entry_association', Base.metadata,
Column('id', Integer, primary_key=True, autoincrement=True), Column('id', Integer, primary_key=True, autoincrement=True),
+2 -3
View File
@@ -3,11 +3,10 @@ from typing import Any
from sqlalchemy import Column, Integer, String, UniqueConstraint from sqlalchemy import Column, Integer, String, UniqueConstraint
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from pilgrim.database import Base from .. import database
class TravelDiary(database.Base):
class TravelDiary(Base):
__tablename__ = "travel_diaries" __tablename__ = "travel_diaries"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
name = Column(String, nullable=False) name = Column(String, nullable=False)
+3 -3
View File
@@ -1,9 +1,9 @@
from datetime import datetime from datetime import datetime
from typing import List from typing import List
from pilgrim.models.entry import Entry from ..models.entry import Entry
from pilgrim.models.travel_diary import TravelDiary from ..models.travel_diary import TravelDiary
from pilgrim.models.photo import Photo # ✨ Importe o modelo Photo from ..models.photo import Photo # ✨ Importe o modelo Photo
class EntryService: class EntryService:
+3 -5
View File
@@ -6,8 +6,8 @@ from pathlib import Path
from pilgrim.utils import DirectoryManager from pilgrim.utils import DirectoryManager
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from pilgrim.models.travel_diary import TravelDiary from ..models.travel_diary import TravelDiary
from unidecode import unidecode
class TravelDiaryService: class TravelDiaryService:
def __init__(self, session): def __init__(self, session):
@@ -20,10 +20,8 @@ class TravelDiaryService:
- Replaces spaces with underscores - Replaces spaces with underscores
- Ensures name is unique by adding a suffix if needed - Ensures name is unique by adding a suffix if needed
""" """
transliterated_name = unidecode(name)
# Remove special characters and replace spaces # Remove special characters and replace spaces
safe_name = re.sub(r'[^\w\s-]', '', transliterated_name) safe_name = re.sub(r'[^\w\s-]', '', name)
safe_name = safe_name.strip().replace(' ', '_').lower() safe_name = safe_name.strip().replace(' ', '_').lower()
# Ensure we have a valid name # Ensure we have a valid name
-28
View File
@@ -1,28 +0,0 @@
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from pilgrim.database import Base
from pilgrim.models.travel_diary import TravelDiary
# Todos os imports necessários para as fixtures devem estar aqui
# ...
@pytest.fixture(scope="function")
def db_session():
"""Esta fixture agora está disponível para TODOS os testes."""
engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
yield session
session.close()
Base.metadata.drop_all(engine)
@pytest.fixture
def populated_db_session(db_session):
"""Esta também fica disponível para todos."""
travel_diary = TravelDiary(name="My Travel Diary", directory_name="viagem-teste")
db_session.add(travel_diary)
db_session.commit()
return db_session