splent-framework 1.2.7__tar.gz → 1.2.8__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 (82) hide show
  1. {splent_framework-1.2.7/src/splent_framework.egg-info → splent_framework-1.2.8}/PKG-INFO +1 -1
  2. {splent_framework-1.2.7 → splent_framework-1.2.8}/pyproject.toml +1 -1
  3. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/feature_loader.py +17 -10
  4. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/namespace_manager.py +19 -11
  5. {splent_framework-1.2.7 → splent_framework-1.2.8/src/splent_framework.egg-info}/PKG-INFO +1 -1
  6. {splent_framework-1.2.7 → splent_framework-1.2.8}/LICENSE +0 -0
  7. {splent_framework-1.2.7 → splent_framework-1.2.8}/README.md +0 -0
  8. {splent_framework-1.2.7 → splent_framework-1.2.8}/setup.cfg +0 -0
  9. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/_init__.py +0 -0
  10. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/blueprints/__init__.py +0 -0
  11. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/blueprints/base_blueprint.py +0 -0
  12. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/bootstraps/__init__.py +0 -0
  13. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/bootstraps/locustfile_bootstrap.py +0 -0
  14. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/configuration/__init__.py +0 -0
  15. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/configuration/configuration.py +0 -0
  16. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/configuration/default_config.py +0 -0
  17. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/context/__init__.py +0 -0
  18. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/context/context_manager.py +0 -0
  19. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/db.py +0 -0
  20. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/decorators/__init__.py +0 -0
  21. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/decorators/decorators.py +0 -0
  22. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/environment/__init__.py +0 -0
  23. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/environment/host.py +0 -0
  24. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/fixtures/__init__.py +0 -0
  25. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/fixtures/fixtures.py +0 -0
  26. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/helpers/__init__.py +0 -0
  27. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/helpers/test_helpers_auth.py +0 -0
  28. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/helpers/test_helpers_db.py +0 -0
  29. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/hooks/__init__.py +0 -0
  30. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/hooks/template_hooks.py +0 -0
  31. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/locust/__init__.py +0 -0
  32. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/locust/common.py +0 -0
  33. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/__init__.py +0 -0
  34. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/config_manager.py +0 -0
  35. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/db_manager.py +0 -0
  36. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/error_handler_manager.py +0 -0
  37. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/feature_manager.py +0 -0
  38. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/feature_order.py +0 -0
  39. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/jinja_manager.py +0 -0
  40. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/logging_manager.py +0 -0
  41. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/migration_manager.py +0 -0
  42. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/session_manager.py +0 -0
  43. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/managers/task_queue_manager.py +0 -0
  44. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/migrations/__init__.py +0 -0
  45. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/migrations/feature_env.py +0 -0
  46. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/namespaces/__init__.py +0 -0
  47. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/repositories/BaseRepository.py +0 -0
  48. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/repositories/__init__.py +0 -0
  49. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/resources/__init__.py +0 -0
  50. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/resources/generic_resource.py +0 -0
  51. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/seeders/BaseSeeder.py +0 -0
  52. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/seeders/__init__.py +0 -0
  53. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/selenium/__init__.py +0 -0
  54. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/selenium/common.py +0 -0
  55. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/serialisers/__init__.py +0 -0
  56. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/serialisers/serializer.py +0 -0
  57. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/services/BaseService.py +0 -0
  58. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/services/__init__.py +0 -0
  59. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/utils/__init__.py +0 -0
  60. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/utils/app_loader.py +0 -0
  61. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/utils/feature_utils.py +0 -0
  62. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/utils/path_utils.py +0 -0
  63. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework/utils/pyproject_reader.py +0 -0
  64. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework.egg-info/SOURCES.txt +0 -0
  65. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework.egg-info/dependency_links.txt +0 -0
  66. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework.egg-info/requires.txt +0 -0
  67. {splent_framework-1.2.7 → splent_framework-1.2.8}/src/splent_framework.egg-info/top_level.txt +0 -0
  68. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_base_blueprint_security.py +0 -0
  69. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_base_repository.py +0 -0
  70. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_config_manager.py +0 -0
  71. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_config_manager_return.py +0 -0
  72. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_context_manager.py +0 -0
  73. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_default_config.py +0 -0
  74. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_error_handler_manager.py +0 -0
  75. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_feature_manager_parse.py +0 -0
  76. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_feature_order.py +0 -0
  77. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_feature_utils.py +0 -0
  78. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_generic_resource.py +0 -0
  79. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_migration_manager.py +0 -0
  80. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_namespace_manager.py +0 -0
  81. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_pyproject_reader.py +0 -0
  82. {splent_framework-1.2.7 → splent_framework-1.2.8}/tests/test_pyproject_reader_env.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splent_framework
3
- Version: 1.2.7
3
+ Version: 1.2.8
4
4
  Summary: SPLENT-FRAMEWORK is a set of libraries for agile product development within SPLENT.
5
5
  Author-email: DiversoLab <diversolab@us.es>
6
6
  Project-URL: Homepage, https://github.com/diverso-lab/splent_framework
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "splent_framework"
7
- version = "1.2.7"
7
+ version = "1.2.8"
8
8
  description = "SPLENT-FRAMEWORK is a set of libraries for agile product development within SPLENT."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -356,17 +356,24 @@ class FeatureLoader:
356
356
  def load(self, ref: FeatureRef) -> None:
357
357
  """Fully load and integrate one feature.
358
358
 
359
- Steps:
360
- 1. Resolve the feature directory (symlink realpath)
361
- 2. Validate the expected internal structure
362
- 3. Add src/ to sys.path
363
- 4. Import the root package and conventional submodules
364
- 5. Run Flask integration hooks via FeatureIntegrator
365
- """
366
- feature_dir = self._resolver.resolve(self._features_dir, ref)
367
- src_root, _, _ = self._validator.validate(feature_dir, ref)
359
+ In development, features live on disk (symlinks → cache or workspace
360
+ root) so we resolve, validate, and add src/ to sys.path.
368
361
 
369
- self._importer.add_to_syspath(src_root)
362
+ In production, features are pip-installed from PyPI — there are no
363
+ symlinks. When the resolver cannot find a directory we fall back to
364
+ a direct import, which works because pip already placed the package
365
+ in site-packages.
366
+ """
367
+ try:
368
+ feature_dir = self._resolver.resolve(self._features_dir, ref)
369
+ src_root, _, _ = self._validator.validate(feature_dir, ref)
370
+ self._importer.add_to_syspath(src_root)
371
+ except FeatureError:
372
+ # No local directory found — the feature must be pip-installed.
373
+ logger.debug(
374
+ "No local directory for %s — assuming pip-installed package.",
375
+ ref.import_name(),
376
+ )
370
377
 
371
378
  import_name = ref.import_name()
372
379
  module = self._importer.import_package(import_name)
@@ -14,23 +14,31 @@ logger = logging.getLogger(__name__)
14
14
  class NamespaceManager:
15
15
  @staticmethod
16
16
  def init_app(app=None):
17
- """Register namespace packages for all organizations under .splent_cache/features
18
- and for editable features at the workspace root."""
17
+ """Register namespace packages for all organizations.
18
+
19
+ In development: scans .splent_cache/features and workspace root.
20
+ In production: features are pip-installed, so we just ensure
21
+ the namespace packages are importable.
22
+ """
19
23
  working_dir = PathUtils.get_working_dir()
20
24
  base_cache_dir = os.path.join(working_dir, ".splent_cache", "features")
21
25
 
22
- if not os.path.exists(base_cache_dir):
23
- logger.warning("No feature cache found at %s", base_cache_dir)
24
- return
26
+ orgs: list[str] = []
27
+
28
+ if os.path.exists(base_cache_dir):
29
+ # Development: resolve from cache + workspace root
30
+ orgs = NamespaceManager._detect_orgs(base_cache_dir)
31
+ if orgs:
32
+ NamespaceManager._ensure_init_files(orgs, base_cache_dir)
33
+ NamespaceManager._add_to_syspath(base_cache_dir)
34
+ NamespaceManager._add_workspace_root_features(working_dir)
25
35
 
26
- orgs = NamespaceManager._detect_orgs(base_cache_dir)
36
+ # Always try to import known namespace packages.
37
+ # In production, pip-installed features make splent_io available
38
+ # without any cache or workspace root directories.
27
39
  if not orgs:
28
- logger.warning("No org namespaces found under .splent_cache/features/")
29
- return
40
+ orgs = ["splent_io"]
30
41
 
31
- NamespaceManager._ensure_init_files(orgs, base_cache_dir)
32
- NamespaceManager._add_to_syspath(base_cache_dir)
33
- NamespaceManager._add_workspace_root_features(working_dir)
34
42
  NamespaceManager._import_namespaces(orgs)
35
43
 
36
44
  # ------------------------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splent_framework
3
- Version: 1.2.7
3
+ Version: 1.2.8
4
4
  Summary: SPLENT-FRAMEWORK is a set of libraries for agile product development within SPLENT.
5
5
  Author-email: DiversoLab <diversolab@us.es>
6
6
  Project-URL: Homepage, https://github.com/diverso-lab/splent_framework