timber-common 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {timber_common-0.2.2 → timber_common-0.2.3}/PKG-INFO +1 -1
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/security/oauth_service.py +11 -11
- {timber_common-0.2.2 → timber_common-0.2.3}/pyproject.toml +1 -1
- {timber_common-0.2.2 → timber_common-0.2.3}/CHANGELOG.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/LICENSE +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/README.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/config/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/config/model_loader.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/engine/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/engine/config_executor.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/engine/operation_registry.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/init.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/base.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/configs/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/core/__init.__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/core/tag.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/core/user.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/factory.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/mixins.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/models/registry.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/alphavantage.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/base.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/curated_data.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/polygon.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/stock.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/yfinance.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/portfolio_metrics.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/returns.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/risk_metrics.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/standardization.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/technical_indicators.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/db_service.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/encryption/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/encryption/field_encryption.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/gdpr/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/gdpr/deletion.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/available_capabilities.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/cached_capabilities.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/loader.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/base.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/cache.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/instances.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/manager.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/notification.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/research.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/session.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/tracker.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/security/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/vector/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/vector/auto_ingestion.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/services/vector/tag_embedding.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/config.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/db_utils.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/helpers.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/time_helpers.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/validators.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/00_association_tables.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/cache_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/narrative_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/notification_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/oauth_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/portfolio_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/stock_research_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/user_preferences_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/data/models/vector_db_models.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/DOCUMENTATION_INDEX.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/DOCUMENTATION_SUMMARY.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/PROGRESS_UPDATE.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/TIMBER_SESSION_API_REFERENCE.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/01_model_design_patterns.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/02_service_architecture.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/03_data_fetching_strategies.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/04_caching_strategies.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/05_error_handling.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/06_performance_optimization.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/07_security_best_practices.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/01_system_architecture.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/02_config_driven_models.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/03_persistence_layer.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/04_vector_integration.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/05_multi_app_support.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/01_getting_started.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/02_creating_models.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/03_using_services.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/04_financial_data_fetching.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/05_encryption_and_security.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/06_vector_search.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/07_gdpr_compliance.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/08_testing_guide.md +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/modules/__init__.py +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/modules/config/custom_analysis.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/modules/config/investing_operations_config.yaml +0 -0
- {timber_common-0.2.2 → timber_common-0.2.3}/modules/investing_operations.py +0 -0
|
@@ -45,7 +45,7 @@ def _patch_oauth2_client_methods():
|
|
|
45
45
|
|
|
46
46
|
# Check if method already exists
|
|
47
47
|
if hasattr(OAuth2Client, 'check_endpoint_auth_method'):
|
|
48
|
-
logger.
|
|
48
|
+
logger.info("OAuth2Client already has check_endpoint_auth_method")
|
|
49
49
|
return
|
|
50
50
|
|
|
51
51
|
import secrets
|
|
@@ -65,12 +65,12 @@ def _patch_oauth2_client_methods():
|
|
|
65
65
|
# If client has a configured method, use it strictly
|
|
66
66
|
if hasattr(self, 'token_endpoint_auth_method') and self.token_endpoint_auth_method:
|
|
67
67
|
result = method == self.token_endpoint_auth_method
|
|
68
|
-
logger.
|
|
68
|
+
logger.info(f"Client {self.client_id}: checking {method} against configured {self.token_endpoint_auth_method} = {result}")
|
|
69
69
|
return result
|
|
70
70
|
|
|
71
71
|
# Otherwise allow common methods
|
|
72
72
|
result = method in ['client_secret_post', 'client_secret_basic', 'none']
|
|
73
|
-
logger.
|
|
73
|
+
logger.info(f"Client {self.client_id}: {method} allowed by default = {result}")
|
|
74
74
|
return result
|
|
75
75
|
|
|
76
76
|
return False
|
|
@@ -352,7 +352,7 @@ class ModularAuthorizationServer(AuthorizationServer):
|
|
|
352
352
|
client = session.query(OAuth2Client).filter_by(client_id=client_id).first()
|
|
353
353
|
if client:
|
|
354
354
|
session.expunge(client)
|
|
355
|
-
logger.
|
|
355
|
+
logger.info(f"Found client: {client_id}")
|
|
356
356
|
else:
|
|
357
357
|
logger.warning(f"Client not found: {client_id}")
|
|
358
358
|
return client
|
|
@@ -579,35 +579,35 @@ class MyPasswordGrant(grants.ResourceOwnerPasswordCredentialsGrant):
|
|
|
579
579
|
try:
|
|
580
580
|
with db_service.session_scope() as session:
|
|
581
581
|
# Find user by email
|
|
582
|
-
logger.
|
|
582
|
+
logger.info(f"Querying for user with email: {username}")
|
|
583
583
|
user = session.query(User).filter_by(email=username).first()
|
|
584
584
|
|
|
585
585
|
if not user:
|
|
586
586
|
logger.warning(f"Password grant: User not found: {username}")
|
|
587
587
|
# List available users for debugging
|
|
588
588
|
all_users = session.query(User).all()
|
|
589
|
-
logger.
|
|
589
|
+
logger.info(f"Available users in database: {[u.email for u in all_users[:5]]}")
|
|
590
590
|
return None
|
|
591
591
|
|
|
592
|
-
logger.
|
|
592
|
+
logger.info(f"User found: {user.email}, ID: {user.id}")
|
|
593
593
|
|
|
594
594
|
# Check if user is active
|
|
595
595
|
is_active = getattr(user, 'is_active', True)
|
|
596
|
-
logger.
|
|
596
|
+
logger.info(f"User is_active: {is_active}")
|
|
597
597
|
|
|
598
598
|
if not is_active:
|
|
599
599
|
logger.warning(f"Password grant: User not active: {username}")
|
|
600
600
|
return None
|
|
601
601
|
|
|
602
602
|
# Verify password
|
|
603
|
-
logger.
|
|
603
|
+
logger.info(f"Checking password for user: {username}")
|
|
604
604
|
|
|
605
605
|
if not hasattr(user, 'check_password'):
|
|
606
606
|
logger.error(f"User model has no check_password method!")
|
|
607
607
|
return None
|
|
608
608
|
|
|
609
609
|
password_valid = user.check_password(password)
|
|
610
|
-
logger.
|
|
610
|
+
logger.info(f"Password validation result: {password_valid}")
|
|
611
611
|
|
|
612
612
|
if not password_valid:
|
|
613
613
|
logger.warning(f"Password grant: Invalid password for user: {username}")
|
|
@@ -615,7 +615,7 @@ class MyPasswordGrant(grants.ResourceOwnerPasswordCredentialsGrant):
|
|
|
615
615
|
|
|
616
616
|
# Update last login
|
|
617
617
|
if hasattr(user, 'update_last_login'):
|
|
618
|
-
logger.
|
|
618
|
+
logger.info(f"Updating last login for user: {username}")
|
|
619
619
|
user.update_last_login()
|
|
620
620
|
session.flush()
|
|
621
621
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "timber-common"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.3"
|
|
4
4
|
description = "Configuration-driven persistence library with automatic encryption, caching, vector search, and GDPR compliance for Python applications"
|
|
5
5
|
authors = ["Pumulo Sikaneta <pumulo@gmail.com>"]
|
|
6
6
|
maintainers = ["Pumulo Sikaneta <pumulo@gmail.com>"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/portfolio_metrics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/standardization.py
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/technical_indicators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/available_capabilities.py
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/cached_capabilities.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/01_model_design_patterns.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/02_service_architecture.md
RENAMED
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/04_caching_strategies.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/05_error_handling.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/01_system_architecture.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/02_config_driven_models.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/03_persistence_layer.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/04_vector_integration.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/05_multi_app_support.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/04_financial_data_fetching.md
RENAMED
|
File without changes
|
{timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/05_encryption_and_security.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|