instant-python 0.2.0__py3-none-any.whl → 0.4.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 (46) hide show
  1. instant_python/folder_cli.py +9 -9
  2. instant_python/project_cli.py +3 -3
  3. instant_python/project_generator/boilerplate_file.py +20 -0
  4. instant_python/project_generator/file.py +4 -8
  5. instant_python/project_generator/folder_tree.py +4 -0
  6. instant_python/project_generator/jinja_environment.py +20 -0
  7. instant_python/project_generator/{default_template_manager.py → jinja_template_manager.py} +8 -13
  8. instant_python/project_generator/node.py +1 -0
  9. instant_python/project_generator/project_generator.py +1 -1
  10. instant_python/question_prompter/question_wizard.py +3 -3
  11. instant_python/question_prompter/{user_requirements.py → requirements_configuration.py} +2 -2
  12. instant_python/templates/boilerplate/README.md +5 -0
  13. instant_python/templates/boilerplate/event_bus/aggregate_root.py +0 -1
  14. instant_python/templates/boilerplate/value_object/int_value_object.py +7 -4
  15. instant_python/templates/project_structure/alembic_migrator.yml.j2 +1 -1
  16. instant_python/templates/project_structure/async_alembic.yml.j2 +5 -5
  17. instant_python/templates/project_structure/async_sqlalchemy.yml.j2 +3 -3
  18. instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2 +1 -0
  19. instant_python/templates/project_structure/clean_architecture/test.yml.j2 +2 -2
  20. instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2 +1 -0
  21. instant_python/templates/project_structure/domain_driven_design/source.yml.j2 +1 -1
  22. instant_python/templates/project_structure/domain_driven_design/test.yml.j2 +3 -3
  23. instant_python/templates/project_structure/event_bus_domain.yml.j2 +7 -7
  24. instant_python/templates/project_structure/event_bus_infra.yml.j2 +8 -8
  25. instant_python/templates/project_structure/fastapi_app.yml.j2 +2 -2
  26. instant_python/templates/project_structure/fastapi_infra.yml.j2 +2 -2
  27. instant_python/templates/project_structure/github_action.yml.j2 +2 -2
  28. instant_python/templates/project_structure/gitignore.yml.j2 +1 -1
  29. instant_python/templates/project_structure/license.yml.j2 +1 -1
  30. instant_python/templates/project_structure/logger.yml.j2 +2 -2
  31. instant_python/templates/project_structure/makefile.yml.j2 +10 -10
  32. instant_python/templates/project_structure/mypy.yml.j2 +1 -1
  33. instant_python/templates/project_structure/pre_commit.yml.j2 +1 -1
  34. instant_python/templates/project_structure/pyproject.yml.j2 +1 -1
  35. instant_python/templates/project_structure/pytest.yml.j2 +1 -1
  36. instant_python/templates/project_structure/python_version.yml.j2 +1 -1
  37. instant_python/templates/project_structure/readme.yml.j2 +3 -0
  38. instant_python/templates/project_structure/standard_project/main_structure.yml.j2 +1 -0
  39. instant_python/templates/project_structure/standard_project/test.yml.j2 +2 -2
  40. instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2 +3 -3
  41. instant_python/templates/project_structure/value_objects.yml.j2 +9 -9
  42. {instant_python-0.2.0.dist-info → instant_python-0.4.0.dist-info}/METADATA +9 -3
  43. {instant_python-0.2.0.dist-info → instant_python-0.4.0.dist-info}/RECORD +46 -42
  44. {instant_python-0.2.0.dist-info → instant_python-0.4.0.dist-info}/WHEEL +0 -0
  45. {instant_python-0.2.0.dist-info → instant_python-0.4.0.dist-info}/entry_points.txt +0 -0
  46. {instant_python-0.2.0.dist-info → instant_python-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,7 @@
1
1
  import typer
2
2
 
3
3
  from instant_python.project_generator.custom_template_manager import CustomTemplateManager
4
- from instant_python.project_generator.default_template_manager import DefaultTemplateManager
4
+ from instant_python.project_generator.jinja_template_manager import JinjaTemplateManager
5
5
  from instant_python.project_generator.folder_tree import FolderTree
6
6
  from instant_python.project_generator.project_generator import ProjectGenerator
7
7
  from instant_python.question_prompter.question.free_text_question import FreeTextQuestion
@@ -13,8 +13,8 @@ from instant_python.question_prompter.step.template_step import TemplateStep
13
13
  app = typer.Typer()
14
14
 
15
15
 
16
- @app.command("template", help="Pass a custom template folder structure", hidden=True)
17
- def create_folder_structure_from_template(template_name: str) -> None:
16
+ @app.command("template", help="Pass a custom template folder structure")
17
+ def create_folder_structure_from_template(template_path: str) -> None:
18
18
  project_name = FreeTextQuestion(
19
19
  key="project_slug",
20
20
  message="Enter the name of the project (CANNOT CONTAIN SPACES)",
@@ -22,7 +22,7 @@ def create_folder_structure_from_template(template_name: str) -> None:
22
22
  ).ask()
23
23
  project_generator = ProjectGenerator(
24
24
  folder_tree=FolderTree(project_name["project_slug"]),
25
- template_manager=CustomTemplateManager(template_name),
25
+ template_manager=CustomTemplateManager(template_path),
26
26
  )
27
27
 
28
28
  project_generator.generate()
@@ -33,17 +33,17 @@ def create_default_project_structure() -> None:
33
33
  wizard = QuestionWizard(
34
34
  steps=Steps(GeneralProjectStep(), TemplateStep())
35
35
  )
36
- user_requirements = wizard.run()
37
- user_requirements.save_in_memory()
36
+ requirements = wizard.run()
37
+ requirements.save_in_memory()
38
38
 
39
39
  project_generator = ProjectGenerator(
40
- folder_tree=FolderTree(user_requirements.project_slug),
41
- template_manager=DefaultTemplateManager(),
40
+ folder_tree=FolderTree(requirements.project_slug),
41
+ template_manager=JinjaTemplateManager(),
42
42
  )
43
43
 
44
44
  project_generator.generate()
45
45
 
46
- user_requirements.remove()
46
+ requirements.remove()
47
47
 
48
48
 
49
49
  if __name__ == "__main__":
@@ -4,8 +4,8 @@ from instant_python.installer.dependency_manager_factory import DependencyManage
4
4
  from instant_python.installer.git_configurer import GitConfigurer
5
5
  from instant_python.installer.installer import Installer
6
6
  from instant_python.project_generator.custom_template_manager import CustomTemplateManager
7
- from instant_python.project_generator.default_template_manager import (
8
- DefaultTemplateManager,
7
+ from instant_python.project_generator.jinja_template_manager import (
8
+ JinjaTemplateManager,
9
9
  )
10
10
  from instant_python.project_generator.folder_tree import FolderTree
11
11
  from instant_python.project_generator.project_generator import ProjectGenerator
@@ -74,7 +74,7 @@ def create_full_project() -> None:
74
74
 
75
75
  project_generator = ProjectGenerator(
76
76
  folder_tree=FolderTree(user_requirements.project_slug),
77
- template_manager=DefaultTemplateManager(),
77
+ template_manager=JinjaTemplateManager(),
78
78
  )
79
79
  project_generator.generate()
80
80
 
@@ -0,0 +1,20 @@
1
+ from pathlib import Path
2
+
3
+ from instant_python.project_generator.jinja_template_manager import JinjaTemplateManager
4
+ from instant_python.project_generator.node import Node
5
+
6
+
7
+ class BoilerplateFile(Node):
8
+
9
+ def __init__(self, name: str, extension: str) -> None:
10
+ self._file_name = f"{name.split('/')[-1]}{extension}"
11
+ self._template_path = f"boilerplate/{name}{extension}"
12
+ self._template_manager = JinjaTemplateManager()
13
+
14
+ def __repr__(self) -> str:
15
+ return f"{self.__class__.__name__}(name={self._file_name})"
16
+
17
+ def create(self, base_path: Path) -> None:
18
+ file_path = base_path / self._file_name
19
+ content = self._template_manager.get_boilerplate(self._template_path)
20
+ file_path.write_text(content)
@@ -1,20 +1,16 @@
1
1
  from pathlib import Path
2
2
 
3
- from instant_python.project_generator.default_template_manager import DefaultTemplateManager
4
3
  from instant_python.project_generator.node import Node
5
4
 
6
5
 
7
6
  class File(Node):
8
-
9
7
  def __init__(self, name: str, extension: str) -> None:
10
- self._file_name = f"{name.split('/')[-1]}{extension}"
11
- self._template_path = f"boilerplate/{name}{extension}"
12
- self._template_manager = DefaultTemplateManager()
8
+ self._file_name = name
9
+ self._extension = extension
13
10
 
14
11
  def __repr__(self) -> str:
15
12
  return f"{self.__class__.__name__}(name={self._file_name})"
16
13
 
17
14
  def create(self, base_path: Path) -> None:
18
- file_path = base_path / self._file_name
19
- content = self._template_manager.get_boilerplate(self._template_path)
20
- file_path.write_text(content)
15
+ file_path = base_path / f"{self._file_name}{self._extension}"
16
+ file_path.touch(exist_ok=True)
@@ -1,6 +1,7 @@
1
1
  from pathlib import Path
2
2
 
3
3
  from instant_python.project_generator.directory import Directory
4
+ from instant_python.project_generator.boilerplate_file import BoilerplateFile
4
5
  from instant_python.project_generator.file import File
5
6
  from instant_python.project_generator.node import Node, NodeType
6
7
 
@@ -33,6 +34,9 @@ class FolderTree:
33
34
  is_python_module = node.get("python", False)
34
35
  directory_children = [self._build_tree(child) for child in children]
35
36
  return Directory(name=name, children=directory_children, python_module=is_python_module)
37
+ elif node_type == NodeType.BOILERPLATE:
38
+ extension = node.get("extension", "")
39
+ return BoilerplateFile(name=name, extension=extension)
36
40
  elif node_type == NodeType.FILE:
37
41
  extension = node.get("extension", "")
38
42
  return File(name=name, extension=extension)
@@ -0,0 +1,20 @@
1
+ from jinja2 import Environment, Template, PackageLoader
2
+
3
+ from instant_python.project_generator.jinja_custom_filters import (
4
+ is_in,
5
+ compute_base_path,
6
+ )
7
+
8
+
9
+ class JinjaEnvironment:
10
+ def __init__(self) -> None:
11
+ self._env = Environment(
12
+ loader=PackageLoader("instant_python", "templates"),
13
+ trim_blocks=True,
14
+ lstrip_blocks=True,
15
+ )
16
+ self._env.filters["is_in"] = is_in
17
+ self._env.filters["compute_base_path"] = compute_base_path
18
+
19
+ def get_template(self, name: str) -> Template:
20
+ return self._env.get_template(name)
@@ -1,22 +1,17 @@
1
1
  import yaml
2
- from jinja2 import Environment, Template, PackageLoader
2
+ from jinja2 import Template
3
3
 
4
- from instant_python.project_generator.jinja_custom_filters import is_in, compute_base_path
4
+ from instant_python.project_generator.jinja_environment import JinjaEnvironment
5
5
  from instant_python.project_generator.template_manager import TemplateManager
6
6
  from instant_python.question_prompter.template_types import TemplateTypes
7
- from instant_python.question_prompter.user_requirements import UserRequirements
7
+ from instant_python.question_prompter.requirements_configuration import RequirementsConfiguration
8
8
 
9
9
 
10
- class DefaultTemplateManager(TemplateManager):
10
+ class JinjaTemplateManager(TemplateManager):
11
11
 
12
12
  def __init__(self) -> None:
13
13
  self._requirements = self._load_memory_requirements()
14
- self._env = Environment(loader=PackageLoader("instant_python",
15
- "templates"),
16
- trim_blocks=True,
17
- lstrip_blocks=True)
18
- self._env.filters["is_in"] = is_in
19
- self._env.filters["compute_base_path"] = compute_base_path
14
+ self._env = JinjaEnvironment()
20
15
 
21
16
  def get_project(self, template_name: str) -> dict:
22
17
  template = self._get_template(
@@ -36,7 +31,7 @@ class DefaultTemplateManager(TemplateManager):
36
31
  return template.render(**self._requirements.to_dict(), template_types=TemplateTypes)
37
32
 
38
33
  @staticmethod
39
- def _load_memory_requirements() -> UserRequirements:
40
- with open("user_requirements.yml") as file:
34
+ def _load_memory_requirements() -> RequirementsConfiguration:
35
+ with open("ipy.yml") as file:
41
36
  requirements = yaml.safe_load(file)
42
- return UserRequirements(**requirements)
37
+ return RequirementsConfiguration(**requirements)
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
  class NodeType(str, Enum):
7
7
  DIRECTORY = "directory"
8
8
  FILE = "file"
9
+ BOILERPLATE = "boilerplate_file"
9
10
 
10
11
 
11
12
  class Node(ABC):
@@ -1,7 +1,7 @@
1
1
  import subprocess
2
2
 
3
3
  from instant_python.project_generator.folder_tree import FolderTree
4
- from instant_python.project_generator.default_template_manager import TemplateManager
4
+ from instant_python.project_generator.jinja_template_manager import TemplateManager
5
5
 
6
6
 
7
7
  class ProjectGenerator:
@@ -1,5 +1,5 @@
1
1
  from instant_python.question_prompter.step.steps import Steps
2
- from instant_python.question_prompter.user_requirements import UserRequirements
2
+ from instant_python.question_prompter.requirements_configuration import RequirementsConfiguration
3
3
 
4
4
 
5
5
  class QuestionWizard:
@@ -7,9 +7,9 @@ class QuestionWizard:
7
7
  self._steps = steps
8
8
  self._answers = {}
9
9
 
10
- def run(self) -> UserRequirements:
10
+ def run(self) -> RequirementsConfiguration:
11
11
  for step in self._steps:
12
12
  answer = step.run(self._answers)
13
13
  self._answers.update(answer)
14
14
 
15
- return UserRequirements(**self._answers)
15
+ return RequirementsConfiguration(**self._answers)
@@ -6,7 +6,7 @@ import yaml
6
6
 
7
7
 
8
8
  @dataclass
9
- class UserRequirements:
9
+ class RequirementsConfiguration:
10
10
  project_slug: str
11
11
  license: str
12
12
  version: str
@@ -27,7 +27,7 @@ class UserRequirements:
27
27
  year: int = field(default=datetime.now().year)
28
28
 
29
29
  def __post_init__(self) -> None:
30
- self._file_path = "user_requirements.yml"
30
+ self._file_path = "ipy.yml"
31
31
 
32
32
  def to_dict(self) -> dict:
33
33
  return asdict(self)
@@ -0,0 +1,5 @@
1
+ # {{ project-slug }}
2
+
3
+ ## Description
4
+
5
+ {{ description }}
@@ -1,5 +1,4 @@
1
1
  {% set template_domain_import = "shared.domain"|compute_base_path(template) %}
2
-
3
2
  from {{ source_name }}.{{ template_domain_import }}.event.domain_event import DomainEvent
4
3
 
5
4
 
@@ -1,11 +1,14 @@
1
1
  {% set template_domain_import = "shared.domain"|compute_base_path(template) %}
2
2
  from {{ source_name }}.{{ template_domain_import }}.exceptions.invalid_negative_value_error import (
3
- InvalidNegativeValueError,
3
+ InvalidNegativeValueError,
4
4
  )
5
5
  from {{ source_name }}.{{ template_domain_import }}.value_object.value_object import ValueObject
6
6
 
7
7
 
8
8
  class IntValueObject(ValueObject[int]):
9
- def _validate(self, value: int) -> None:
10
- if value < 0:
11
- raise InvalidNegativeValueError(value)
9
+ def __init__(self, value: int) -> None:
10
+ super().__init__(value)
11
+
12
+ def _validate(self, value: int) -> None:
13
+ if value < 0:
14
+ raise InvalidNegativeValueError(value)
@@ -1,3 +1,3 @@
1
1
  - name: persistence/alembic_migrator
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: .py
@@ -1,5 +1,5 @@
1
1
  - name: persistence/async/alembic
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: .ini
4
4
  - name: migrations
5
5
  type: directory
@@ -7,14 +7,14 @@
7
7
  - name: versions
8
8
  type: directory
9
9
  - name: persistence/async/README
10
- type: file
10
+ type: boilerplate_file
11
11
  extension: .md
12
12
  - name: persistence/async/env
13
- type: file
13
+ type: boilerplate_file
14
14
  extension: .py
15
15
  - name: persistence/async/models_metadata
16
- type: file
16
+ type: boilerplate_file
17
17
  extension: .py
18
18
  - name: persistence/async/script
19
- type: file
19
+ type: boilerplate_file
20
20
  extension: .py.mako
@@ -7,11 +7,11 @@
7
7
  python: True
8
8
  children:
9
9
  - name: persistence/base
10
- type: file
10
+ type: boilerplate_file
11
11
  extension: .py
12
12
  - name: persistence/async/sqlalchemy_repository
13
- type: file
13
+ type: boilerplate_file
14
14
  extension: .py
15
15
  - name: persistence/async/postgres_settings
16
- type: file
16
+ type: boilerplate_file
17
17
  extension: .py
@@ -11,6 +11,7 @@ root:
11
11
  {{ macros.include_and_indent("project_structure/pyproject.yml.j2", 2) }}
12
12
  {% if git %}
13
13
  {{ macros.include_and_indent("project_structure/gitignore.yml.j2", 2) }}
14
+ {{ macros.include_and_indent("project_structure/readme.yml.j2", 2) }}
14
15
  {% endif %}
15
16
  {{ macros.include_and_indent("project_structure/python_version.yml.j2", 2) }}
16
17
  {% if "pytest" in dependencies %}
@@ -9,7 +9,7 @@
9
9
  {% if "event_bus" in built_in_features %}
10
10
  children:
11
11
  - name: event_bus/mock_event_bus
12
- type: file
12
+ type: boilerplate_file
13
13
  extension: .py
14
14
  {% endif %}
15
15
  - name: integration
@@ -19,5 +19,5 @@
19
19
  type: directory
20
20
  python: True
21
21
  - name: random_generator
22
- type: file
22
+ type: boilerplate_file
23
23
  extension: .py
@@ -11,6 +11,7 @@ root:
11
11
  {{ macros.include_and_indent("project_structure/pyproject.yml.j2", 2) }}
12
12
  {% if git %}
13
13
  {{ macros.include_and_indent("project_structure/gitignore.yml.j2", 2) }}
14
+ {{ macros.include_and_indent("project_structure/readme.yml.j2", 2) }}
14
15
  {% endif %}
15
16
  {{ macros.include_and_indent("project_structure/python_version.yml.j2", 2) }}
16
17
  {% if "pytest" in dependencies %}
@@ -54,4 +54,4 @@
54
54
  {% endif %}
55
55
  {% if specify_bounded_context %}
56
56
  {{ macros.include_and_indent("project_structure/domain_driven_design/bounded_context.yml.j2", 4) }}
57
- {% endig %}
57
+ {% endif %}
@@ -12,7 +12,7 @@
12
12
  python: True
13
13
  children:
14
14
  - name: random_generator
15
- type: file
15
+ type: boilerplate_file
16
16
  extension: .py
17
17
  {% if "event_bus" in built_in_features %}
18
18
  - name: infra
@@ -20,9 +20,9 @@
20
20
  python: True
21
21
  children:
22
22
  - name: event_bus/mock_event_bus
23
- type: file
23
+ type: boilerplate_file
24
24
  extension: .py
25
25
  {% endif %}
26
26
  {% if specify_bounded_context %}
27
27
  {{ macros.include_and_indent("project_structure/domain_driven_design/bounded_context.yml.j2", 4) }}
28
- {% endig %}
28
+ {% endif %}
@@ -1,29 +1,29 @@
1
1
  - name: event_bus/aggregate_root
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: .py
4
4
  - name: event
5
5
  type: directory
6
6
  python: True
7
7
  children:
8
8
  - name: event_bus/domain_event
9
- type: file
9
+ type: boilerplate_file
10
10
  extension: .py
11
11
  - name: event_bus/domain_event_subscriber
12
- type: file
12
+ type: boilerplate_file
13
13
  extension: .py
14
14
  - name: event_bus/event_bus
15
- type: file
15
+ type: boilerplate_file
16
16
  extension: .py
17
17
  - name: event_bus/exchange_type
18
- type: file
18
+ type: boilerplate_file
19
19
  extension: .py
20
20
  - name: exceptions
21
21
  type: directory
22
22
  python: True
23
23
  children:
24
24
  - name: exceptions/domain_event_type_not_found_error
25
- type: file
25
+ type: boilerplate_file
26
26
  extension: .py
27
27
  - name: exceptions/rabbit_mq_connection_not_established_error
28
- type: file
28
+ type: boilerplate_file
29
29
  extension: .py
@@ -3,30 +3,30 @@
3
3
  python: True
4
4
  children:
5
5
  - name: event_bus/domain_event_json_deserializer
6
- type: file
6
+ type: boilerplate_file
7
7
  extension: .py
8
8
  - name: event_bus/domain_event_json_serializer
9
- type: file
9
+ type: boilerplate_file
10
10
  extension: .py
11
11
  - name: rabbit_mq
12
12
  type: directory
13
13
  python: True
14
14
  children:
15
15
  - name: event_bus/rabbit_mq_configurer
16
- type: file
16
+ type: boilerplate_file
17
17
  extension: .py
18
18
  - name: event_bus/rabbit_mq_connection
19
- type: file
19
+ type: boilerplate_file
20
20
  extension: .py
21
21
  - name: event_bus/rabbit_mq_consumer
22
- type: file
22
+ type: boilerplate_file
23
23
  extension: .py
24
24
  - name: event_bus/rabbit_mq_event_bus
25
- type: file
25
+ type: boilerplate_file
26
26
  extension: .py
27
27
  - name: event_bus/rabbit_mq_queue_formatter
28
- type: file
28
+ type: boilerplate_file
29
29
  extension: .py
30
30
  - name: event_bus/rabbit_mq_settings
31
- type: file
31
+ type: boilerplate_file
32
32
  extension: .py
@@ -3,8 +3,8 @@
3
3
  python: True
4
4
  children:
5
5
  - name: fastapi/application
6
- type: file
6
+ type: boilerplate_file
7
7
  extension: .py
8
8
  - name: fastapi/lifespan
9
- type: file
9
+ type: boilerplate_file
10
10
  extension: .py
@@ -3,8 +3,8 @@
3
3
  python: True
4
4
  children:
5
5
  - name: fastapi/http_response
6
- type: file
6
+ type: boilerplate_file
7
7
  extension: .py
8
8
  - name: fastapi/status_code
9
- type: file
9
+ type: boilerplate_file
10
10
  extension: .py
@@ -8,11 +8,11 @@
8
8
  type: directory
9
9
  children:
10
10
  - name: github/action
11
- type: file
11
+ type: boilerplate_file
12
12
  extension: .yml
13
13
  - name: workflows
14
14
  type: directory
15
15
  children:
16
16
  - name: github/test_lint
17
- type: file
17
+ type: boilerplate_file
18
18
  extension: .yml
@@ -1,2 +1,2 @@
1
1
  - name: .gitignore
2
- type: file
2
+ type: boilerplate_file
@@ -1,2 +1,2 @@
1
1
  - name: LICENSE
2
- type: file
2
+ type: boilerplate_file
@@ -3,8 +3,8 @@
3
3
  python: True
4
4
  children:
5
5
  - name: logger/json_formatter
6
- type: file
6
+ type: boilerplate_file
7
7
  extension: .py
8
8
  - name: logger/logger
9
- type: file
9
+ type: boilerplate_file
10
10
  extension: .py
@@ -1,38 +1,38 @@
1
1
  {% import "project_structure/macros.j2" as macros with context %}
2
2
  - name: scripts/makefile
3
- type: file
3
+ type: boilerplate_file
4
4
  - name: scripts
5
5
  type: directory
6
6
  children:
7
7
  - name: scripts/add_dependency
8
- type: file
8
+ type: boilerplate_file
9
9
  extension: .sh
10
10
  - name: scripts/remove_dependency
11
- type: file
11
+ type: boilerplate_file
12
12
  extension: .sh
13
13
  - name: scripts/local_setup
14
- type: file
14
+ type: boilerplate_file
15
15
  extension: .sh
16
16
  - name: hooks
17
17
  type: directory
18
18
  children:
19
19
  - name: scripts/pre-commit
20
- type: file
20
+ type: boilerplate_file
21
21
  - name: scripts/pre-push
22
- type: file
22
+ type: boilerplate_file
23
23
  - name: scripts/post-merge
24
- type: file
24
+ type: boilerplate_file
25
25
  {% if template == "domain_driven_design" %}
26
26
  - name: test
27
27
  type: directory
28
28
  children:
29
29
  - name: scripts/unit
30
- type: file
30
+ type: boilerplate_file
31
31
  extension: .sh
32
32
  - name: scripts/integration
33
- type: file
33
+ type: boilerplate_file
34
34
  extension: .sh
35
35
  - name: scripts/create_aggregate
36
- type: file
36
+ type: boilerplate_file
37
37
  extension: .py
38
38
  {% endif %}
@@ -1,3 +1,3 @@
1
1
  - name: mypy
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: .ini
@@ -1,3 +1,3 @@
1
1
  - name: .pre-commit-config
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: yml
@@ -1,3 +1,3 @@
1
1
  - name: pyproject
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: .toml
@@ -1,3 +1,3 @@
1
1
  - name: pytest
2
- type: file
2
+ type: boilerplate_file
3
3
  extension: .ini
@@ -1,2 +1,2 @@
1
1
  - name: .python-version
2
- type: file
2
+ type: boilerplate_file
@@ -0,0 +1,3 @@
1
+ - name: README
2
+ type: boilerplate_file
3
+ extension: .md
@@ -11,6 +11,7 @@ root:
11
11
  {{ macros.include_and_indent("project_structure/pyproject.yml.j2", 2) }}
12
12
  {% if git %}
13
13
  {{ macros.include_and_indent("project_structure/gitignore.yml.j2", 2) }}
14
+ {{ macros.include_and_indent("project_structure/readme.yml.j2", 2) }}
14
15
  {% endif %}
15
16
  {{ macros.include_and_indent("project_structure/python_version.yml.j2", 2) }}
16
17
  {% if "pytest" in dependencies %}
@@ -3,7 +3,7 @@
3
3
  python: True
4
4
  children:
5
5
  - name: random_generator
6
- type: file
6
+ type: boilerplate_file
7
7
  extension: .py
8
8
  {% if "event_bus" in built_in_features %}
9
9
  - name: event
@@ -11,6 +11,6 @@
11
11
  python: True
12
12
  children:
13
13
  - name: event_bus/mock_event_bus
14
- type: file
14
+ type: boilerplate_file
15
15
  extension: .py
16
16
  {% endif %}
@@ -7,11 +7,11 @@
7
7
  python: True
8
8
  children:
9
9
  - name: persistence/base
10
- type: file
10
+ type: boilerplate_file
11
11
  extension: .py
12
12
  - name: persistence/synchronous/session_maker
13
- type: file
13
+ type: boilerplate_file
14
14
  extension: .py
15
15
  - name: persistence/synchronous/sqlalchemy_repository
16
- type: file
16
+ type: boilerplate_file
17
17
  extension: .py
@@ -3,33 +3,33 @@
3
3
  python: True
4
4
  children:
5
5
  - name: exceptions/domain_error
6
- type: file
6
+ type: boilerplate_file
7
7
  extension: .py
8
8
  - name: exceptions/incorrect_value_type_error
9
- type: file
9
+ type: boilerplate_file
10
10
  extension: .py
11
11
  - name: exceptions/invalid_negative_value_error
12
- type: file
12
+ type: boilerplate_file
13
13
  extension: .py
14
14
  - name: exceptions/invalid_id_format_error
15
- type: file
15
+ type: boilerplate_file
16
16
  extension: .py
17
17
  - name: exceptions/required_value_error
18
- type: file
18
+ type: boilerplate_file
19
19
  extension: .py
20
20
  - name: value_object
21
21
  type: directory
22
22
  python: True
23
23
  children:
24
24
  - name: value_object/value_object
25
- type: file
25
+ type: boilerplate_file
26
26
  extension: .py
27
27
  - name: value_object/string_value_object
28
- type: file
28
+ type: boilerplate_file
29
29
  extension: .py
30
30
  - name: value_object/int_value_object
31
- type: file
31
+ type: boilerplate_file
32
32
  extension: .py
33
33
  - name: value_object/uuid
34
- type: file
34
+ type: boilerplate_file
35
35
  extension: .py
@@ -1,7 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: instant-python
3
- Version: 0.2.0
4
- Summary: Python automatic project generator
3
+ Version: 0.4.0
4
+ Summary: Instant boilerplate generation for Python projects
5
+ Project-URL: documentation, https://dimanu-py.github.io/instant-python/welcome/
6
+ Project-URL: repository, https://github.com/dimanu-py/instant-python/
5
7
  Author-email: dimanu-py <diegomtz126@gmail.com>
6
8
  License: Apache License
7
9
  Version 2.0, January 2004
@@ -205,6 +207,10 @@ License: Apache License
205
207
  See the License for the specific language governing permissions and
206
208
  limitations under the License.
207
209
  License-File: LICENSE
210
+ Classifier: Environment :: Console
211
+ Classifier: Intended Audience :: Developers
212
+ Classifier: Operating System :: MacOS
213
+ Classifier: Operating System :: POSIX :: Linux
208
214
  Requires-Python: >=3.9
209
215
  Requires-Dist: jinja2>=3.1.5
210
216
  Requires-Dist: pyyaml>=6.0.2
@@ -261,7 +267,7 @@ as soon as possible. An overview of the features is given below, but you can fin
261
267
  [documentation](https://dimanu-py.github.io/instant-python/guide/features/).
262
268
 
263
269
  - Project slug: Configure the name of the main folder of your project.
264
- - Source name: Configure the name of the source code of your project.
270
+ - Source name: Configure the name of the source code folder of your project.
265
271
  - Description: Include a description about your project.
266
272
  - Version: Set the initial version of your project.
267
273
  - Author: Set the author of the project.
@@ -1,7 +1,7 @@
1
1
  instant_python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  instant_python/cli.py,sha256=94jwSQmOI_2jjaLyz9IcPFt6cIDUO6Kzd2JssKW-TFE,327
3
- instant_python/folder_cli.py,sha256=9Y6L6HWeuPmvn5Z_1rKIgNBuPIEvmWReE0P2nFl7ln8,1787
4
- instant_python/project_cli.py,sha256=Fw6DOEO8XyN1iq2nN8L778nLCzx9p0Fg3hMlS2j0DCU,3452
3
+ instant_python/folder_cli.py,sha256=kEVCuhq08v8ahdUTa3sA1v5B96xoMO4U6cGEcXHrZLo,1748
4
+ instant_python/project_cli.py,sha256=aDYZZwpkMFN-J7UEKgvZQ9lXlKtr5e3ttdNzEtGslbw,3446
5
5
  instant_python/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  instant_python/installer/dependency_manager.py,sha256=0pVTtNPGUKFvLeFjiVlegIDU7SjC1urlTSSR7pvzIkU,384
7
7
  instant_python/installer/dependency_manager_factory.py,sha256=uAwpTK9ilCkaZ50d4hePWNndpK0fOHqEClRQmViJjnY,541
@@ -11,19 +11,21 @@ instant_python/installer/managers.py,sha256=HNDazLb2iNgP1xdYvPFfMmVE9Ww_v9a0_CWT
11
11
  instant_python/installer/pdm_manager.py,sha256=z49NAurrzgByMbB560xeAMH-5a4H1jkXi9AvtAQ8G4E,2756
12
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
+ instant_python/project_generator/boilerplate_file.py,sha256=7APVzUdgieRopJwybTkkycXRRAkr95Q3GmX5M0IrO3c,754
14
15
  instant_python/project_generator/custom_template_manager.py,sha256=ApOBNU9hdOiQeaJhbr_RMdjm3B-vVLaXyvgj6XtbkZY,628
15
- instant_python/project_generator/default_template_manager.py,sha256=UdhB7pTZLbShSOAEHWl-l35dLfV0XU4fF69HMBfMw3U,1802
16
16
  instant_python/project_generator/directory.py,sha256=nJoxOd2RQUJoNkML3Dh7JqhR_xp0czasBXRE2WvW-kQ,747
17
- instant_python/project_generator/file.py,sha256=UVB8oNd2_00wd7t_3aDxQchwq8bDvCM_NfcfCS6ocmo,749
18
- instant_python/project_generator/folder_tree.py,sha256=ULAY3M2d33s9O0JbWoaO1SP8n5lRG-XbdC8NBYf-Z2U,1509
17
+ instant_python/project_generator/file.py,sha256=CV8utHrK3OBWr-HjVlSYvelcvfcCRVF0cHpd_qAm0-g,484
18
+ instant_python/project_generator/folder_tree.py,sha256=ophcp4FuXz4QBVKvEvq6V0_bzwMHFdfnzNB2UPdSkj4,1752
19
19
  instant_python/project_generator/jinja_custom_filters.py,sha256=uXHmcTvhcVYJeG5EhTFfacIFs7Pu9F5YOPo2144LYpM,638
20
- instant_python/project_generator/node.py,sha256=dgPFwTKCiGEV6K6Y4nE0zlz0cgJ-yJafszoY-xKdbts,278
21
- instant_python/project_generator/project_generator.py,sha256=49MoeVe2eNegB5hLFjD7xtRIXpUhi5ioKq9VrBtm30o,984
20
+ instant_python/project_generator/jinja_environment.py,sha256=wEERsimWbG0XLxBNhkFN9Y2plX8SzTpOewyJRsBLSa4,595
21
+ instant_python/project_generator/jinja_template_manager.py,sha256=rfQXnFmtK1zCxD8RJ22NL-cojCjcJSUhrOOjAT3sLb4,1472
22
+ instant_python/project_generator/node.py,sha256=nmT09M8vPPbgDUTpykU_bPY_1w0IT9oVFoKPCfi64Yk,315
23
+ instant_python/project_generator/project_generator.py,sha256=B6j9Pp6hz1qsn2th0Ou0hEjDTakUBXDklx4MvfXkwls,982
22
24
  instant_python/project_generator/template_manager.py,sha256=LhN56T04QlRZv0DXUIl9yx3y1OFq_S9Zq8efxgNHSVI,175
23
25
  instant_python/question_prompter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- instant_python/question_prompter/question_wizard.py,sha256=sRxECDBgHhDSWch8zan1Pd_XuLVdoGcaSB5SWXfSBso,476
26
+ instant_python/question_prompter/question_wizard.py,sha256=32SoH2ADQklU3WkLorn3NtztyaHACcCIfU2zEsMQKFc,512
27
+ instant_python/question_prompter/requirements_configuration.py,sha256=RyUBOOmQZbOnMldg9eVlJpgsanEiZTSMgiOJnt7O-yI,1214
25
28
  instant_python/question_prompter/template_types.py,sha256=HzqlryyB5KRBnCmqnDy-4Z-Kn3aTBC3wlrDWwDLdbXs,147
26
- instant_python/question_prompter/user_requirements.py,sha256=l9q5P_xn4Ii3TtctVG1J8B6J5nNuSynrivPVu6s02QQ,1219
27
29
  instant_python/question_prompter/question/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
30
  instant_python/question_prompter/question/boolean_question.py,sha256=SUWotn15hPP8njqCJ3J1FYBtQ4cQ79e5laB3YObZjo8,430
29
31
  instant_python/question_prompter/question/choice_question.py,sha256=HeiyhihVngEcJmRW784RS1rAG8RaBua52Watb6bpVio,592
@@ -44,12 +46,13 @@ instant_python/templates/boilerplate/.gitignore,sha256=uViK8iDiHZGpnnvM3TpgrDwXl
44
46
  instant_python/templates/boilerplate/.pre-commit-config.yml,sha256=bOJLrQ_0LqFxHDZeJKbs2FDKE2lxnHzWtYM1CgLSDjM,823
45
47
  instant_python/templates/boilerplate/.python-version,sha256=YZMxU5G2EgDP3ZURqLP5qFjhq7-fqpQX7IUL9stt8_0,20
46
48
  instant_python/templates/boilerplate/LICENSE,sha256=rQvLuj_wsQA7R72dWoE9dgrJbeOlcFTzgJP6i4irhzM,47356
49
+ instant_python/templates/boilerplate/README.md,sha256=N_UvKMIcfQSK7dQOk3xgqfY95iedSCMQXo7_n9PEnoQ,56
47
50
  instant_python/templates/boilerplate/mypy.ini,sha256=RWGydwoR9HwmqIT3wzAqaQQ4qo_m2T3cwFIX6MmJ3YE,865
48
51
  instant_python/templates/boilerplate/pyproject.toml,sha256=zkfECqqNetKszcY9azjjFKuzpgpO5PATTQXB4cRoHMc,736
49
52
  instant_python/templates/boilerplate/pytest.ini,sha256=UKGay9Gune7ft1FAy1O4VyVmnuLunQW5YeZfcuOKTZg,249
50
53
  instant_python/templates/boilerplate/random_generator.py,sha256=WHyhk9xfRsziGH1PtVFSZavQGy5LzJkWLN8wwyKz3As,134
51
54
  instant_python/templates/boilerplate/event_bus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- instant_python/templates/boilerplate/event_bus/aggregate_root.py,sha256=JgmBSYMXfh6P3twKW_HznYq8_kNHupmgPoRHSmlSA2Q,571
55
+ instant_python/templates/boilerplate/event_bus/aggregate_root.py,sha256=Rmq_ZJ3DPOV0XdOhbGWKxssA-73_iS6weGiKO1B1740,570
53
56
  instant_python/templates/boilerplate/event_bus/domain_event.py,sha256=aD4UGS4HWQwQvyfdKLpWN1emDfHUS6NQbYlGXRHVDas,312
54
57
  instant_python/templates/boilerplate/event_bus/domain_event_json_deserializer.py,sha256=gls8ZNGlFzFfd9ze8a9lbPgYARPJkUjsTHqGB5QRpZk,1052
55
58
  instant_python/templates/boilerplate/event_bus/domain_event_json_serializer.py,sha256=BP7sJ05uec-ZVhuOpBrpTFkgMAt0M134jBCSTRlzYbQ,493
@@ -108,42 +111,43 @@ instant_python/templates/boilerplate/scripts/pre-push,sha256=2UpPIkPTnwO8UusCAij
108
111
  instant_python/templates/boilerplate/scripts/remove_dependency.sh,sha256=1NRVBCCCQZeAX7YYKzQ0AEpq_OlGt-S_6selTePVUJw,707
109
112
  instant_python/templates/boilerplate/scripts/unit.sh,sha256=XTlSZOYixobNqcdgtNVbhiLA9esodg8kMljEKCcZFNo,1107
110
113
  instant_python/templates/boilerplate/value_object/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
- instant_python/templates/boilerplate/value_object/int_value_object.py,sha256=BpIEEfevEmJ8HSV8MVFqpJV0KLwi827P7gEg-QpW36o,449
114
+ instant_python/templates/boilerplate/value_object/int_value_object.py,sha256=Bwk8KcooTy0InEUOulD7gxADhNjoO_cQ7oFOEjNVjao,547
112
115
  instant_python/templates/boilerplate/value_object/string_value_object.py,sha256=eGrqGH88kZMZ2Kfo4jbsHro9Lr9amPPCgX_XvU6ClEE,736
113
116
  instant_python/templates/boilerplate/value_object/uuid.py,sha256=nCAqo43IgdvCUNBJeXxty_B15wZkpfn0RX4d4BH2XRI,555
114
117
  instant_python/templates/boilerplate/value_object/value_object.py,sha256=7EUE9fiTpdSgQ3FrgL7KiGZUGBKczJ3HquDqocEmVog,1007
115
- instant_python/templates/project_structure/alembic_migrator.yml.j2,sha256=dYkBJj1O2_bTjw6einWkijjPV-xRUpdUkGa0ZHgTP5E,66
116
- instant_python/templates/project_structure/async_alembic.yml.j2,sha256=YQMMZxueHFQPF9v0AQ1yjFOyvXHhsyI8gHd2AilG8dw,467
117
- instant_python/templates/project_structure/async_sqlalchemy.yml.j2,sha256=zpVnHtNOSWQqVP5lejRciHakCEMIppjv1EKqMA3bDY4,423
118
- instant_python/templates/project_structure/event_bus_domain.yml.j2,sha256=0rXXuhyBWZUm_RIHq0yFonkbpdvXGB5QEkLoQkDX9bs,685
119
- instant_python/templates/project_structure/event_bus_infra.yml.j2,sha256=AQ8A525lZvusW5NiQew4eCzASAR2e65Bc5EUz3ENZeA,875
120
- instant_python/templates/project_structure/fastapi_app.yml.j2,sha256=k92dTeV2RpTDbhy_jxg6q0yXKhQHV9T-Nu1Fl7X6oNQ,193
121
- instant_python/templates/project_structure/fastapi_infra.yml.j2,sha256=fPreVwwnWUPTFhw2iWBO9TUYP5RZaAspIT6EMMV7je8,199
122
- instant_python/templates/project_structure/github_action.yml.j2,sha256=mtnmpgA9twPFnKJT4ijBMLqiA2NnL_Lp-l70Wt95V0E,407
123
- instant_python/templates/project_structure/gitignore.yml.j2,sha256=pkN9Rugy22prf4L4cbVqbTWkllEn7dycg--GlIvQGeU,31
124
- instant_python/templates/project_structure/license.yml.j2,sha256=-20PZu0sTlN3DzwtkBTC_tCc0SM8IoqmKW2X9029ZaE,28
125
- instant_python/templates/project_structure/logger.yml.j2,sha256=_d_Ps5gedBH9_LTOrTEWFEUtlysXKJSn1D2M9_tRLi8,192
118
+ instant_python/templates/project_structure/alembic_migrator.yml.j2,sha256=7xCrOaZMHXuCz2QAGnM8xB9mgzdR9IqEFWV6Iyc3DY4,78
119
+ instant_python/templates/project_structure/async_alembic.yml.j2,sha256=7OdjRGXHFHc56LqtC_NxsNX23kq3Pgsoh0u4QKopJjI,527
120
+ instant_python/templates/project_structure/async_sqlalchemy.yml.j2,sha256=XaOKwRBZOyR1JOtY53KB8WizzESF5VmaTPfk36vft1s,459
121
+ instant_python/templates/project_structure/event_bus_domain.yml.j2,sha256=kqnY9EZaZ2O3HWaQb16jISpR287tBAKxyiq6IaPt1PA,769
122
+ instant_python/templates/project_structure/event_bus_infra.yml.j2,sha256=pCKtjiIfi6VSBdM7n1QL7lQgM-lRqm2_7eOXYOstwaQ,971
123
+ instant_python/templates/project_structure/fastapi_app.yml.j2,sha256=e3n1OXSea7LkOPlRCIbKwzyT6n-Y_YhSXwF1-TWX34Y,217
124
+ instant_python/templates/project_structure/fastapi_infra.yml.j2,sha256=VJg6fLYL20iYugnE-Q4QpZg7TfM62zKdkuAxE_gWWmI,223
125
+ instant_python/templates/project_structure/github_action.yml.j2,sha256=3QLShPuxi8TyUgUW52_41faqIaspNR5Ak12L8DZy1AU,431
126
+ instant_python/templates/project_structure/gitignore.yml.j2,sha256=Ex3A7rvCvuIqxTVdeHxM3DPyTl73AcrHyiceHOIzFuw,43
127
+ instant_python/templates/project_structure/license.yml.j2,sha256=0h2OAyK4-HKWsM6Gllkh1wGRXmEl2mRJLlKgOPlyCY0,40
128
+ instant_python/templates/project_structure/logger.yml.j2,sha256=RxAYOeHK7qhBR1uxXtdPvt12v7rOwaNTWfhXw8ogxUs,216
126
129
  instant_python/templates/project_structure/macros.j2,sha256=oAvJhQDJsk6yLm1r6P_kUdKAuLpOmuqmMauJdhKYv0U,173
127
- instant_python/templates/project_structure/makefile.yml.j2,sha256=aGFXuIKIaQf3wZa08raI7f7VFdktRU72Ub36JUnmaX8,941
128
- instant_python/templates/project_structure/mypy.yml.j2,sha256=oadR_NzjdPgdf9VsQafydkHLWe9nBxfinEe0nDFhpIU,43
129
- instant_python/templates/project_structure/pre_commit.yml.j2,sha256=RcFG9npylIopzfr2dOt4qhGH6Jd24NjmSZIw3_TPrao,56
130
- instant_python/templates/project_structure/pyproject.yml.j2,sha256=LHXXK26QpJzUtoicF_9PP_nWRMjmmdEbQtUOpnRI0LQ,49
131
- instant_python/templates/project_structure/pytest.yml.j2,sha256=A8gnXLlVv4mNj1HOAWJNaJlt0HN6Y3yYGFVBObRnlz8,45
132
- instant_python/templates/project_structure/python_version.yml.j2,sha256=eo400SNFAw7Qa6-18XyZyA7yX2kzvuUVBR2H33Vfylc,36
133
- instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2,sha256=bjfiKDNxi558fPzwF6RaZq1uoCMkKWJLB2L53acmFuY,431
134
- instant_python/templates/project_structure/value_objects.yml.j2,sha256=cPC-DHo8aaRwY8iVcFjxhto1HLVk9Kbybr_1r3BIr4Y,855
135
- instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2,sha256=gnN6jkyRhuNxC04X7EGa0TBYwJGUwX2Jv3OE3YLPKSc,1237
130
+ instant_python/templates/project_structure/makefile.yml.j2,sha256=uPowe64k1cTf2hyIk-GidVm98rgn03oU37ScRIMiBrY,1061
131
+ instant_python/templates/project_structure/mypy.yml.j2,sha256=Th3HkMdEu2xgORRhMV5QoqkilF90xfKb8JAEOXmEGUc,55
132
+ instant_python/templates/project_structure/pre_commit.yml.j2,sha256=ZPHevC5MHwZTJymKXKFMnDPCJVR_K_V3-tIq-qyEKeY,68
133
+ instant_python/templates/project_structure/pyproject.yml.j2,sha256=QC_Q5Y1MfMen0fbVfllCDpX70idbNIR4gpL1gIgeQs0,61
134
+ instant_python/templates/project_structure/pytest.yml.j2,sha256=OePEtuRCiktOKWwMMGR5FVA4eU9BuspxOhIVDy0HToI,57
135
+ instant_python/templates/project_structure/python_version.yml.j2,sha256=zlkshfPrAOpenxx2D4DxRMrDGlPa5Lth9aIwpWaciy0,48
136
+ instant_python/templates/project_structure/readme.yml.j2,sha256=Km1zSVKfGwx7GHn0CMMAKQieCO089wKb8QoPVUnoDUU,56
137
+ instant_python/templates/project_structure/synchronous_sqlalchemy.yml.j2,sha256=mC7WBchO0bzHcGkTw0k4woDstUvoQaJKlrCW82A96o8,467
138
+ instant_python/templates/project_structure/value_objects.yml.j2,sha256=X5AyyZoRllCYdvRUaXSYlcZk_EQg2OyfdCS8pejjFpc,963
139
+ instant_python/templates/project_structure/clean_architecture/main_structure.yml.j2,sha256=MYNr83LppMnmynSWO8AOGEEBwnJlw1DXaSH1AVP_7GU,1309
136
140
  instant_python/templates/project_structure/clean_architecture/source.yml.j2,sha256=_iJjzVatJboCgJwzDRjPqyl6LXiVCZW2jE_xLr2_-HQ,2200
137
- instant_python/templates/project_structure/clean_architecture/test.yml.j2,sha256=-s_V1mPa_muydoUo2sZW70fUB4Z3O_YfwXl-A5V3ZH4,547
141
+ instant_python/templates/project_structure/clean_architecture/test.yml.j2,sha256=xDC57oL6bCZUVIBjBDBL-aNBUfx0jL2bPZX2bfnwKFQ,571
138
142
  instant_python/templates/project_structure/domain_driven_design/bounded_context.yml.j2,sha256=P1hOzOlWm-8ZEGQP-fV-5xk2CfTC0j2BizSStKCvETw,453
139
- instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2,sha256=lmKOIJv6GT0KjVZ9yiz7pCLBPY-Z9inwr5T4xxbFuus,1241
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
142
- instant_python/templates/project_structure/standard_project/main_structure.yml.j2,sha256=SG0R4_DPIkb8CCyPfFw7xoId7fmRq_lm9DTaL6MJK18,1234
143
+ instant_python/templates/project_structure/domain_driven_design/main_structure.yml.j2,sha256=fHZ5BdVbDkpxInGydzhYrTy24v-5jqeA6UhVEhTVYew,1313
144
+ instant_python/templates/project_structure/domain_driven_design/source.yml.j2,sha256=NadiPEkIjMlKnGAVHCiPYH3DHxnuJLJ7DD5xoL1e-K0,2638
145
+ instant_python/templates/project_structure/domain_driven_design/test.yml.j2,sha256=OPA0AF4IRPswk-eJ-m5ZDTFmIDu6gN2MvBErMYqI264,823
146
+ instant_python/templates/project_structure/standard_project/main_structure.yml.j2,sha256=Tger29wWSQRqJ4NF8aIq5a3cb1sIm8CL5fyTAv-ZcbU,1306
143
147
  instant_python/templates/project_structure/standard_project/source.yml.j2,sha256=tqD9AsAAzPhulWmRrUW7k3F0eguhAKvNc_p5faQCfRg,1586
144
- instant_python/templates/project_structure/standard_project/test.yml.j2,sha256=OvSSn9tQcK3ctTXaOIr_bL6QdgUNrcs518LmnStqxaE,348
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,,
148
+ instant_python/templates/project_structure/standard_project/test.yml.j2,sha256=wadDyJsuDlUecFPNu4RU2v34gOAlKFCQSL5z5U8rgdU,372
149
+ instant_python-0.4.0.dist-info/METADATA,sha256=tiopciQ2xxGGgywmembbt_D8PLjldw60h_FCkEPpHl8,16219
150
+ instant_python-0.4.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
151
+ instant_python-0.4.0.dist-info/entry_points.txt,sha256=EdBTj3b3N9Pa4oNzPLPivE_AnMcQIFsmRC3RsSkoLLA,47
152
+ instant_python-0.4.0.dist-info/licenses/LICENSE,sha256=kf7wA-1IsqXkzXjlsG95sdQJtsqUON_lNXombfPlklo,11353
153
+ instant_python-0.4.0.dist-info/RECORD,,