stackforge-cli 0.1.0__tar.gz → 0.1.1__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 (22) hide show
  1. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/PKG-INFO +2 -1
  2. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/pyproject.toml +4 -1
  3. stackforge_cli-0.1.1/src/stackforge/scaffold.py +83 -0
  4. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge_cli.egg-info/PKG-INFO +2 -1
  5. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge_cli.egg-info/SOURCES.txt +1 -0
  6. stackforge_cli-0.1.1/src/stackforge_cli.egg-info/requires.txt +1 -0
  7. stackforge_cli-0.1.0/src/stackforge/scaffold.py +0 -82
  8. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/README.md +0 -0
  9. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/setup.cfg +0 -0
  10. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/__init__.py +0 -0
  11. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/__init__.py +0 -0
  12. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/api_generator.py +0 -0
  13. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/config_generator.py +0 -0
  14. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/csproj_generator.py +0 -0
  15. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/docker_generator.py +0 -0
  16. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/git_generator.py +0 -0
  17. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/layers_generator.py +0 -0
  18. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/program_generator.py +0 -0
  19. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge/engines/dotnet/scaffolder.py +0 -0
  20. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge_cli.egg-info/dependency_links.txt +0 -0
  21. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge_cli.egg-info/entry_points.txt +0 -0
  22. {stackforge_cli-0.1.0 → stackforge_cli-0.1.1}/src/stackforge_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackforge-cli
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: A CLI scaffolder for .NET Clean Architecture projects
5
5
  License: MIT
6
6
  Keywords: scaffolder,dotnet,clean-architecture,cli
@@ -10,6 +10,7 @@ Classifier: Operating System :: OS Independent
10
10
  Classifier: Environment :: Console
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
+ Requires-Dist: colorama>=0.4.6
13
14
 
14
15
  # StackForge
15
16
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "stackforge-cli"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "A CLI scaffolder for .NET Clean Architecture projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -16,6 +16,9 @@ classifiers = [
16
16
  "Operating System :: OS Independent",
17
17
  "Environment :: Console",
18
18
  ]
19
+ dependencies = [
20
+ "colorama>=0.4.6",
21
+ ]
19
22
 
20
23
  [project.scripts]
21
24
  stackforge = "stackforge.scaffold:main"
@@ -0,0 +1,83 @@
1
+ from pathlib import Path
2
+ from stackforge.engines.dotnet.scaffolder import scaffold_folders
3
+ from colorama import init, Fore, Style
4
+ import re
5
+
6
+ init(autoreset=True)
7
+
8
+ def is_valid_project_name(name: str) -> bool:
9
+ return bool(re.match(r'^[A-Za-z][A-Za-z0-9]*$', name))
10
+
11
+
12
+ def select_framework() -> str:
13
+ print(f" {Fore.CYAN}Select a framework:{Style.RESET_ALL}\n")
14
+ print(f" {Fore.GREEN}1.{Style.RESET_ALL} .NET Clean Architecture (CQRS)")
15
+ print(f" {Fore.YELLOW}2.{Style.RESET_ALL} Django [coming soon]")
16
+ print(f" {Fore.YELLOW}3.{Style.RESET_ALL} FastAPI [coming soon]")
17
+ print(f" {Fore.YELLOW}4.{Style.RESET_ALL} Flask [coming soon]")
18
+ print(f" {Fore.RED}5.{Style.RESET_ALL} exit")
19
+
20
+ choice = input(f"\n {Fore.CYAN}Choice [n]:{Style.RESET_ALL} ").strip() or "1"
21
+ return choice
22
+
23
+
24
+ def main():
25
+ print(Fore.CYAN + r"""
26
+ _____ _ _ ______
27
+ / ____| | | | | ____|
28
+ | (___ | |_ __ _ ___| | _| |__ ___ _ __ __ _ ___
29
+ \___ \| __/ _` |/ __| |/ / __/ _ \| '__/ _` |/ _ \
30
+ ____) | || (_| | (__| <| | | (_) | | | (_| | __/
31
+ |_____/ \__\__,_|\___|_|\_\_| \___/|_| \__, |\___|
32
+ __/ |
33
+ |___/
34
+ """ + Style.RESET_ALL + f" {Fore.WHITE}.NET Clean Architecture Scaffolder{Style.RESET_ALL}\n")
35
+
36
+ while True:
37
+ framework = select_framework()
38
+
39
+ if framework == "5":
40
+ print(f"\n {Fore.YELLOW}Exiting...{Style.RESET_ALL}")
41
+ break
42
+
43
+ if framework != "1":
44
+ print(f"\n {Fore.YELLOW}[!] This framework is under development. Stay tuned!{Style.RESET_ALL}\n")
45
+ continue
46
+
47
+ project_name = input(f"\n {Fore.CYAN}Enter project name (PascalCase, no spaces):{Style.RESET_ALL} ").strip()
48
+
49
+ if not project_name:
50
+ print(f" {Fore.RED}[!] Project name cannot be empty.{Style.RESET_ALL}\n")
51
+ continue
52
+
53
+ if not is_valid_project_name(project_name):
54
+ print(f" {Fore.RED}[!] Project name must start with a letter and contain only letters and numbers.")
55
+ print(f" Example: RaiderXpress, MyApi, StackForge{Style.RESET_ALL}\n")
56
+ continue
57
+
58
+ base_path = Path.home() / "stackforge" / project_name
59
+
60
+ if base_path.exists():
61
+ print(f"\n {Fore.RED}[!] Project '{project_name}' already exists in the stackforge workspace.")
62
+ print(f" Path: {base_path}{Style.RESET_ALL}")
63
+ print(" Choose a different project name or delete the existing one.\n")
64
+ continue
65
+
66
+ base_path.mkdir(parents=True, exist_ok=True)
67
+ scaffold_folders(base_path, project_name)
68
+
69
+ print(f"""
70
+ {Fore.GREEN}✔ Project '{project_name}' created successfully!
71
+ ✔ Location: {base_path}{Style.RESET_ALL}
72
+
73
+ {Fore.CYAN}Next steps:{Style.RESET_ALL}
74
+ 1. Open the project in Visual Studio or VS Code
75
+ 2. Run: docker-compose up --build
76
+ 3. Visit: http://localhost:5000/swagger
77
+
78
+ Press Ctrl+C to exit or continue to scaffold another project.
79
+ """)
80
+
81
+
82
+ if __name__ == "__main__":
83
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackforge-cli
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: A CLI scaffolder for .NET Clean Architecture projects
5
5
  License: MIT
6
6
  Keywords: scaffolder,dotnet,clean-architecture,cli
@@ -10,6 +10,7 @@ Classifier: Operating System :: OS Independent
10
10
  Classifier: Environment :: Console
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
+ Requires-Dist: colorama>=0.4.6
13
14
 
14
15
  # StackForge
15
16
 
@@ -15,4 +15,5 @@ src/stackforge_cli.egg-info/PKG-INFO
15
15
  src/stackforge_cli.egg-info/SOURCES.txt
16
16
  src/stackforge_cli.egg-info/dependency_links.txt
17
17
  src/stackforge_cli.egg-info/entry_points.txt
18
+ src/stackforge_cli.egg-info/requires.txt
18
19
  src/stackforge_cli.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ colorama>=0.4.6
@@ -1,82 +0,0 @@
1
- from pathlib import Path
2
- from stackforge.engines.dotnet.scaffolder import scaffold_folders
3
- import re
4
-
5
-
6
- def is_valid_project_name(name: str) -> bool:
7
- return bool(re.match(r'^[A-Za-z][A-Za-z0-9]*$', name))
8
-
9
-
10
- def select_framework() -> str:
11
- print(" Select a framework:\n")
12
- print(" 1. .NET Clean Architecture (CQRS)")
13
- print(" 2. Django [coming soon]")
14
- print(" 3. FastAPI [coming soon]")
15
- print(" 4. Flask [coming soon]")
16
- print(" 5. exit")
17
-
18
- choice = input("\n Choice [n]: ").strip() or "1"
19
- return choice
20
-
21
-
22
- def main():
23
- print(r"""
24
- _____ _ _ ______
25
- / ____| | | | | ____|
26
- | (___ | |_ __ _ ___| | _| |__ ___ _ __ __ _ ___
27
- \___ \| __/ _` |/ __| |/ / __/ _ \| '__/ _` |/ _ \
28
- ____) | || (_| | (__| <| | | (_) | | | (_| | __/
29
- |_____/ \__\__,_|\___|_|\_\_| \___/|_| \__, |\___|
30
- __/ |
31
- |___/
32
- .NET Clean Architecture Scaffolder
33
- """)
34
-
35
- while True:
36
- framework = select_framework()
37
-
38
- if framework == "5":
39
- print("\n Exiting...")
40
- break
41
-
42
- if framework != "1":
43
- print("\n [!] This framework is under development. Stay tuned!\n")
44
- continue
45
-
46
- project_name = input("\n Enter project name (PascalCase, no spaces): ").strip()
47
-
48
- if not project_name:
49
- print(" [!] Project name cannot be empty.\n")
50
- continue
51
-
52
- if not is_valid_project_name(project_name):
53
- print(" [!] Project name must start with a letter and contain only letters and numbers.")
54
- print(" Example: RaiderXpress, MyApi, StackForge\n")
55
- continue
56
-
57
- base_path = Path.home() / "stackforge" / project_name
58
-
59
- if base_path.exists():
60
- print(f"\n [!] Project '{project_name}' already exists in the stackforge workspace.")
61
- print(f" Path: {base_path}")
62
- print(" Choose a different project name or delete the existing one.\n")
63
- continue
64
-
65
- base_path.mkdir(parents=True, exist_ok=True)
66
- scaffold_folders(base_path, project_name)
67
-
68
- print(f"""
69
- ✔ Project '{project_name}' created successfully!
70
- ✔ Location: {base_path}
71
-
72
- Next steps:
73
- 1. Open the project in Visual Studio or VS Code
74
- 2. Run: docker-compose up --build
75
- 3. Visit: http://localhost:5000/swagger
76
-
77
- Press Ctrl+C to exit or continue to scaffold another project.
78
- """)
79
-
80
-
81
- if __name__ == "__main__":
82
- main()
File without changes
File without changes