Compare commits

..
Author SHA1 Message Date
Gustavo Henrique Santos Souza de Miranda f2b5f8b743 Merge branch 'fix/Importing-duplicate-images' into development
Merging the fix for the duplicate photo hash bugha
2025-07-19 01:04:03 -03:00
Gustavo Henrique Santos Souza de Miranda 8f98cb6c47 Merge branch 'fix/remove-stale-hashing-methods' into development
Removed some stale methods used for hashing the photos and refactored the code where it used the method to used the service hashing instead
2025-07-18 02:29:18 -03:00
Gustavo Henrique Santos Souza de Miranda b8a5f2db15 Merge branch 'fix/edit-photo-not-working' into development
Merged the fix to allow the edit of the photos that was brokenakejillow d
2025-07-18 01:20:31 -03:00
Gustavo Henrique Santos Souza de Miranda db3f7f846b Merge branch 'fix/sidebar-layout' into development
Merged the new sidebar layout and css to the development branch
2025-07-17 22:06:38 -03:00
Gustavo Henrique Miranda 26ef00fe3e Merge pull request #54 from gmbrax/feat/use-a-toml-for-config
Feat/use a toml for config
2025-07-16 22:16:32 -03:00
Gustavo Henrique Miranda 10135b9cdc Merge pull request #53 from gmbrax/staging
Staging
2025-07-16 01:34:56 -03:00
Gustavo Henrique Miranda 69c2fcfde6 Merge pull request #51 from gmbrax/fix/move-create-diary-to-modal
Change to call the method in the super class on the _on_screen_resume method
2025-07-16 00:54:48 -03:00
Gustavo Henrique Miranda 35f37f5926 Merge pull request #46 from gmbrax/fix/move-create-diary-to-modal
Fix/move create diary to modal
2025-07-15 17:28:22 -03:00
11 changed files with 97 additions and 151 deletions
+24
View File
@@ -0,0 +1,24 @@
name: Pylint
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
pip install pylint
- name: Analysing the code with pylint
run: |
pylint --disable=C0114,C0115,C0116 --exit-zero $(git ls-files '*.py')
-63
View File
@@ -1,63 +0,0 @@
name: Pylint and SonarCloud
on:
push:
branches: [ main, master, staging ]
pull_request:
branches: [ main, master, staging ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Necessário para SonarCloud
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
pip install pylint ruff coverage pytest
- name: Analysing the code with pylint (console output)
run: |
pylint --disable=C0114,C0115,C0116 --exit-zero $(git ls-files '*.py') || true
- name: Generate Pylint report for SonarCloud
run: |
pylint --disable=C0114,C0115,C0116 --output-format=json --exit-zero $(git ls-files '*.py') > pylint-report.json || true
- name: Run Ruff
run: |
ruff check --output-format=json . > ruff-report.json || true
- name: Run tests with coverage (if you have tests)
run: |
if [ -d "tests" ] || [ -f "test_*.py" ] || [ -f "*_test.py" ]; then
coverage run -m pytest || true
coverage xml || true
else
echo "No tests found, skipping coverage"
fi
- name: SonarCloud Scan
uses: SonarSource/sonarqube-scan-action@v5.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
with:
args: >
-Dsonar.projectKey=gmbrax_Pilgrim
-Dsonar.organization=gmbrax
-Dsonar.python.pylint.reportPaths=pylint-report.json
-Dsonar.python.ruff.reportPaths=ruff-report.json
-Dsonar.python.coverage.reportPaths=coverage.xml
+30 -47
View File
@@ -1,68 +1,51 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
## Unreleased The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Planned ## [Unreleased]
* Installation Method 1 (repository compilation)
* Organization of trips by date, location, or theme
* Enhanced photo management features
* Search functionality
* Export features
* Testing implementation
## [0.0.4] - 2025-07-19 ### Planned
### Added - Installation Method 1 (repository compilation)
* Support for creating new diaries asynchronously, with an option to automatically open the newly created diary - Organization of trips by date, location, or theme
* Unified "Enter" key support for saving or creating diaries across relevant modals - Enhanced photo management features
* Automatic diary list refresh when returning to the diary screen - Search functionality
* Application configuration management with a new centralized config system - Export features
* Database location and initialization now configurable via the new config manager - Testing implementation
* Automatic migration of database file to the configuration directory
* Display of database URL on application startup for transparency
* Duplicate photo detection before photo creation to prevent redundant entries
* Photo hash indexing to improve photo lookup performance
### Changed
* Enhanced feedback and validation when editing or creating diary names
* Streamlined and unified save logic for diary modals, reducing duplicated behavior
* About screen now displays the actual installed application version dynamically
* Sidebar and photo-related UI text updated to remove emoji icons for a cleaner appearance
* Sidebar layout and scrolling behavior improved for better usability
* Photo hash generation now relies on existing service-provided hashes instead of local computation
### Improved
* Enhanced feedback and validation when editing or creating diary names
* Streamlined and unified save logic for diary modals, reducing duplicated behavior
* Sidebar layout and scrolling behavior for better usability
## [0.0.3] - 2025-07-07 ## [0.0.3] - 2025-07-07
### Changed ### Changed
* Removed the dependency on textual-dev from pyproject.toml - Removed the dependency on textual-dev from pyproject.toml
## [0.0.2] - 2025-07-07 ## [0.0.2] - 2025-07-07
### Changed ### Changed
* Changed the license in pyproject.toml to BSD - Changed the license in pyproject.toml to BSD
## [0.0.1] - 2025-07-06 ## [0.0.1] - 2025-07-06
### Added ### Added
* Initial alpha release of Pilgrim travel diary application
* Create and edit travel diaries - Initial alpha release of Pilgrim travel diary application
* Create and edit diary entries - Create and edit travel diaries
* Photo ingestion system - Create and edit diary entries
* Photo addition and reference via sidebar - Photo ingestion system
* Text User Interface (TUI) built with Textual framework - Photo addition and reference via sidebar
* Pre-compiled binary installation method (Method 2) - Text User Interface (TUI) built with Textual framework
* Support for Linux operating systems - Pre-compiled binary installation method (Method 2)
* Basic project documentation (README) - Support for Linux operating systems
- Basic project documentation (README)
### Known Issues ### Known Issues
* Installation Method 1 not yet implemented
* No testing suite implemented yet - Installation Method 1 not yet implemented
* Some features may be unstable in an alpha version - No testing suite implemented yet
- Some features may be unstable in an alpha version
[Unreleased]: https://github.com/username/pilgrim/compare/v0.0.1...HEAD
[0.0.1]: https://github.com/username/pilgrim/releases/tag/v0.0.1
+25 -20
View File
@@ -1,31 +1,36 @@
[build-system] [build-system]
requires = ["hatchling"] requires = ["hatchling"]
build-backend = "hatchling.build" build-backend = "hatchling.build"
[project]
name = "pilgrim" [project]
version = "0.0.4" name = "Pilgrim"
authors = [ version = "0.0.4"
authors = [
{ name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" } { name="Gustavo Henrique Santos Souza de Miranda", email="gustavohssmiranda@gmail.com" }
] ]
description = "Pilgrim's Travel Log" description = "Pilgrim's Travel Log"
readme = "README.md" readme = "README.md"
requires-python = ">=3.10" requires-python = ">=3.10"
classifiers = [ classifiers = [
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"License :: OSI Approved :: BSD License", "License :: OSI Approved :: BSD License",
"Operating System :: OS Independent", "Operating System :: OS Independent",
] ]
dependencies = [ dependencies = [
"sqlalchemy", "sqlalchemy",
"textual", "textual",
"tomli", "tomli",
"tomli_w" "tomli_w"
]
[project.urls]
Homepage = "https://github.com/gmbrax/Pilgrim/"
Issues = "https://github.com/gmbrax/Pilgrim/issues"
[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
+1 -2
View File
@@ -4,8 +4,7 @@ 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):
+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:
+1 -1
View File
@@ -6,7 +6,7 @@ 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
class TravelDiaryService: class TravelDiaryService: