From df89aa50a76d2dffbaf7a46e497d22244d89494b Mon Sep 17 00:00:00 2001 From: Aleksander Kowalski Date: Tue, 10 Jun 2025 13:05:00 +0200 Subject: [PATCH 1/6] fix: folder --- src/core/{src => core}/__init__.py | 0 src/core/{src => core}/clients/__init__.py | 0 src/core/{src => core}/clients/http_client.py | 0 src/core/{src => core}/commands/__init__.py | 0 src/core/{src => core}/commands/user_commands.py | 0 src/core/{src => core}/config/__init__.py | 0 src/core/{src => core}/config/config.yaml | 0 src/core/{src => core}/config/logger_config.py | 0 src/core/{src => core}/config/registry.py | 0 src/core/{src => core}/exceptions/__init__.py | 0 src/core/{src => core}/main.py | 0 src/core/{src => core}/models/__init__.py | 0 src/core/{src => core}/models/config.py | 0 src/core/{src => core}/models/user.py | 0 src/core/{src => core}/services/__init__.py | 0 src/core/{src => core}/services/user_service.py | 0 src/core/{src => core}/utils/__init__.py | 0 src/core/pyproject.toml | 4 ++-- 18 files changed, 2 insertions(+), 2 deletions(-) rename src/core/{src => core}/__init__.py (100%) rename src/core/{src => core}/clients/__init__.py (100%) rename src/core/{src => core}/clients/http_client.py (100%) rename src/core/{src => core}/commands/__init__.py (100%) rename src/core/{src => core}/commands/user_commands.py (100%) rename src/core/{src => core}/config/__init__.py (100%) rename src/core/{src => core}/config/config.yaml (100%) rename src/core/{src => core}/config/logger_config.py (100%) rename src/core/{src => core}/config/registry.py (100%) rename src/core/{src => core}/exceptions/__init__.py (100%) rename src/core/{src => core}/main.py (100%) rename src/core/{src => core}/models/__init__.py (100%) rename src/core/{src => core}/models/config.py (100%) rename src/core/{src => core}/models/user.py (100%) rename src/core/{src => core}/services/__init__.py (100%) rename src/core/{src => core}/services/user_service.py (100%) rename src/core/{src => core}/utils/__init__.py (100%) diff --git a/src/core/src/__init__.py b/src/core/core/__init__.py similarity index 100% rename from src/core/src/__init__.py rename to src/core/core/__init__.py diff --git a/src/core/src/clients/__init__.py b/src/core/core/clients/__init__.py similarity index 100% rename from src/core/src/clients/__init__.py rename to src/core/core/clients/__init__.py diff --git a/src/core/src/clients/http_client.py b/src/core/core/clients/http_client.py similarity index 100% rename from src/core/src/clients/http_client.py rename to src/core/core/clients/http_client.py diff --git a/src/core/src/commands/__init__.py b/src/core/core/commands/__init__.py similarity index 100% rename from src/core/src/commands/__init__.py rename to src/core/core/commands/__init__.py diff --git a/src/core/src/commands/user_commands.py b/src/core/core/commands/user_commands.py similarity index 100% rename from src/core/src/commands/user_commands.py rename to src/core/core/commands/user_commands.py diff --git a/src/core/src/config/__init__.py b/src/core/core/config/__init__.py similarity index 100% rename from src/core/src/config/__init__.py rename to src/core/core/config/__init__.py diff --git a/src/core/src/config/config.yaml b/src/core/core/config/config.yaml similarity index 100% rename from src/core/src/config/config.yaml rename to src/core/core/config/config.yaml diff --git a/src/core/src/config/logger_config.py b/src/core/core/config/logger_config.py similarity index 100% rename from src/core/src/config/logger_config.py rename to src/core/core/config/logger_config.py diff --git a/src/core/src/config/registry.py b/src/core/core/config/registry.py similarity index 100% rename from src/core/src/config/registry.py rename to src/core/core/config/registry.py diff --git a/src/core/src/exceptions/__init__.py b/src/core/core/exceptions/__init__.py similarity index 100% rename from src/core/src/exceptions/__init__.py rename to src/core/core/exceptions/__init__.py diff --git a/src/core/src/main.py b/src/core/core/main.py similarity index 100% rename from src/core/src/main.py rename to src/core/core/main.py diff --git a/src/core/src/models/__init__.py b/src/core/core/models/__init__.py similarity index 100% rename from src/core/src/models/__init__.py rename to src/core/core/models/__init__.py diff --git a/src/core/src/models/config.py b/src/core/core/models/config.py similarity index 100% rename from src/core/src/models/config.py rename to src/core/core/models/config.py diff --git a/src/core/src/models/user.py b/src/core/core/models/user.py similarity index 100% rename from src/core/src/models/user.py rename to src/core/core/models/user.py diff --git a/src/core/src/services/__init__.py b/src/core/core/services/__init__.py similarity index 100% rename from src/core/src/services/__init__.py rename to src/core/core/services/__init__.py diff --git a/src/core/src/services/user_service.py b/src/core/core/services/user_service.py similarity index 100% rename from src/core/src/services/user_service.py rename to src/core/core/services/user_service.py diff --git a/src/core/src/utils/__init__.py b/src/core/core/utils/__init__.py similarity index 100% rename from src/core/src/utils/__init__.py rename to src/core/core/utils/__init__.py diff --git a/src/core/pyproject.toml b/src/core/pyproject.toml index f23a408..9d0d381 100644 --- a/src/core/pyproject.toml +++ b/src/core/pyproject.toml @@ -18,14 +18,14 @@ dependencies = [ ] [project.scripts] -core = "src.main:entrypoint" +core = "core.main:entrypoint" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] -packages = ["src"] +packages = ["core"] [tool.uv.sources] utils = { workspace = true } From 4f6128a573d78681c96c5a00432abd7f06c30235 Mon Sep 17 00:00:00 2001 From: Aleksander Kowalski Date: Sun, 15 Jun 2025 18:59:59 +0200 Subject: [PATCH 2/6] fix: folder --- src/core/pyproject.toml | 3 --- src/core/{ => src}/core/__init__.py | 0 src/core/{ => src}/core/clients/__init__.py | 0 src/core/{ => src}/core/clients/http_client.py | 0 src/core/{ => src}/core/commands/__init__.py | 0 src/core/{ => src}/core/commands/user_commands.py | 0 src/core/{ => src}/core/config/__init__.py | 0 src/core/{ => src}/core/config/config.yaml | 0 src/core/{ => src}/core/config/logger_config.py | 0 src/core/{ => src}/core/config/registry.py | 0 src/core/{core/exceptions => src/core/core}/__init__.py | 0 src/core/{core/models => src/core/exceptions}/__init__.py | 0 src/core/{ => src}/core/main.py | 0 src/core/{core/services => src/core/models}/__init__.py | 0 src/core/{ => src}/core/models/config.py | 2 +- src/core/{ => src}/core/models/user.py | 0 src/core/{core/utils => src/core/services}/__init__.py | 0 src/core/{ => src}/core/services/user_service.py | 0 src/core/src/core/utils/__init__.py | 0 19 files changed, 1 insertion(+), 4 deletions(-) rename src/core/{ => src}/core/__init__.py (100%) rename src/core/{ => src}/core/clients/__init__.py (100%) rename src/core/{ => src}/core/clients/http_client.py (100%) rename src/core/{ => src}/core/commands/__init__.py (100%) rename src/core/{ => src}/core/commands/user_commands.py (100%) rename src/core/{ => src}/core/config/__init__.py (100%) rename src/core/{ => src}/core/config/config.yaml (100%) rename src/core/{ => src}/core/config/logger_config.py (100%) rename src/core/{ => src}/core/config/registry.py (100%) rename src/core/{core/exceptions => src/core/core}/__init__.py (100%) rename src/core/{core/models => src/core/exceptions}/__init__.py (100%) rename src/core/{ => src}/core/main.py (100%) rename src/core/{core/services => src/core/models}/__init__.py (100%) rename src/core/{ => src}/core/models/config.py (94%) rename src/core/{ => src}/core/models/user.py (100%) rename src/core/{core/utils => src/core/services}/__init__.py (100%) rename src/core/{ => src}/core/services/user_service.py (100%) create mode 100644 src/core/src/core/utils/__init__.py diff --git a/src/core/pyproject.toml b/src/core/pyproject.toml index 9d0d381..711610f 100644 --- a/src/core/pyproject.toml +++ b/src/core/pyproject.toml @@ -24,8 +24,5 @@ core = "core.main:entrypoint" requires = ["hatchling"] build-backend = "hatchling.build" -[tool.hatch.build.targets.wheel] -packages = ["core"] - [tool.uv.sources] utils = { workspace = true } diff --git a/src/core/core/__init__.py b/src/core/src/core/__init__.py similarity index 100% rename from src/core/core/__init__.py rename to src/core/src/core/__init__.py diff --git a/src/core/core/clients/__init__.py b/src/core/src/core/clients/__init__.py similarity index 100% rename from src/core/core/clients/__init__.py rename to src/core/src/core/clients/__init__.py diff --git a/src/core/core/clients/http_client.py b/src/core/src/core/clients/http_client.py similarity index 100% rename from src/core/core/clients/http_client.py rename to src/core/src/core/clients/http_client.py diff --git a/src/core/core/commands/__init__.py b/src/core/src/core/commands/__init__.py similarity index 100% rename from src/core/core/commands/__init__.py rename to src/core/src/core/commands/__init__.py diff --git a/src/core/core/commands/user_commands.py b/src/core/src/core/commands/user_commands.py similarity index 100% rename from src/core/core/commands/user_commands.py rename to src/core/src/core/commands/user_commands.py diff --git a/src/core/core/config/__init__.py b/src/core/src/core/config/__init__.py similarity index 100% rename from src/core/core/config/__init__.py rename to src/core/src/core/config/__init__.py diff --git a/src/core/core/config/config.yaml b/src/core/src/core/config/config.yaml similarity index 100% rename from src/core/core/config/config.yaml rename to src/core/src/core/config/config.yaml diff --git a/src/core/core/config/logger_config.py b/src/core/src/core/config/logger_config.py similarity index 100% rename from src/core/core/config/logger_config.py rename to src/core/src/core/config/logger_config.py diff --git a/src/core/core/config/registry.py b/src/core/src/core/config/registry.py similarity index 100% rename from src/core/core/config/registry.py rename to src/core/src/core/config/registry.py diff --git a/src/core/core/exceptions/__init__.py b/src/core/src/core/core/__init__.py similarity index 100% rename from src/core/core/exceptions/__init__.py rename to src/core/src/core/core/__init__.py diff --git a/src/core/core/models/__init__.py b/src/core/src/core/exceptions/__init__.py similarity index 100% rename from src/core/core/models/__init__.py rename to src/core/src/core/exceptions/__init__.py diff --git a/src/core/core/main.py b/src/core/src/core/main.py similarity index 100% rename from src/core/core/main.py rename to src/core/src/core/main.py diff --git a/src/core/core/services/__init__.py b/src/core/src/core/models/__init__.py similarity index 100% rename from src/core/core/services/__init__.py rename to src/core/src/core/models/__init__.py diff --git a/src/core/core/models/config.py b/src/core/src/core/models/config.py similarity index 94% rename from src/core/core/models/config.py rename to src/core/src/core/models/config.py index bf307b3..63b3021 100644 --- a/src/core/core/models/config.py +++ b/src/core/src/core/models/config.py @@ -30,7 +30,7 @@ def __init__(self): path = Path(__file__).parent.parent config_path = path / "config" / "config.yaml" - load_dotenv(dotenv_path=path.parent / ".env") + load_dotenv(dotenv_path=path.parent.parent / ".env") if not config_path.exists(): raise FileNotFoundError(f"Config file not found: {config_path}") diff --git a/src/core/core/models/user.py b/src/core/src/core/models/user.py similarity index 100% rename from src/core/core/models/user.py rename to src/core/src/core/models/user.py diff --git a/src/core/core/utils/__init__.py b/src/core/src/core/services/__init__.py similarity index 100% rename from src/core/core/utils/__init__.py rename to src/core/src/core/services/__init__.py diff --git a/src/core/core/services/user_service.py b/src/core/src/core/services/user_service.py similarity index 100% rename from src/core/core/services/user_service.py rename to src/core/src/core/services/user_service.py diff --git a/src/core/src/core/utils/__init__.py b/src/core/src/core/utils/__init__.py new file mode 100644 index 0000000..e69de29 From 338e2ffff5afa9deaed1071ef99235b75af18511 Mon Sep 17 00:00:00 2001 From: Aleksander Kowalski Date: Sun, 15 Jun 2025 19:11:37 +0200 Subject: [PATCH 3/6] fix: folder --- .pre-commit-config.yaml | 7 ++----- {tests/shared/utils => src/core/tests}/test_return_one.py | 0 tests/conftest.py | 0 3 files changed, 2 insertions(+), 5 deletions(-) rename {tests/shared/utils => src/core/tests}/test_return_one.py (100%) delete mode 100644 tests/conftest.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 389c71b..441825f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -57,7 +57,6 @@ repos: --wrap-descriptions, "90", src, - tests, ] # bandit - find common security issues @@ -66,10 +65,8 @@ repos: hooks: - id: bandit name: bandit - exclude: ^tests/ - args: - - -r - - src + args: ["-r", "src", "-x", "*/tests/*"] + pass_filenames: false # prettier - formatting JS, CSS, JSON, Markdown, ... - repo: https://github.com/pre-commit/mirrors-prettier diff --git a/tests/shared/utils/test_return_one.py b/src/core/tests/test_return_one.py similarity index 100% rename from tests/shared/utils/test_return_one.py rename to src/core/tests/test_return_one.py diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index e69de29..0000000 From cfb57b75d3e7def7f0c484d8ba3a51bc3a8ef232 Mon Sep 17 00:00:00 2001 From: Aleksander Kowalski Date: Sun, 15 Jun 2025 19:15:18 +0200 Subject: [PATCH 4/6] fix: folder --- src/core/core/__init__.py | 0 src/core/core/clients/__init__.py | 0 src/core/core/clients/http_client.py | 32 --------------- src/core/core/commands/__init__.py | 0 src/core/core/commands/user_commands.py | 52 ------------------------- src/core/core/config/__init__.py | 0 src/core/core/config/config.yaml | 30 -------------- src/core/core/config/logger_config.py | 13 ------- src/core/core/config/registry.py | 14 ------- src/core/core/exceptions/__init__.py | 0 src/core/core/main.py | 32 --------------- src/core/core/models/__init__.py | 0 src/core/core/models/config.py | 45 --------------------- src/core/core/models/user.py | 32 --------------- src/core/core/services/__init__.py | 0 src/core/core/services/user_service.py | 22 ----------- src/core/core/utils/__init__.py | 0 17 files changed, 272 deletions(-) delete mode 100644 src/core/core/__init__.py delete mode 100644 src/core/core/clients/__init__.py delete mode 100644 src/core/core/clients/http_client.py delete mode 100644 src/core/core/commands/__init__.py delete mode 100644 src/core/core/commands/user_commands.py delete mode 100644 src/core/core/config/__init__.py delete mode 100644 src/core/core/config/config.yaml delete mode 100644 src/core/core/config/logger_config.py delete mode 100644 src/core/core/config/registry.py delete mode 100644 src/core/core/exceptions/__init__.py delete mode 100644 src/core/core/main.py delete mode 100644 src/core/core/models/__init__.py delete mode 100644 src/core/core/models/config.py delete mode 100644 src/core/core/models/user.py delete mode 100644 src/core/core/services/__init__.py delete mode 100644 src/core/core/services/user_service.py delete mode 100644 src/core/core/utils/__init__.py diff --git a/src/core/core/__init__.py b/src/core/core/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/clients/__init__.py b/src/core/core/clients/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/clients/http_client.py b/src/core/core/clients/http_client.py deleted file mode 100644 index 4a7c1df..0000000 --- a/src/core/core/clients/http_client.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Any, Dict, Optional - -import requests # type: ignore -from ..models.config import Settings -from wireup import service - - -@service -class HttpClient: - def __init__(self, settings: Settings): - self.base_url = settings.api.base_url.rstrip("/") - self.session = requests.Session() - - def get(self, endpoint: str, params: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: - url = f"{self.base_url}{endpoint}" - try: - response = self.session.get(url, params=params) - response.raise_for_status() - return response.json() - except requests.exceptions.RequestException as e: - raise Exception(f"HTTP request failed: {e}") - except ValueError as e: - raise Exception(f"Invalid JSON response: {e}") - - def close(self): - self.session.close() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() diff --git a/src/core/core/commands/__init__.py b/src/core/core/commands/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/commands/user_commands.py b/src/core/core/commands/user_commands.py deleted file mode 100644 index bdb21cd..0000000 --- a/src/core/core/commands/user_commands.py +++ /dev/null @@ -1,52 +0,0 @@ -import logging - -import typer -from ..config.registry import command_group -from ..services.user_service import UserService -from wireup import service - - -@command_group("user") -@service() -class UserCommands: - def __init__(self, user_service: UserService, logger: logging.Logger): - self.user_service = user_service - self.logger = logger - self.app = typer.Typer(help="User management commands") - self._register_commands() - - def _register_commands(self): - self.app.command("get", help="Fetch a specific user by ID")(self.get_user) - self.app.command("list", help="List all users")(self.list_users) - self.app.command("posts", help="Get posts for a specific user")(self.get_user_posts) - - def get_user(self, user_id: int = typer.Option(1, "--id", help="User ID to fetch")) -> None: - try: - user = self.user_service.get_user_by_id(user_id) - self.logger.info(f"User: {user.name} ({user.email})") - self.logger.info(f"Company: {user.company.name}") - self.logger.info(f"Address: {user.address.street}, {user.address.city}") - except Exception as e: - self.logger.error(f"Error fetching user: {e}") - raise typer.Exit(1) - - def list_users(self) -> None: - try: - users = self.user_service.get_all_users() - self.logger.info(f"Found {len(users)} users:") - for user in users: - self.logger.info(f" {user.id}: {user.name} ({user.email})") - except Exception as e: - self.logger.error(f"Error fetching users: {e}") - raise typer.Exit(1) - - def get_user_posts(self, user_id: int = typer.Option(1, "--id", help="User ID")) -> None: - try: - posts = self.user_service.get_user_posts(user_id) - user = self.user_service.get_user_by_id(user_id) - self.logger.info(f"Posts by {user.name}:") - for post in posts: - self.logger.info(f" - {post['title']}") - except Exception as e: - self.logger.error(f"Error fetching posts: {e}") - raise typer.Exit(1) diff --git a/src/core/core/config/__init__.py b/src/core/core/config/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/config/config.yaml b/src/core/core/config/config.yaml deleted file mode 100644 index b79a4e1..0000000 --- a/src/core/core/config/config.yaml +++ /dev/null @@ -1,30 +0,0 @@ -#https://docs.python.org/3/library/logging.config.html#logging-config-dictschema -logging: - version: 1 - formatters: - simple: - format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" - datefmt: "%Y-%m-%d %H:%M:%S" - handlers: - console: - class: logging.StreamHandler - level: DEBUG - formatter: simple - stream: ext://sys.stdout - loggers: - reports: - level: DEBUG - handlers: [console] - propagate: no - root: - level: INFO - handlers: [console] - -api: - base_url: !ENV API_BASE_URL - retry_attempts: 3 - -app: - name: "Hello World CLI" - version: "1.0.0" - default_greeting: "Hello" diff --git a/src/core/core/config/logger_config.py b/src/core/core/config/logger_config.py deleted file mode 100644 index 875ad14..0000000 --- a/src/core/core/config/logger_config.py +++ /dev/null @@ -1,13 +0,0 @@ -import logging -from logging.config import dictConfig - -from ..models.config import Settings -from wireup import service - - -@service -def create_logger(settings: Settings) -> logging.Logger: - dictConfig(settings.logging) - logger = logging.getLogger() - logger.info("✅ Skonfigurowano logger") - return logger diff --git a/src/core/core/config/registry.py b/src/core/core/config/registry.py deleted file mode 100644 index 4536c92..0000000 --- a/src/core/core/config/registry.py +++ /dev/null @@ -1,14 +0,0 @@ -_command_registry = [] - - -def command_group(name: str): - def decorator(cls): - cls._command_name = name - _command_registry.append(cls) - return cls - - return decorator - - -def get_registered_commands(): - return _command_registry diff --git a/src/core/core/exceptions/__init__.py b/src/core/core/exceptions/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/main.py b/src/core/core/main.py deleted file mode 100644 index f33a160..0000000 --- a/src/core/core/main.py +++ /dev/null @@ -1,32 +0,0 @@ -import typer -import wireup -from .clients.http_client import HttpClient -from .config.registry import get_registered_commands -from .commands.user_commands import UserCommands -from .config.logger_config import create_logger -from .models.config import Settings -from .services.user_service import UserService -from utils import hello as hello_world_from_utils - -container = wireup.create_sync_container( - services=[Settings, create_logger, HttpClient, UserService, UserCommands] -) - -app = typer.Typer() - -for command_class in get_registered_commands(): - command_instance = container.get(command_class) - app.add_typer(command_instance.app, name=command_class._command_name) - - -@app.command(help="Greet someone with a friendly message") -def hello(): - hello_world_from_utils() - - -def entrypoint(): - app() - - -if __name__ == "__main__": - entrypoint() diff --git a/src/core/core/models/__init__.py b/src/core/core/models/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/models/config.py b/src/core/core/models/config.py deleted file mode 100644 index bf307b3..0000000 --- a/src/core/core/models/config.py +++ /dev/null @@ -1,45 +0,0 @@ -from pathlib import Path -import yaml -from pydantic import BaseModel -from wireup import service -from yaml.loader import SafeLoader -from yaml_env_tag import construct_env_tag -from dotenv import load_dotenv - -SafeLoader.add_constructor("!ENV", construct_env_tag) - - -class ApiConfig(BaseModel): - base_url: str - retry_attempts: int - - -class AppConfig(BaseModel): - name: str - version: str - default_greeting: str - - -@service -class Settings(BaseModel): - api: ApiConfig - app: AppConfig - logging: dict - - def __init__(self): - path = Path(__file__).parent.parent - config_path = path / "config" / "config.yaml" - - load_dotenv(dotenv_path=path.parent / ".env") - - if not config_path.exists(): - raise FileNotFoundError(f"Config file not found: {config_path}") - - with open(config_path, "r") as f: - config_data = yaml.load(f, Loader=SafeLoader) - - super().__init__(**config_data) - - @classmethod - def load_from_yaml(cls) -> "Settings": - return cls() diff --git a/src/core/core/models/user.py b/src/core/core/models/user.py deleted file mode 100644 index 284d2f1..0000000 --- a/src/core/core/models/user.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Any, Dict - -from pydantic import BaseModel - - -class Address(BaseModel): - street: str - suite: str - city: str - zipcode: str - geo: Dict[str, str] - - -class Company(BaseModel): - name: str - catchPhrase: str - bs: str - - -class User(BaseModel): - id: int - name: str - username: str - email: str - address: Address - phone: str - website: str - company: Company - - @classmethod - def from_dict(cls, data: Dict[str, Any]) -> "User": - return cls(**data) diff --git a/src/core/core/services/__init__.py b/src/core/core/services/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/core/core/services/user_service.py b/src/core/core/services/user_service.py deleted file mode 100644 index f972d87..0000000 --- a/src/core/core/services/user_service.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Any, Dict, List, cast - -from ..clients.http_client import HttpClient -from ..models.user import User -from wireup import service - - -@service() -class UserService: - def __init__(self, http_client: HttpClient): - self.http_client = http_client - - def get_user_by_id(self, user_id: int) -> User: - data = self.http_client.get(f"/users/{user_id}") - return User.from_dict(cast(Dict[str, Any], data)) - - def get_all_users(self) -> List[User]: - data = self.http_client.get("/users") - return [User.from_dict(user_data) for user_data in cast(List[Dict[str, Any]], data)] - - def get_user_posts(self, user_id: int) -> List[Dict[str, Any]]: - return cast(List[Dict[str, Any]], self.http_client.get(f"/users/{user_id}/posts")) diff --git a/src/core/core/utils/__init__.py b/src/core/core/utils/__init__.py deleted file mode 100644 index e69de29..0000000 From c33452d2f1f7509453de0b654d813db618cfc769 Mon Sep 17 00:00:00 2001 From: Aleksander Kowalski Date: Sun, 15 Jun 2025 19:17:08 +0200 Subject: [PATCH 5/6] fix: folder --- .github/workflows/python.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 2017331..1587410 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -55,7 +55,7 @@ jobs: run: uv run pre-commit run --all-files - name: Test with pytest - run: uv run pytest tests --cov=src + run: uv run pytest --cov=src - name: Minimize uv cache run: uv cache prune --ci From dd4af654b3cab218de691b02b8e29275cdc49dde Mon Sep 17 00:00:00 2001 From: Aleksander Kowalski Date: Sun, 15 Jun 2025 19:22:06 +0200 Subject: [PATCH 6/6] fix: folder --- .gitignore | 2 ++ shared/utils/README.md | 52 ++++++++++++++++++++++++++++++ src/core/README.md | 24 +++++++------- src/core/src/core/core/__init__.py | 0 4 files changed, 66 insertions(+), 12 deletions(-) delete mode 100644 src/core/src/core/core/__init__.py diff --git a/.gitignore b/.gitignore index 0a19790..b7f3c34 100644 --- a/.gitignore +++ b/.gitignore @@ -172,3 +172,5 @@ cython_debug/ # PyPI configuration file .pypirc + +.idea diff --git a/shared/utils/README.md b/shared/utils/README.md index e69de29..81995c2 100644 --- a/shared/utils/README.md +++ b/shared/utils/README.md @@ -0,0 +1,52 @@ +# Shared Utils + +Shared utilities and common functionality used across multiple modules in the project. + +## Structure + +``` +shared/utils/ +├── src/utils/ # Shared utilities source code +├── pyproject.toml # Package configuration +└── README.md # This file +``` + +## Overview + +This package contains reusable utility functions, helpers, and common code that can be shared between different modules of the application. It provides a centralized location for: + +- Common data structures and types +- Utility functions and helpers +- Shared configuration utilities +- Cross-module interfaces and contracts + +## Installation + +The shared utilities are installed as a local package dependency. To install in development mode: + +```bash +pip install -e shared/utils/ +``` + +## Usage + +Import utilities from the shared package: + +```python +from utils import your_utility_function +# or +from utils.module_name import specific_function +``` + +## Development + +When adding new shared utilities: + +1. Place them in the appropriate module under `src/utils/` +2. Update the package's `__init__.py` if needed +3. Add tests for new functionality +4. Update this README if adding major new features + +## Dependencies + +Check `pyproject.toml` for current dependencies and requirements. diff --git a/src/core/README.md b/src/core/README.md index 03cd839..c95182c 100644 --- a/src/core/README.md +++ b/src/core/README.md @@ -5,18 +5,18 @@ Core application module providing CLI interface and business logic functionality ## 📁 Structure ``` -src/ -├── clients/ # HTTP clients and external integrations -├── commands/ # CLI command implementations -├── config/ # Configuration management -│ ├── config.yaml # Application configuration -│ └── logger_config.py -├── exceptions/ # Custom exception classes -├── models/ # Data models and schemas -│ └── config.py # Settings and configuration models -├── services/ # Business logic services -├── utils/ # Core utilities -└── main.py # Application entry point + src/ + ├── core/ # Core module source code + │ ├── clients/ # HTTP clients and external integrations + │ ├── commands/ # CLI command implementations + │ ├── config/ # Configuration management + │ ├── core/ # Core functionality + │ ├── exceptions/ # Custom exception classes + │ ├── models/ # Data models and schemas + │ ├── services/ # Business logic services + │ ├── utils/ # Core utilities + │ └── main.py # Application entry point + └── tests/ # Core module tests ``` ## 🚀 Usage diff --git a/src/core/src/core/core/__init__.py b/src/core/src/core/core/__init__.py deleted file mode 100644 index e69de29..0000000