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.
Files changed (101) hide show
  1. {timber_common-0.2.2 → timber_common-0.2.3}/PKG-INFO +1 -1
  2. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/security/oauth_service.py +11 -11
  3. {timber_common-0.2.2 → timber_common-0.2.3}/pyproject.toml +1 -1
  4. {timber_common-0.2.2 → timber_common-0.2.3}/CHANGELOG.md +0 -0
  5. {timber_common-0.2.2 → timber_common-0.2.3}/LICENSE +0 -0
  6. {timber_common-0.2.2 → timber_common-0.2.3}/README.md +0 -0
  7. {timber_common-0.2.2 → timber_common-0.2.3}/common/__init__.py +0 -0
  8. {timber_common-0.2.2 → timber_common-0.2.3}/common/config/__init__.py +0 -0
  9. {timber_common-0.2.2 → timber_common-0.2.3}/common/config/model_loader.py +0 -0
  10. {timber_common-0.2.2 → timber_common-0.2.3}/common/engine/__init__.py +0 -0
  11. {timber_common-0.2.2 → timber_common-0.2.3}/common/engine/config_executor.py +0 -0
  12. {timber_common-0.2.2 → timber_common-0.2.3}/common/engine/operation_registry.py +0 -0
  13. {timber_common-0.2.2 → timber_common-0.2.3}/common/init.py +0 -0
  14. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/__init__.py +0 -0
  15. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/base.py +0 -0
  16. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/configs/__init__.py +0 -0
  17. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/core/__init.__.py +0 -0
  18. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/core/tag.py +0 -0
  19. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/core/user.py +0 -0
  20. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/factory.py +0 -0
  21. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/mixins.py +0 -0
  22. {timber_common-0.2.2 → timber_common-0.2.3}/common/models/registry.py +0 -0
  23. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/__init__.py +0 -0
  24. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/__init__.py +0 -0
  25. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/alphavantage.py +0 -0
  26. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/base.py +0 -0
  27. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/curated_data.py +0 -0
  28. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/polygon.py +0 -0
  29. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/stock.py +0 -0
  30. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_fetcher/yfinance.py +0 -0
  31. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/__init__.py +0 -0
  32. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/portfolio_metrics.py +0 -0
  33. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/returns.py +0 -0
  34. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/risk_metrics.py +0 -0
  35. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/standardization.py +0 -0
  36. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/data_processor/technical_indicators.py +0 -0
  37. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/db_service.py +0 -0
  38. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/encryption/__init__.py +0 -0
  39. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/encryption/field_encryption.py +0 -0
  40. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/gdpr/__init__.py +0 -0
  41. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/gdpr/deletion.py +0 -0
  42. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/__init__.py +0 -0
  43. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/available_capabilities.py +0 -0
  44. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/cached_capabilities.py +0 -0
  45. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/inventory/loader.py +0 -0
  46. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/__init__.py +0 -0
  47. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/base.py +0 -0
  48. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/cache.py +0 -0
  49. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/instances.py +0 -0
  50. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/manager.py +0 -0
  51. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/notification.py +0 -0
  52. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/research.py +0 -0
  53. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/session.py +0 -0
  54. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/persistence/tracker.py +0 -0
  55. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/security/__init__.py +0 -0
  56. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/vector/__init__.py +0 -0
  57. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/vector/auto_ingestion.py +0 -0
  58. {timber_common-0.2.2 → timber_common-0.2.3}/common/services/vector/tag_embedding.py +0 -0
  59. {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/__init__.py +0 -0
  60. {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/config.py +0 -0
  61. {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/db_utils.py +0 -0
  62. {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/helpers.py +0 -0
  63. {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/time_helpers.py +0 -0
  64. {timber_common-0.2.2 → timber_common-0.2.3}/common/utils/validators.py +0 -0
  65. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/00_association_tables.yaml +0 -0
  66. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/cache_models.yaml +0 -0
  67. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/narrative_models.yaml +0 -0
  68. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/notification_models.yaml +0 -0
  69. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/oauth_models.yaml +0 -0
  70. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/portfolio_models.yaml +0 -0
  71. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/stock_research_models.yaml +0 -0
  72. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/user_preferences_models.yaml +0 -0
  73. {timber_common-0.2.2 → timber_common-0.2.3}/data/models/vector_db_models.yaml +0 -0
  74. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/DOCUMENTATION_INDEX.md +0 -0
  75. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/DOCUMENTATION_SUMMARY.md +0 -0
  76. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/PROGRESS_UPDATE.md +0 -0
  77. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/TIMBER_SESSION_API_REFERENCE.md +0 -0
  78. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/01_model_design_patterns.md +0 -0
  79. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/02_service_architecture.md +0 -0
  80. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/03_data_fetching_strategies.md +0 -0
  81. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/04_caching_strategies.md +0 -0
  82. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/05_error_handling.md +0 -0
  83. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/06_performance_optimization.md +0 -0
  84. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/best_practices/07_security_best_practices.md +0 -0
  85. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/01_system_architecture.md +0 -0
  86. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/02_config_driven_models.md +0 -0
  87. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/03_persistence_layer.md +0 -0
  88. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/04_vector_integration.md +0 -0
  89. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/design_guides/05_multi_app_support.md +0 -0
  90. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/01_getting_started.md +0 -0
  91. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/02_creating_models.md +0 -0
  92. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/03_using_services.md +0 -0
  93. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/04_financial_data_fetching.md +0 -0
  94. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/05_encryption_and_security.md +0 -0
  95. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/06_vector_search.md +0 -0
  96. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/07_gdpr_compliance.md +0 -0
  97. {timber_common-0.2.2 → timber_common-0.2.3}/documentation/how_to/08_testing_guide.md +0 -0
  98. {timber_common-0.2.2 → timber_common-0.2.3}/modules/__init__.py +0 -0
  99. {timber_common-0.2.2 → timber_common-0.2.3}/modules/config/custom_analysis.yaml +0 -0
  100. {timber_common-0.2.2 → timber_common-0.2.3}/modules/config/investing_operations_config.yaml +0 -0
  101. {timber_common-0.2.2 → timber_common-0.2.3}/modules/investing_operations.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: timber-common
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Configuration-driven persistence library with automatic encryption, caching, vector search, and GDPR compliance for Python applications
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -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.debug("OAuth2Client already has check_endpoint_auth_method")
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.debug(f"Client {self.client_id}: checking {method} against configured {self.token_endpoint_auth_method} = {result}")
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.debug(f"Client {self.client_id}: {method} allowed by default = {result}")
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.debug(f"Found client: {client_id}")
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.debug(f"Querying for user with email: {username}")
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.debug(f"Available users in database: {[u.email for u in all_users[:5]]}")
589
+ logger.info(f"Available users in database: {[u.email for u in all_users[:5]]}")
590
590
  return None
591
591
 
592
- logger.debug(f"User found: {user.email}, ID: {user.id}")
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.debug(f"User is_active: {is_active}")
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.debug(f"Checking password for user: {username}")
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.debug(f"Password validation result: {password_valid}")
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.debug(f"Updating last login for user: {username}")
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.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