vega-framework 0.1.25__tar.gz → 0.1.27__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 (78) hide show
  1. {vega_framework-0.1.25 → vega_framework-0.1.27}/PKG-INFO +1 -1
  2. {vega_framework-0.1.25 → vega_framework-0.1.27}/pyproject.toml +1 -1
  3. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/add.py +33 -14
  4. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/generate.py +1 -29
  5. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/utils/__init__.py +5 -1
  6. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/utils/naming.py +20 -0
  7. {vega_framework-0.1.25 → vega_framework-0.1.27}/LICENSE +0 -0
  8. {vega_framework-0.1.25 → vega_framework-0.1.27}/README.md +0 -0
  9. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/__init__.py +0 -0
  10. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/__init__.py +0 -0
  11. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/__init__.py +0 -0
  12. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/init.py +0 -0
  13. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/migrate.py +0 -0
  14. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/update.py +0 -0
  15. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/commands/web.py +0 -0
  16. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/main.py +0 -0
  17. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/scaffolds/__init__.py +0 -0
  18. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/scaffolds/fastapi.py +0 -0
  19. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/scaffolds/sqlalchemy.py +0 -0
  20. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/__init__.py +0 -0
  21. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/cli/command.py.j2 +0 -0
  22. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/cli/command_simple.py.j2 +0 -0
  23. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/cli/commands_init.py.j2 +0 -0
  24. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/components.py +0 -0
  25. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/domain/entity.py.j2 +0 -0
  26. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/domain/interactor.py.j2 +0 -0
  27. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/domain/mediator.py.j2 +0 -0
  28. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/domain/repository_interface.py.j2 +0 -0
  29. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/domain/service_interface.py.j2 +0 -0
  30. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/infrastructure/model.py.j2 +0 -0
  31. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/infrastructure/repository_impl.py.j2 +0 -0
  32. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/infrastructure/service_impl.py.j2 +0 -0
  33. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/loader.py +0 -0
  34. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/.env.example +0 -0
  35. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/.gitignore +0 -0
  36. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/ARCHITECTURE.md.j2 +0 -0
  37. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/README.md.j2 +0 -0
  38. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/config.py.j2 +0 -0
  39. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/main.py.j2 +0 -0
  40. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/main_fastapi.py.j2 +0 -0
  41. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/main_standard.py.j2 +0 -0
  42. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/pyproject.toml.j2 +0 -0
  43. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/project/settings.py.j2 +0 -0
  44. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/sqlalchemy/alembic.ini.j2 +0 -0
  45. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/sqlalchemy/database_manager.py.j2 +0 -0
  46. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/sqlalchemy/env.py.j2 +0 -0
  47. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/sqlalchemy/script.py.mako +0 -0
  48. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/__init__.py.j2 +0 -0
  49. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/app.py.j2 +0 -0
  50. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/health_route.py.j2 +0 -0
  51. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/main.py.j2 +0 -0
  52. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/middleware.py.j2 +0 -0
  53. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/models_init.py.j2 +0 -0
  54. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/request_model.py.j2 +0 -0
  55. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/response_model.py.j2 +0 -0
  56. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/router.py.j2 +0 -0
  57. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/routes_init.py.j2 +0 -0
  58. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/routes_init_autodiscovery.py.j2 +0 -0
  59. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/user_models.py.j2 +0 -0
  60. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/templates/web/users_route.py.j2 +0 -0
  61. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/utils/async_support.py +0 -0
  62. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/utils/messages.py +0 -0
  63. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/cli/utils/validators.py +0 -0
  64. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/di/__init__.py +0 -0
  65. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/di/container.py +0 -0
  66. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/di/decorators.py +0 -0
  67. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/di/errors.py +0 -0
  68. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/di/scope.py +0 -0
  69. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/discovery/__init__.py +0 -0
  70. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/discovery/commands.py +0 -0
  71. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/discovery/routes.py +0 -0
  72. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/patterns/__init__.py +0 -0
  73. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/patterns/interactor.py +0 -0
  74. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/patterns/mediator.py +0 -0
  75. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/patterns/repository.py +0 -0
  76. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/patterns/service.py +0 -0
  77. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/settings/__init__.py +0 -0
  78. {vega_framework-0.1.25 → vega_framework-0.1.27}/vega/settings/base.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vega-framework
3
- Version: 0.1.25
3
+ Version: 0.1.27
4
4
  Summary: Enterprise-ready Python framework that enforces Clean Architecture for building maintainable and scalable applications.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "vega-framework"
3
- version = "0.1.25"
3
+ version = "0.1.27"
4
4
  description = "Enterprise-ready Python framework that enforces Clean Architecture for building maintainable and scalable applications."
5
5
  authors = ["Roberto Ferro"]
6
6
  license = "MIT"
@@ -113,28 +113,47 @@ def add_sqlalchemy_feature(project_path: Path, project_name: str):
113
113
 
114
114
  def _create_user_example_repository(project_path: Path, project_name: str):
115
115
  """Create example User entity, repository, and SQLAlchemy implementation"""
116
- from vega.cli.commands.generate import generate_component
116
+ from vega.cli.commands.generate import _generate_entity, _generate_repository, _generate_sqlalchemy_model, _generate_infrastructure_repository
117
+ import sys
118
+ from io import StringIO
117
119
 
118
120
  # Generate User entity
119
- click.echo(" + Generating User entity...")
120
- generate_component('entity', 'User', str(project_path))
121
+ click.echo(" + Creating User entity...")
122
+ _generate_entity(project_path, project_name, 'User', 'user')
121
123
 
122
- # Generate UserRepository interface
123
- click.echo(" + Generating UserRepository interface...")
124
- generate_component('repository', 'UserRepository', str(project_path))
124
+ # Generate UserRepository interface (without next steps)
125
+ click.echo(" + Creating UserRepository interface...")
126
+ original_stdout = sys.stdout
127
+ sys.stdout = StringIO() # Suppress "Next steps" output
128
+
129
+ try:
130
+ _generate_repository(project_path, project_name, 'UserRepository', 'user_repository', implementation=None)
131
+ finally:
132
+ sys.stdout = original_stdout
125
133
 
126
134
  # Generate SQLAlchemy UserModel
127
- click.echo(" + Generating UserModel (SQLAlchemy)...")
128
- generate_component('model', 'User', str(project_path))
135
+ click.echo(" + Creating UserModel (SQLAlchemy)...")
136
+ sys.stdout = StringIO() # Suppress verbose output
137
+ try:
138
+ _generate_sqlalchemy_model(project_path, project_name, 'User', 'user')
139
+ finally:
140
+ sys.stdout = original_stdout
129
141
 
130
142
  # Generate SQLAlchemy repository implementation
131
- click.echo(" + Generating SQLAlchemyUserRepository implementation...")
132
- generate_component('repository', 'UserRepository', str(project_path), implementation='sql')
133
-
134
- click.echo(click.style("\n ✓ Example User repository created!", fg='green'))
143
+ click.echo(" + Creating SQLAlchemyUserRepository implementation...")
144
+ _generate_infrastructure_repository(
145
+ project_path,
146
+ 'UserRepository',
147
+ 'user_repository',
148
+ 'User',
149
+ 'user',
150
+ 'sql'
151
+ )
152
+
153
+ click.echo(click.style("\n [OK] Example User repository created!", fg='green'))
135
154
  click.echo("\nGenerated files:")
136
155
  click.echo(" - domain/entities/user.py")
137
156
  click.echo(" - domain/repositories/user_repository.py")
138
- click.echo(" - infrastructure/models/user_model.py")
157
+ click.echo(" - infrastructure/models/user.py")
139
158
  click.echo(" - infrastructure/repositories/sqlalchemy_user_repository.py")
140
- click.echo("\nDon't forget to update config.py to register SQLAlchemyUserRepository!")
159
+ click.echo("\nNext step: Update config.py to register SQLAlchemyUserRepository in SERVICES dict")
@@ -1,6 +1,5 @@
1
1
  """Generate command - Create components in Vega project"""
2
2
  import click
3
- import re
4
3
  from pathlib import Path
5
4
 
6
5
  from vega.cli.templates import (
@@ -19,34 +18,7 @@ from vega.cli.templates import (
19
18
  render_template,
20
19
  )
21
20
  from vega.cli.scaffolds import create_fastapi_scaffold
22
-
23
-
24
-
25
- def to_snake_case(name: str) -> str:
26
- """Convert CamelCase to snake_case"""
27
- name = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
28
- return re.sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower()
29
-
30
-
31
- def to_pascal_case(name: str) -> str:
32
- """Convert strings to PascalCase, handling separators and camelCase input"""
33
- cleaned = name.strip()
34
- if not cleaned:
35
- return ""
36
-
37
- # Normalize common separators to spaces
38
- normalized = cleaned.replace('-', ' ').replace('_', ' ')
39
- if ' ' in normalized:
40
- parts = normalized.split()
41
- else:
42
- parts = re.findall(r'[A-Z]+(?=$|[A-Z][a-z0-9])|[A-Z]?[a-z0-9]+|[0-9]+', cleaned)
43
- if not parts:
44
- parts = [cleaned]
45
-
46
- def _pascal_piece(piece: str) -> str:
47
- return piece if piece.isupper() else piece[:1].upper() + piece[1:].lower()
48
-
49
- return ''.join(_pascal_piece(part) for part in parts if part)
21
+ from vega.cli.utils import to_snake_case, to_pascal_case
50
22
 
51
23
 
52
24
  def _resolve_implementation_names(class_name: str, implementation: str) -> tuple[str, str]:
@@ -1,11 +1,15 @@
1
1
  """Utility modules for Vega CLI"""
2
- from .naming import NamingConverter
2
+ from .naming import NamingConverter, to_snake_case, to_pascal_case, to_camel_case, to_kebab_case
3
3
  from .messages import CLIMessages
4
4
  from .validators import validate_project_name, validate_path_exists
5
5
  from .async_support import async_command, coro
6
6
 
7
7
  __all__ = [
8
8
  "NamingConverter",
9
+ "to_snake_case",
10
+ "to_pascal_case",
11
+ "to_camel_case",
12
+ "to_kebab_case",
9
13
  "CLIMessages",
10
14
  "validate_project_name",
11
15
  "validate_path_exists",
@@ -2,6 +2,26 @@
2
2
  import re
3
3
 
4
4
 
5
+ def to_snake_case(name: str) -> str:
6
+ """Convert CamelCase/PascalCase to snake_case (standalone function for convenience)"""
7
+ return NamingConverter.to_snake_case(name)
8
+
9
+
10
+ def to_pascal_case(name: str) -> str:
11
+ """Convert any format to PascalCase (standalone function for convenience)"""
12
+ return NamingConverter.to_pascal_case(name)
13
+
14
+
15
+ def to_camel_case(name: str) -> str:
16
+ """Convert any format to camelCase (standalone function for convenience)"""
17
+ return NamingConverter.to_camel_case(name)
18
+
19
+
20
+ def to_kebab_case(name: str) -> str:
21
+ """Convert any format to kebab-case (standalone function for convenience)"""
22
+ return NamingConverter.to_kebab_case(name)
23
+
24
+
5
25
  class NamingConverter:
6
26
  """Utility class for converting between naming conventions"""
7
27
 
File without changes