instant-python 0.1.1__py3-none-any.whl → 0.2.0__py3-none-any.whl

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 (24) hide show
  1. instant_python/installer/pdm_manager.py +10 -3
  2. instant_python/installer/uv_manager.py +11 -0
  3. instant_python/question_prompter/question/conditional_question.py +9 -3
  4. instant_python/question_prompter/step/template_step.py +21 -13
  5. instant_python/question_prompter/user_requirements.py +1 -0
  6. instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py +3 -3
  7. instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py +19 -0
  8. instant_python/templates/boilerplate/event_bus/event_bus.py +1 -1
  9. instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py +1 -1
  10. instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py +17 -0
  11. instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py +1 -1
  12. instant_python/templates/boilerplate/value_object/int_value_object.py +1 -1
  13. instant_python/templates/boilerplate/value_object/string_value_object.py +1 -1
  14. instant_python/templates/boilerplate/value_object/uuid.py +1 -1
  15. instant_python/templates/project_structure/clean_architecture/source.yml.j2 +2 -2
  16. instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +5 -3
  17. instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +2 -0
  18. instant_python/templates/project_structure/event_bus_domain.yml.j2 +3 -0
  19. instant_python/templates/project_structure/standard_project/source.yml.j2 +2 -2
  20. {instant_python-0.1.1.dist-info → instant_python-0.2.0.dist-info}/METADATA +1 -1
  21. {instant_python-0.1.1.dist-info → instant_python-0.2.0.dist-info}/RECORD +24 -23
  22. {instant_python-0.1.1.dist-info → instant_python-0.2.0.dist-info}/WHEEL +0 -0
  23. {instant_python-0.1.1.dist-info → instant_python-0.2.0.dist-info}/entry_points.txt +0 -0
  24. {instant_python-0.1.1.dist-info → instant_python-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -31,6 +31,7 @@ class PdmManager(DependencyManager):
31
31
  print(f">>> Python {version} installed successfully")
32
32
 
33
33
  def install_dependencies(self, dependencies: list[str]) -> None:
34
+ self._create_virtual_environment()
34
35
  for dependency_name in dependencies:
35
36
  self._install_dependency(dependency_name)
36
37
 
@@ -67,6 +68,12 @@ class PdmManager(DependencyManager):
67
68
  group_flag += f"--group {group_name}"
68
69
  return f"{dev_flag} {group_flag}"
69
70
 
70
-
71
-
72
-
71
+ def _create_virtual_environment(self) -> None:
72
+ command = f"{self._pdm} install"
73
+ subprocess.run(
74
+ command,
75
+ shell=True,
76
+ check=True,
77
+ cwd=self._project_directory,
78
+ stdout=subprocess.DEVNULL,
79
+ )
@@ -33,6 +33,7 @@ class UvManager(DependencyManager):
33
33
  print(f">>> Python {version} installed successfully")
34
34
 
35
35
  def install_dependencies(self, dependencies: list[str]) -> None:
36
+ self._create_virtual_environment()
36
37
  for dependency_name in dependencies:
37
38
  self._install_dependency(dependency_name)
38
39
 
@@ -71,3 +72,13 @@ class UvManager(DependencyManager):
71
72
  ).ask()["group_name"]
72
73
  flag = f"--group {group_name}"
73
74
  return flag
75
+
76
+ def _create_virtual_environment(self) -> None:
77
+ command = f"{self._uv} sync"
78
+ subprocess.run(
79
+ command,
80
+ shell=True,
81
+ check=True,
82
+ cwd=self._project_directory,
83
+ stdout=subprocess.DEVNULL,
84
+ )
@@ -1,9 +1,11 @@
1
+ from typing import Union
2
+
1
3
  from instant_python.question_prompter.question.question import Question
2
4
 
3
5
 
4
6
  class ConditionalQuestion:
5
7
  def __init__(
6
- self, base_question: Question, subquestions: list[Question], condition: str | bool
8
+ self, base_question: Question, subquestions: Union[list[Question], "ConditionalQuestion"], condition: str | bool
7
9
  ) -> None:
8
10
  self._base_question = base_question
9
11
  self._subquestions = subquestions
@@ -16,8 +18,12 @@ class ConditionalQuestion:
16
18
  return base_answer
17
19
 
18
20
  answers = base_answer
19
- for question in self._subquestions:
20
- answers.update(question.ask())
21
+
22
+ if isinstance(self._subquestions, ConditionalQuestion):
23
+ answers.update(self._subquestions.ask())
24
+ else:
25
+ for question in self._subquestions:
26
+ answers.update(question.ask())
21
27
  return answers
22
28
 
23
29
  def _base_answer_does_not_satisfies_condition(self, base_answer: dict[str, str]) -> bool:
@@ -1,3 +1,4 @@
1
+ from instant_python.question_prompter.question.boolean_question import BooleanQuestion
1
2
  from instant_python.question_prompter.question.choice_question import ChoiceQuestion
2
3
  from instant_python.question_prompter.question.conditional_question import (
3
4
  ConditionalQuestion,
@@ -17,12 +18,11 @@ class TemplateStep(Step):
17
18
  self._questions = [
18
19
  MultipleChoiceQuestion(
19
20
  key="built_in_features",
20
- message="Select the built-in features you want to include (fastapi_application option requires logger)",
21
+ message="Select the built-in features you want to include",
21
22
  options=[
22
23
  "value_objects",
23
24
  "github_actions",
24
25
  "makefile",
25
- "synchronous_sqlalchemy",
26
26
  "logger",
27
27
  "event_bus",
28
28
  "async_sqlalchemy",
@@ -40,18 +40,26 @@ class TemplateStep(Step):
40
40
  "standard_project",
41
41
  ],
42
42
  ),
43
- subquestions=[
44
- FreeTextQuestion(
45
- key="bounded_context",
46
- message="Enter the bounded context name",
47
- default="backoffice",
43
+ subquestions=ConditionalQuestion(
44
+ base_question=BooleanQuestion(
45
+ key="specify_bounded_context",
46
+ message="Do you want to specify your first bounded context?",
47
+ default=True,
48
48
  ),
49
- FreeTextQuestion(
50
- key="aggregate_name",
51
- message="Enter the aggregate name",
52
- default="user",
53
- ),
54
- ],
49
+ subquestions=[
50
+ FreeTextQuestion(
51
+ key="bounded_context",
52
+ message="Enter the bounded context name",
53
+ default="backoffice",
54
+ ),
55
+ FreeTextQuestion(
56
+ key="aggregate_name",
57
+ message="Enter the aggregate name",
58
+ default="user",
59
+ ),
60
+ ],
61
+ condition=True,
62
+ ),
55
63
  condition=TemplateTypes.DDD,
56
64
  ),
57
65
  ]
@@ -20,6 +20,7 @@ class UserRequirements:
20
20
  git_email: str = field(default_factory=str)
21
21
  git_user_name: str = field(default_factory=str)
22
22
  dependencies: list[str] = field(default_factory=list)
23
+ specify_bounded_context: bool = field(default=False)
23
24
  bounded_context: str = field(default_factory=str)
24
25
  aggregate_name: str = field(default_factory=str)
25
26
  built_in_features: list[str] = field(default_factory=list)
@@ -5,8 +5,8 @@ from {{ source_name }}.{{ template_domain_import }}.event.domain_event import Do
5
5
  from {{ source_name }}.{{ template_domain_import }}.event.domain_event_subscriber import (
6
6
  DomainEventSubscriber,
7
7
  )
8
- from {{ source_name }}.{{ template_domain_import }}.exceptions.domain_event_type_not_found import (
9
- DomainEventTypeNotFound,
8
+ from {{ source_name }}.{{ template_domain_import }}.exceptions.domain_event_type_not_found_error import (
9
+ DomainEventTypeNotFoundError,
10
10
  )
11
11
 
12
12
 
@@ -23,6 +23,6 @@ class DomainEventJsonDeserializer:
23
23
  event_class = self._events_mapping.get(content["data"]["type"])
24
24
 
25
25
  if not event_class:
26
- raise DomainEventTypeNotFound(content["data"]["type"])
26
+ raise DomainEventTypeNotFoundError(content["data"]["type"])
27
27
 
28
28
  return event_class(**content["data"]["attributes"])
@@ -1,4 +1,5 @@
1
1
  {% set template_domain_import = "shared.domain"|compute_base_path(template) %}
2
+ {% if pythono_version in ["3.12", "3.13"] %}
2
3
  from abc import ABC, abstractmethod
3
4
 
4
5
  from {{ source_name }}.{{ template_domain_import }}.event.domain_event import DomainEvent
@@ -13,3 +14,21 @@ class DomainEventSubscriber[EventType: DomainEvent](ABC):
13
14
  @abstractmethod
14
15
  def on(self, event: EventType) -> None:
15
16
  raise NotImplementedError
17
+ {% else %}
18
+ from abc import ABC, abstractmethod
19
+ from typing import Generic, TypeVar
20
+
21
+ from {{ source_name }}.{{ template_domain_import }}.event.domain_event import DomainEvent
22
+
23
+ EventType = TypeVar("EventType", bound=DomainEvent)
24
+
25
+ class DomainEventSubscriber(Generic[EventType], ABC):
26
+ @staticmethod
27
+ @abstractmethod
28
+ def subscribed_to() -> list[type[EventType]]:
29
+ raise NotImplementedError
30
+
31
+ @abstractmethod
32
+ def on(self, event: EventType) -> None:
33
+ raise NotImplementedError
34
+ {% endif %}
@@ -6,5 +6,5 @@ from {{ source_name }}.{{ template_domain_import }}.event.domain_event import Do
6
6
 
7
7
  class EventBus(ABC):
8
8
  @abstractmethod
9
- def publish(self, events: list[DomainEvent]) -> None:
9
+ async def publish(self, events: list[DomainEvent]) -> None:
10
10
  raise NotImplementedError
@@ -2,7 +2,7 @@
2
2
  from {{ source_name }}.{{ template_domain_import }}.exceptions.domain_error import DomainError
3
3
 
4
4
 
5
- class DomainEventTypeNotFound(DomainError):
5
+ class DomainEventTypeNotFoundError(DomainError):
6
6
  def __init__(self, name: str) -> None:
7
7
  self._message = f"Event type {name} not found among subscriber."
8
8
  self._type = "domain_event_type_not_found"
@@ -0,0 +1,17 @@
1
+ {% set template_domain_import = "shared.domain"|compute_base_path(template) %}
2
+ from {{ source_name }}.{{ template_domain_import }}.exceptions.domain_error import DomainError
3
+
4
+
5
+ class RabbitMqConnectionNotEstablishedError(DomainError):
6
+ def __init__(self) -> None:
7
+ self._message = "RabbitMQ connection not established."
8
+ self._type = "rabbit_mq_connection"
9
+ super().__init__(self._message)
10
+
11
+ @property
12
+ def type(self) -> str:
13
+ return self._type
14
+
15
+ @property
16
+ def message(self) -> str:
17
+ return self._message
@@ -6,7 +6,7 @@ from typing import TypeVar
6
6
  from typing import TypeVar, Generic
7
7
  {% endif %}
8
8
 
9
- from {{ source_name }}.{{ template_domain_import }}.value_objects.uuid import Uuid
9
+ from {{ source_name }}.{{ template_domain_import }}.value_object.uuid import Uuid
10
10
  from {{ source_name }}.{{ template_infra_import }}.persistence.sqlalchemy.base import Base
11
11
  from {{ source_name }}.{{ template_infra_import }}.persistence.sqlalchemy.session_maker import (
12
12
  SessionMaker,
@@ -2,7 +2,7 @@
2
2
  from {{ source_name }}.{{ template_domain_import }}.exceptions.invalid_negative_value_error import (
3
3
  InvalidNegativeValueError,
4
4
  )
5
- from {{ source_name }}.{{ template_domain_import }}.value_objects.value_object import ValueObject
5
+ from {{ source_name }}.{{ template_domain_import }}.value_object.value_object import ValueObject
6
6
 
7
7
 
8
8
  class IntValueObject(ValueObject[int]):
@@ -5,7 +5,7 @@ from {{ source_name }}.{{ template_domain_import }}.exceptions.incorrect_value_t
5
5
  from {{ source_name }}.{{ template_domain_import }}.exceptions.required_value_error import (
6
6
  RequiredValueError,
7
7
  )
8
- from {{ source_name }}.{{ template_domain_import }}.value_objects.value_object import ValueObject
8
+ from {{ source_name }}.{{ template_domain_import }}.value_object.value_object import ValueObject
9
9
 
10
10
 
11
11
  class StringValueObject(ValueObject[str]):
@@ -4,7 +4,7 @@ from uuid import UUID
4
4
  from {{ source_name }}.{{ template_domain_import }}.exceptions.required_value_error import (
5
5
  RequiredValueError,
6
6
  )
7
- from {{ source_name }}.{{ template_domain_import }}.value_objects.value_object import ValueObject
7
+ from {{ source_name }}.{{ template_domain_import }}.value_object.value_object import ValueObject
8
8
 
9
9
 
10
10
  class Uuid(ValueObject[str]):
@@ -36,13 +36,13 @@
36
36
  {% if "event_bus" in built_in_features %}
37
37
  {{ macros.include_and_indent("project_structure/event_bus_infra.yml.j2", 8) }}
38
38
  {% endif %}
39
- {% if "logger" in built_in_features %}
39
+ {% if ["logger", "fastapi_application"] | is_in(built_in_features) %}
40
40
  {{ macros.include_and_indent("project_structure/logger.yml.j2", 8) }}
41
41
  {% endif %}
42
42
  {% if "async_sqlalchemy" in built_in_features %}
43
43
  {{ macros.include_and_indent("project_structure/async_sqlalchemy.yml.j2", 8) }}
44
44
  {% endif %}
45
- {% if "async_alembic" in built_in_features %}
45
+ {% if ["async_alembic", "fastapi_application"] | is_in(built_in_features) %}
46
46
  {{ macros.include_and_indent("project_structure/alembic_migrator.yml.j2", 8) }}
47
47
  {% endif %}
48
48
  {% if "fastapi_application" in built_in_features %}
@@ -38,13 +38,13 @@
38
38
  {% if "event_bus" in built_in_features %}
39
39
  {{ macros.include_and_indent("project_structure/event_bus_infra.yml.j2", 12) }}
40
40
  {% endif %}
41
- {% if "logger" in built_in_features %}
41
+ {% if ["logger", "fastapi_application"] | is_in(built_in_features) %}
42
42
  {{ macros.include_and_indent("project_structure/logger.yml.j2", 12) }}
43
43
  {% endif %}
44
44
  {% if "async_sqlalchemy" in built_in_features %}
45
45
  {{ macros.include_and_indent("project_structure/async_sqlalchemy.yml.j2", 12) }}
46
46
  {% endif %}
47
- {% if "async_alembic" in built_in_features %}
47
+ {% if ["async_alembic", "fastapi_application"] | is_in(built_in_features) %}
48
48
  {{ macros.include_and_indent("project_structure/alembic_migrator.yml.j2", 12) }}
49
49
  {% endif %}
50
50
  {% if "fastapi_application" in built_in_features %}
@@ -52,4 +52,6 @@
52
52
  {% endif %}
53
53
  {% endif %}
54
54
  {% endif %}
55
- {{ macros.include_and_indent("project_structure/domain_driven_design/bounded_context.yml.j2", 4) }}
55
+ {% if specify_bounded_context %}
56
+ {{ macros.include_and_indent("project_structure/domain_driven_design/bounded_context.yml.j2", 4) }}
57
+ {% endig %}
@@ -23,4 +23,6 @@
23
23
  type: file
24
24
  extension: .py
25
25
  {% endif %}
26
+ {% if specify_bounded_context %}
26
27
  {{ macros.include_and_indent("project_structure/domain_driven_design/bounded_context.yml.j2", 4) }}
28
+ {% endig %}
@@ -22,5 +22,8 @@
22
22
  python: True
23
23
  children:
24
24
  - name: exceptions/domain_event_type_not_found_error
25
+ type: file
26
+ extension: .py
27
+ - name: exceptions/rabbit_mq_connection_not_established_error
25
28
  type: file
26
29
  extension: .py
@@ -14,13 +14,13 @@
14
14
  {% if "synchronous_sqlalchemy" in built_in_features %}
15
15
  {{ macros.include_and_indent("project_structure/synchronous_sqlalchemy.yml.j2", 4) }}
16
16
  {% endif %}
17
- {% if "logger" in built_in_features %}
17
+ {% if ["logger", "fastapi_application"] | is_in(built_in_features) %}
18
18
  {{ macros.include_and_indent("project_structure/logger.yml.j2", 4) }}
19
19
  {% endif %}
20
20
  {% if "async_sqlalchemy" in built_in_features %}
21
21
  {{ macros.include_and_indent("project_structure/async_sqlalchemy.yml.j2", 4) }}
22
22
  {% endif %}
23
- {% if "async_alembic" in built_in_features %}
23
+ {% if ["async_alembic", "fastapi_application"] | is_in(built_in_features) %}
24
24
  {{ macros.include_and_indent("project_structure/alembic_migrator.yml.j2", 4) }}
25
25
  {% endif %}
26
26
  {% if "fastapi_application" in built_in_features %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.1.1
3
+ Version: 0.2.0
4
4
  Summary: Python automatic project generator
5
5
  Author-email: dimanu-py <diegomtz126@gmail.com>
6
6
  License: Apache License
@@ -8,8 +8,8 @@ instant_python/installer/dependency_manager_factory.py,sha256=uAwpTK9ilCkaZ50d4h
8
8
  instant_python/installer/git_configurer.py,sha256=di6kGnQ4TF5GSoXh2yXM7a1jg8QoFzD_YWq5HKWzYD8,1524
9
9
  instant_python/installer/installer.py,sha256=YV0PZ2wLC4bjpalvIqk7PEpLrFr_P7GSVJ_U8rnf7Ds,565
10
10
  instant_python/installer/managers.py,sha256=HNDazLb2iNgP1xdYvPFfMmVE9Ww_v9a0_CWTPo4XN1w,101
11
- instant_python/installer/pdm_manager.py,sha256=sKYtri6IVaFPAsjMj-Su-5J4O7q_jr3qqj7geCfFvF4,2441
12
- instant_python/installer/uv_manager.py,sha256=OIpZZ10ZUSr7jue-b9xOChiU1swu-blnTOWUmiWL5Pg,2563
11
+ instant_python/installer/pdm_manager.py,sha256=z49NAurrzgByMbB560xeAMH-5a4H1jkXi9AvtAQ8G4E,2756
12
+ instant_python/installer/uv_manager.py,sha256=iyoETYfheaTEXWncvcZqnmrfV91sq9fJtH_-8sTmBqg,2878
13
13
  instant_python/project_generator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  instant_python/project_generator/custom_template_manager.py,sha256=ApOBNU9hdOiQeaJhbr_RMdjm3B-vVLaXyvgj6XtbkZY,628
15
15
  instant_python/project_generator/default_template_manager.py,sha256=UdhB7pTZLbShSOAEHWl-l35dLfV0XU4fF69HMBfMw3U,1802
@@ -23,11 +23,11 @@ instant_python/project_generator/template_manager.py,sha256=LhN56T04QlRZv0DXUIl9
23
23
  instant_python/question_prompter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  instant_python/question_prompter/question_wizard.py,sha256=sRxECDBgHhDSWch8zan1Pd_XuLVdoGcaSB5SWXfSBso,476
25
25
  instant_python/question_prompter/template_types.py,sha256=HzqlryyB5KRBnCmqnDy-4Z-Kn3aTBC3wlrDWwDLdbXs,147
26
- instant_python/question_prompter/user_requirements.py,sha256=Qm0TRyJbJXvE7QruPIi5eNmC7ol0k9_cPhYk5DfnkoU,1162
26
+ instant_python/question_prompter/user_requirements.py,sha256=l9q5P_xn4Ii3TtctVG1J8B6J5nNuSynrivPVu6s02QQ,1219
27
27
  instant_python/question_prompter/question/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  instant_python/question_prompter/question/boolean_question.py,sha256=SUWotn15hPP8njqCJ3J1FYBtQ4cQ79e5laB3YObZjo8,430
29
29
  instant_python/question_prompter/question/choice_question.py,sha256=HeiyhihVngEcJmRW784RS1rAG8RaBua52Watb6bpVio,592
30
- instant_python/question_prompter/question/conditional_question.py,sha256=QfsB75V8lL6Zl6ROaiqxuyDKCJg_l5b04yLwo7PE3Bo,876
30
+ instant_python/question_prompter/question/conditional_question.py,sha256=_xwrOzCkKAiTM12cakfcv_4FPK4_6pE60Hrozevh5zs,1080
31
31
  instant_python/question_prompter/question/dependencies_question.py,sha256=kI1UiFWh-WOkmN1FtoLg7IKT14FDSc4_HKhRMNCFrYs,1566
32
32
  instant_python/question_prompter/question/free_text_question.py,sha256=LnY7kttSJGGvcja0g-2CapxFXR3ulHCAfUTQ6MP34xg,462
33
33
  instant_python/question_prompter/question/multiple_choice_question.py,sha256=smMCE0PDbxrUFiIjOWi3ylFWg0_7VZ7D8m1m3_qImE4,457
@@ -38,7 +38,7 @@ instant_python/question_prompter/step/general_custom_template_project_step.py,sh
38
38
  instant_python/question_prompter/step/general_project_step.py,sha256=e1NCVA7jDGfgaoxOINjSPhYkxTEvWuqQpeN_ClDAwRU,1879
39
39
  instant_python/question_prompter/step/git_step.py,sha256=_Lrz43uLrxCWXjHX8szKovlVBXYXfRRmWbh8Nst_1SU,1051
40
40
  instant_python/question_prompter/step/steps.py,sha256=KKjIj-5AmtRjZ58vv4Z8IRFa1gwbFpe0pYGWgj2ABI4,384
41
- instant_python/question_prompter/step/template_step.py,sha256=1novG9OeOs3jBbG_DPn5WQ08xpVx_roj3DW7Rb82C-Q,2329
41
+ instant_python/question_prompter/step/template_step.py,sha256=Pjo1xUYl1Rt5KTCx4zS_ocSGkeHCglZv8XKcl7yJRxU,2731
42
42
  instant_python/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  instant_python/templates/boilerplate/.gitignore,sha256=uViK8iDiHZGpnnvM3TpgrDwXlBk16wjMIndS8XDtWYE,3035
44
44
  instant_python/templates/boilerplate/.pre-commit-config.yml,sha256=bOJLrQ_0LqFxHDZeJKbs2FDKE2lxnHzWtYM1CgLSDjM,823
@@ -51,10 +51,10 @@ instant_python/templates/boilerplate/random_generator.py,sha256=WHyhk9xfRsziGH1P
51
51
  instant_python/templates/boilerplate/event_bus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  instant_python/templates/boilerplate/event_bus/aggregate_root.py,sha256=JgmBSYMXfh6P3twKW_HznYq8_kNHupmgPoRHSmlSA2Q,571
53
53
  instant_python/templates/boilerplate/event_bus/domain_event.py,sha256=aD4UGS4HWQwQvyfdKLpWN1emDfHUS6NQbYlGXRHVDas,312
54
- instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py,sha256=XBHPw93j-D-xk0l35bCil_z9fWn7BlaDHubpMqXjzX8,1036
54
+ instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py,sha256=gls8ZNGlFzFfd9ze8a9lbPgYARPJkUjsTHqGB5QRpZk,1052
55
55
  instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py,sha256=BP7sJ05uec-ZVhuOpBrpTFkgMAt0M134jBCSTRlzYbQ,493
56
- instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py,sha256=SUPz8wfs5ZGDi3zPLPzOY7cAv-QlpvOUaJhQX0o47qg,487
57
- instant_python/templates/boilerplate/event_bus/event_bus.py,sha256=QH9T3q7j01QqZ9AE0dTmyFKToUKorE-MczJ0SdIZKJE,341
56
+ instant_python/templates/boilerplate/event_bus/domain_event_subscriber.py,sha256=MZUHF_DlxgvpP3HotpjUefiN6CN9V5-cTB7tvsfjowc,1047
57
+ instant_python/templates/boilerplate/event_bus/event_bus.py,sha256=_mojP9FAzbFRDYvjdS5XXOYOTKgUKTYywZX-fv8nao4,347
58
58
  instant_python/templates/boilerplate/event_bus/exchange_type.py,sha256=9R79QpuSpY3jvGHw0lZptpN4Rc9mT8ySEl-rxOEblFc,250
59
59
  instant_python/templates/boilerplate/event_bus/mock_event_bus.py,sha256=0DRRsAs66oWF6hsiCyIMBJbeXptCODJr0MoAeoulang,635
60
60
  instant_python/templates/boilerplate/event_bus/rabbit_mq_configurer.py,sha256=F3TpTileJfm87s-5wd8J7BCWab5z27WOd0orVL60k5M,2085
@@ -65,10 +65,11 @@ instant_python/templates/boilerplate/event_bus/rabbit_mq_queue_formatter.py,sha2
65
65
  instant_python/templates/boilerplate/event_bus/rabbit_mq_settings.py,sha256=0oOoAU0m9Jwo6CmBlGpEiFXU7lvIILI0OfkB9W7RNG4,131
66
66
  instant_python/templates/boilerplate/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  instant_python/templates/boilerplate/exceptions/domain_error.py,sha256=XkgOt_5SpZ-0R73KYJ61TenXT8b0wCvoC4ZEge9ierI,283
68
- instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py,sha256=e6ZW_YCz0PaWdvZQE0Skr91jPYk9vjBwITQe9WFpgfQ,524
68
+ instant_python/templates/boilerplate/exceptions/domain_event_type_not_found_error.py,sha256=iV3-7B-7V1xCnezrHlEObGXrzfui5s_4jvNABv75uMQ,529
69
69
  instant_python/templates/boilerplate/exceptions/incorrect_value_type_error.py,sha256=to3-XOiMqvG1F7Mh_9KKsGzFx88pvAVow-NW9KNvffg,615
70
70
  instant_python/templates/boilerplate/exceptions/invalid_id_format_error.py,sha256=lkWizihdUsctYeev_M0iCw3_L7VkhKsUSyAwa-91Sgs,481
71
71
  instant_python/templates/boilerplate/exceptions/invalid_negative_value_error.py,sha256=Dp8l4K_77XgJ0DL1r0sLnYSPmai-Mw7CQAxJfmfSq80,553
72
+ instant_python/templates/boilerplate/exceptions/rabbit_mq_connection_not_established_error.py,sha256=9ariPxfnIbkDEiCm3zCil7otDZ9-NgQIVMnk680S4TM,509
72
73
  instant_python/templates/boilerplate/exceptions/required_value_error.py,sha256=l9RPCq0b8FSs1qa49hms9v-oj_pnx3V2SiTIi89TC9M,526
73
74
  instant_python/templates/boilerplate/fastapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
75
  instant_python/templates/boilerplate/fastapi/application.py,sha256=Fk6TcWY-XUa033HOsvgFR_sgaNPodVNJs2b3tSBopLg,1075
@@ -94,7 +95,7 @@ instant_python/templates/boilerplate/persistence/async/script.py.mako,sha256=Btn
94
95
  instant_python/templates/boilerplate/persistence/async/sqlalchemy_repository.py,sha256=tXGKrs5fWIQG6An5I7KUO-7OCfr5ltNrHUIAd4R-kdU,1201
95
96
  instant_python/templates/boilerplate/persistence/synchronous/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
97
  instant_python/templates/boilerplate/persistence/synchronous/session_maker.py,sha256=5SiWm3i13MlG9tiHp-sJmwYzZ9dcyXDfPGeVZTiKlTw,622
97
- instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py,sha256=Xnt_lboEnRTQ9yuecowsibmQaMHvK7MtqhpJ0qcWhZk,1531
98
+ instant_python/templates/boilerplate/persistence/synchronous/sqlalchemy_repository.py,sha256=pyt7o-5eWlW9waXloQx6RaqZ-gAgZcUKwZq7UH6TZUo,1530
98
99
  instant_python/templates/boilerplate/scripts/add_dependency.sh,sha256=dCugtjr8SJyJOo10Cw3amuvn-D1DdRwhleVJ_F2XbRY,731
99
100
  instant_python/templates/boilerplate/scripts/create_aggregate.py,sha256=dgMCAtJEJjfvuvTMegjXgVGI86jupZN_z7q1fOoopNU,1061
100
101
  instant_python/templates/boilerplate/scripts/insert_template.py,sha256=nkzSXIIj-KdQ30B_4tjut0LKeZNPUyy419A7YU6hVCw,4276
@@ -107,14 +108,14 @@ instant_python/templates/boilerplate/scripts/pre-push,sha256=2UpPIkPTnwO8UusCAij
107
108
  instant_python/templates/boilerplate/scripts/remove_dependency.sh,sha256=1NRVBCCCQZeAX7YYKzQ0AEpq_OlGt-S_6selTePVUJw,707
108
109
  instant_python/templates/boilerplate/scripts/unit.sh,sha256=XTlSZOYixobNqcdgtNVbhiLA9esodg8kMljEKCcZFNo,1107
109
110
  instant_python/templates/boilerplate/value_object/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
110
- instant_python/templates/boilerplate/value_object/int_value_object.py,sha256=NIiCZXTWOpNSuoaYwxck1hG86RW1OrZfVZ1oaMtVAjw,450
111
- instant_python/templates/boilerplate/value_object/string_value_object.py,sha256=BvSNVkqw6udfq_eDWbsbn1osFxrl86o3CznzjfUE3-E,737
112
- instant_python/templates/boilerplate/value_object/uuid.py,sha256=YVdeKnafMAvzR89WjV5rXjat6ji-j24ksCr0YkDys5s,556
111
+ instant_python/templates/boilerplate/value_object/int_value_object.py,sha256=BpIEEfevEmJ8HSV8MVFqpJV0KLwi827P7gEg-QpW36o,449
112
+ instant_python/templates/boilerplate/value_object/string_value_object.py,sha256=eGrqGH88kZMZ2Kfo4jbsHro9Lr9amPPCgX_XvU6ClEE,736
113
+ instant_python/templates/boilerplate/value_object/uuid.py,sha256=nCAqo43IgdvCUNBJeXxty_B15wZkpfn0RX4d4BH2XRI,555
113
114
  instant_python/templates/boilerplate/value_object/value_object.py,sha256=7EUE9fiTpdSgQ3FrgL7KiGZUGBKczJ3HquDqocEmVog,1007
114
115
  instant_python/templates/project_structure/alembic_migrator.yml.j2,sha256=dYkBJj1O2_bTjw6einWkijjPV-xRUpdUkGa0ZHgTP5E,66
115
116
  instant_python/templates/project_structure/async_alembic.yml.j2,sha256=YQMMZxueHFQPF9v0AQ1yjFOyvXHhsyI8gHd2AilG8dw,467
116
117
  instant_python/templates/project_structure/async_sqlalchemy.yml.j2,sha256=zpVnHtNOSWQqVP5lejRciHakCEMIppjv1EKqMA3bDY4,423
117
- instant_python/templates/project_structure/event_bus_domain.yml.j2,sha256=uVO8rEhmdZRSE0Ng0JoR3cCYCtDuiCiW5i4Y9g_L1ic,581
118
+ instant_python/templates/project_structure/event_bus_domain.yml.j2,sha256=0rXXuhyBWZUm_RIHq0yFonkbpdvXGB5QEkLoQkDX9bs,685
118
119
  instant_python/templates/project_structure/event_bus_infra.yml.j2,sha256=AQ8A525lZvusW5NiQew4eCzASAR2e65Bc5EUz3ENZeA,875
119
120
  instant_python/templates/project_structure/fastapi_app.yml.j2,sha256=k92dTeV2RpTDbhy_jxg6q0yXKhQHV9T-Nu1Fl7X6oNQ,193
120
121
  instant_python/templates/project_structure/fastapi_infra.yml.j2,sha256=fPreVwwnWUPTFhw2iWBO9TUYP5RZaAspIT6EMMV7je8,199
@@ -132,17 +133,17 @@ instant_python/templates/project_structure/python_version.yml.j2,sha256=eo400SNF
132
133
  instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2,sha256=bjfiKDNxi558fPzwF6RaZq1uoCMkKWJLB2L53acmFuY,431
133
134
  instant_python/templates/project_structure/value_objects.yml.j2,sha256=cPC-DHo8aaRwY8iVcFjxhto1HLVk9Kbybr_1r3BIr4Y,855
134
135
  instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2,sha256=gnN6jkyRhuNxC04X7EGa0TBYwJGUwX2Jv3OE3YLPKSc,1237
135
- instant_python/templates/project_structure/clean_architecture/source.yml.j2,sha256=eYzuQOf5sspDo0UnD0yk0aC9_C4g6MTo5za0BGUuyVE,2138
136
+ instant_python/templates/project_structure/clean_architecture/source.yml.j2,sha256=_iJjzVatJboCgJwzDRjPqyl6LXiVCZW2jE_xLr2_-HQ,2200
136
137
  instant_python/templates/project_structure/clean_architecture/test.yml.j2,sha256=-s_V1mPa_muydoUo2sZW70fUB4Z3O_YfwXl-A5V3ZH4,547
137
138
  instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2,sha256=P1hOzOlWm-8ZEGQP-fV-5xk2CfTC0j2BizSStKCvETw,453
138
139
  instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2,sha256=lmKOIJv6GT0KjVZ9yiz7pCLBPY-Z9inwr5T4xxbFuus,1241
139
- instant_python/templates/project_structure/domain_driven_design/source.yml.j2,sha256=CpfzsXm9FLzsJZCSB_IEf25NXl9aQFF3zNuFKA_6mns,2523
140
- instant_python/templates/project_structure/domain_driven_design/test.yml.j2,sha256=vOoIpjgL7OpTg_-NbuJ8eTNDjRw351fOHDezGU0C7NE,747
140
+ instant_python/templates/project_structure/domain_driven_design/source.yml.j2,sha256=OsZQp67BLLVLwknf_I75adCq1WnD9ndMjifmwqhZk2w,2638
141
+ instant_python/templates/project_structure/domain_driven_design/test.yml.j2,sha256=m9Z6EhY0Hwc2QjicT3ONSKvmj5ZcyyT-11IHKwxMvDw,799
141
142
  instant_python/templates/project_structure/standard_project/main_structure.yml.j2,sha256=SG0R4_DPIkb8CCyPfFw7xoId7fmRq_lm9DTaL6MJK18,1234
142
- instant_python/templates/project_structure/standard_project/source.yml.j2,sha256=BJYCqEKtKq1TPRE98nrM5Di1psPLlRZg67qvD5m2kvk,1524
143
+ instant_python/templates/project_structure/standard_project/source.yml.j2,sha256=tqD9AsAAzPhulWmRrUW7k3F0eguhAKvNc_p5faQCfRg,1586
143
144
  instant_python/templates/project_structure/standard_project/test.yml.j2,sha256=OvSSn9tQcK3ctTXaOIr_bL6QdgUNrcs518LmnStqxaE,348
144
- instant_python-0.1.1.dist-info/METADATA,sha256=N9pM6NZC1MfrEUZR9XUuldPobFmTm9D_vCO3VXWWnUg,15882
145
- instant_python-0.1.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
146
- instant_python-0.1.1.dist-info/entry_points.txt,sha256=EdBTj3b3N9Pa4oNzPLPivE_AnMcQIFsmRC3RsSkoLLA,47
147
- instant_python-0.1.1.dist-info/licenses/LICENSE,sha256=kf7wA-1IsqXkzXjlsG95sdQJtsqUON_lNXombfPlklo,11353
148
- instant_python-0.1.1.dist-info/RECORD,,
145
+ instant_python-0.2.0.dist-info/METADATA,sha256=Y5buM47xtTPnPxJQ1lIUEI7uVxhMYt4Av2HxyOhNnXM,15882
146
+ instant_python-0.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
147
+ instant_python-0.2.0.dist-info/entry_points.txt,sha256=EdBTj3b3N9Pa4oNzPLPivE_AnMcQIFsmRC3RsSkoLLA,47
148
+ instant_python-0.2.0.dist-info/licenses/LICENSE,sha256=kf7wA-1IsqXkzXjlsG95sdQJtsqUON_lNXombfPlklo,11353
149
+ instant_python-0.2.0.dist-info/RECORD,,