ntc-dev-kit 1.0.2__tar.gz → 1.0.5__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 (161) hide show
  1. {ntc_dev_kit-1.0.2/ntc_dev_kit.egg-info → ntc_dev_kit-1.0.5}/PKG-INFO +2 -1
  2. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/cli_enhanced.py +156 -29
  3. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/composer/main.py +29 -6
  4. ntc_dev_kit-1.0.5/ntc-main/main.py +56 -0
  5. ntc_dev_kit-1.0.5/ntc-main/ui/__init__.py +1 -0
  6. ntc_dev_kit-1.0.5/ntc-main/ui/app.py +179 -0
  7. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5/ntc_dev_kit.egg-info}/PKG-INFO +2 -1
  8. ntc_dev_kit-1.0.5/ntc_dev_kit.egg-info/SOURCES.txt +69 -0
  9. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/ntc_dev_kit.egg-info/requires.txt +1 -0
  10. ntc_dev_kit-1.0.5/ntc_dev_kit.egg-info/top_level.txt +1 -0
  11. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/pyproject.toml +2 -1
  12. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/requirements.txt +1 -0
  13. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/setup.py +2 -1
  14. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/drf_structure.md +0 -83
  15. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/structure.json +0 -126
  16. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/.entry/start_core_backend.sh +0 -37
  17. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/.entry/start_tasks_backend.sh +0 -30
  18. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/CLAUDE.md +0 -194
  19. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/README.md +0 -117
  20. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/config/http.conf +0 -33
  21. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/django_project/django_settings.txt +0 -322
  22. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/docker/docker-compose.yml +0 -11
  23. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/knowledge/knowledge_description.md +0 -201
  24. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/knowledge/knowledge_design_pattern.md +0 -722
  25. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/knowledge/knowledge_structure.md +0 -151
  26. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/root/README.md +0 -307
  27. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/root/django_env.txt +0 -98
  28. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/root/django_requirements.txt +0 -24
  29. ntc_dev_kit-1.0.2/ntc/templates/drf_structure/templates/root/gitignore.txt +0 -6
  30. ntc_dev_kit-1.0.2/ntc/templates/flutter/.gitignore +0 -44
  31. ntc_dev_kit-1.0.2/ntc/templates/flutter/.knowledge/knowledge_description.md +0 -215
  32. ntc_dev_kit-1.0.2/ntc/templates/flutter/.knowledge/knowledge_design_pattern.md +0 -310
  33. ntc_dev_kit-1.0.2/ntc/templates/flutter/.knowledge/knowledge_structure.md +0 -83
  34. ntc_dev_kit-1.0.2/ntc/templates/flutter/CLAUDE.md +0 -190
  35. ntc_dev_kit-1.0.2/ntc/templates/flutter/analysis_options.yaml +0 -9
  36. ntc_dev_kit-1.0.2/ntc/templates/flutter/pubspec.yaml +0 -65
  37. ntc_dev_kit-1.0.2/ntc/templates/flutter/structure.json +0 -51
  38. ntc_dev_kit-1.0.2/ntc/templates/nextjs/.env.example +0 -10
  39. ntc_dev_kit-1.0.2/ntc/templates/nextjs/.gitignore +0 -36
  40. ntc_dev_kit-1.0.2/ntc/templates/nextjs/CLAUDE.md +0 -181
  41. ntc_dev_kit-1.0.2/ntc/templates/nextjs/README.md +0 -94
  42. ntc_dev_kit-1.0.2/ntc/templates/nextjs/knowledge/knowledge_description.md +0 -208
  43. ntc_dev_kit-1.0.2/ntc/templates/nextjs/knowledge/knowledge_design_pattern.md +0 -460
  44. ntc_dev_kit-1.0.2/ntc/templates/nextjs/knowledge/knowledge_structure.md +0 -75
  45. ntc_dev_kit-1.0.2/ntc/templates/nextjs/package.json +0 -25
  46. ntc_dev_kit-1.0.2/ntc/templates/nextjs/src/app/globals.css +0 -26
  47. ntc_dev_kit-1.0.2/ntc/templates/nextjs/src/app/layout.tsx +0 -59
  48. ntc_dev_kit-1.0.2/ntc/templates/nextjs/src/app/page.tsx +0 -21
  49. ntc_dev_kit-1.0.2/ntc/templates/nextjs/src/components/Header.tsx +0 -16
  50. ntc_dev_kit-1.0.2/ntc/templates/nextjs/src/services/api.ts +0 -81
  51. ntc_dev_kit-1.0.2/ntc/templates/nextjs/src/utils/constants.ts +0 -1
  52. ntc_dev_kit-1.0.2/ntc/templates/nextjs/structure.json +0 -32
  53. ntc_dev_kit-1.0.2/ntc/templates/nextjs/tsconfig.json +0 -27
  54. ntc_dev_kit-1.0.2/ntc/templates/react_admin/.env.example +0 -1
  55. ntc_dev_kit-1.0.2/ntc/templates/react_admin/.gitignore +0 -10
  56. ntc_dev_kit-1.0.2/ntc/templates/react_admin/CLAUDE.md +0 -210
  57. ntc_dev_kit-1.0.2/ntc/templates/react_admin/README.md +0 -72
  58. ntc_dev_kit-1.0.2/ntc/templates/react_admin/index.html +0 -13
  59. ntc_dev_kit-1.0.2/ntc/templates/react_admin/knowledge/knowledge_description.md +0 -202
  60. ntc_dev_kit-1.0.2/ntc/templates/react_admin/knowledge/knowledge_design_pattern.md +0 -448
  61. ntc_dev_kit-1.0.2/ntc/templates/react_admin/knowledge/knowledge_structure.md +0 -97
  62. ntc_dev_kit-1.0.2/ntc/templates/react_admin/package.json +0 -35
  63. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/App.tsx +0 -60
  64. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/components/ProtectedRoute.tsx +0 -16
  65. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/components/Sidebar.tsx +0 -90
  66. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/components/TopNav.tsx +0 -44
  67. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/context/AuthContext.tsx +0 -107
  68. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/context/ThemeContext.tsx +0 -34
  69. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/context/WorkspaceContext.tsx +0 -28
  70. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/hooks/useApi.ts +0 -39
  71. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/index.css +0 -34
  72. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/layouts/AuthLayout.tsx +0 -23
  73. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/layouts/DashboardLayout.tsx +0 -24
  74. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/main.tsx +0 -5
  75. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/pages/DashboardPage.tsx +0 -10
  76. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/pages/auth/LoginPage.tsx +0 -79
  77. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/pages/auth/RegisterPage.tsx +0 -93
  78. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/services/api.service.ts +0 -44
  79. ntc_dev_kit-1.0.2/ntc/templates/react_admin/src/services/base.service.ts +0 -193
  80. ntc_dev_kit-1.0.2/ntc/templates/react_admin/structure.json +0 -52
  81. ntc_dev_kit-1.0.2/ntc/templates/react_admin/tsconfig.app.json +0 -25
  82. ntc_dev_kit-1.0.2/ntc/templates/react_admin/tsconfig.json +0 -7
  83. ntc_dev_kit-1.0.2/ntc/templates/react_admin/tsconfig.node.json +0 -19
  84. ntc_dev_kit-1.0.2/ntc/templates/react_admin/vite.config.ts +0 -13
  85. ntc_dev_kit-1.0.2/ntc/templates/react_structure/CLAUDE.md +0 -176
  86. ntc_dev_kit-1.0.2/ntc/templates/react_structure/index.css +0 -21
  87. ntc_dev_kit-1.0.2/ntc/templates/react_structure/index.html +0 -13
  88. ntc_dev_kit-1.0.2/ntc/templates/react_structure/knowledge/knowledge_description.md +0 -170
  89. ntc_dev_kit-1.0.2/ntc/templates/react_structure/knowledge/knowledge_design_pattern.md +0 -411
  90. ntc_dev_kit-1.0.2/ntc/templates/react_structure/knowledge/knowledge_structure.md +0 -74
  91. ntc_dev_kit-1.0.2/ntc/templates/react_structure/package.json +0 -32
  92. ntc_dev_kit-1.0.2/ntc/templates/react_structure/src/App.tsx +0 -63
  93. ntc_dev_kit-1.0.2/ntc/templates/react_structure/src/components/Header.tsx +0 -51
  94. ntc_dev_kit-1.0.2/ntc/templates/react_structure/src/main.tsx +0 -5
  95. ntc_dev_kit-1.0.2/ntc/templates/react_structure/src/services/api.ts +0 -90
  96. ntc_dev_kit-1.0.2/ntc/templates/react_structure/src/utils/constants.ts +0 -1
  97. ntc_dev_kit-1.0.2/ntc/templates/react_structure/structure.json +0 -65
  98. ntc_dev_kit-1.0.2/ntc/templates/react_structure/tsconfig.app.json +0 -25
  99. ntc_dev_kit-1.0.2/ntc/templates/react_structure/tsconfig.json +0 -7
  100. ntc_dev_kit-1.0.2/ntc/templates/react_structure/tsconfig.node.json +0 -19
  101. ntc_dev_kit-1.0.2/ntc/templates/react_structure/vite.config.ts +0 -12
  102. ntc_dev_kit-1.0.2/ntc_dev_kit.egg-info/SOURCES.txt +0 -154
  103. ntc_dev_kit-1.0.2/ntc_dev_kit.egg-info/top_level.txt +0 -1
  104. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/LICENSE +0 -0
  105. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/MANIFEST.in +0 -0
  106. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/README.md +0 -0
  107. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/__init__.py +0 -0
  108. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/app_creator.py +0 -0
  109. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/cli.py +0 -0
  110. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/composer/__init__.py +0 -0
  111. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/deployment/__init__.py +0 -0
  112. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/__init__.py +0 -0
  113. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/__init__.py +0 -0
  114. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/admin.py +0 -0
  115. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/apps.py +0 -0
  116. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/models.py +0 -0
  117. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/serializers.py +0 -0
  118. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/urls.py +0 -0
  119. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/auth_app/views.py +0 -0
  120. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/__init__.py +0 -0
  121. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/main.py +0 -0
  122. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/app_admin.py +0 -0
  123. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/app_apps.py +0 -0
  124. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/app_models.py +0 -0
  125. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/app_urls.py +0 -0
  126. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/app_views.py +0 -0
  127. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/common_apps.py +0 -0
  128. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/apps/common_models.py +0 -0
  129. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/config/gunicorn_config.py +0 -0
  130. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/base_model.py +0 -0
  131. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/formatter.py +0 -0
  132. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/logger.py +0 -0
  133. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/pagination.py +0 -0
  134. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/response_wrapper.py +0 -0
  135. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/services/azure/email/backend.py +0 -0
  136. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/services/azure/email/client.py +0 -0
  137. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/services/azure/email/notifier.py +0 -0
  138. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/core/services/object_storage.py +0 -0
  139. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/asgi.py +0 -0
  140. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/celery.py +0 -0
  141. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/dev_settings.py +0 -0
  142. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/management_command.py +0 -0
  143. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/prod_settings.py +0 -0
  144. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/schema.py +0 -0
  145. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/urls.py +0 -0
  146. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/django_project/wsgi.py +0 -0
  147. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/drf_structure/templates/root/manage.py +0 -0
  148. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/flutter/__init__.py +0 -0
  149. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/flutter/main.py +0 -0
  150. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/nextjs/__init__.py +0 -0
  151. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/nextjs/main.py +0 -0
  152. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/react_admin/__init__.py +0 -0
  153. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/react_admin/main.py +0 -0
  154. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/react_structure/__init__.py +0 -0
  155. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/templates/react_structure/main.py +0 -0
  156. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/utils/__init__.py +0 -0
  157. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/utils/environment.py +0 -0
  158. {ntc_dev_kit-1.0.2/ntc → ntc_dev_kit-1.0.5/ntc-main}/utils/output.py +0 -0
  159. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/ntc_dev_kit.egg-info/dependency_links.txt +0 -0
  160. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/ntc_dev_kit.egg-info/entry_points.txt +0 -0
  161. {ntc_dev_kit-1.0.2 → ntc_dev_kit-1.0.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ntc-dev-kit
3
- Version: 1.0.2
3
+ Version: 1.0.5
4
4
  Summary: Nexent Toolkit Console - A CLI tool for scaffolding Django REST Framework, React, Next.js, and Flutter projects
5
5
  Home-page: https://github.com/nexent/ntc
6
6
  Author: Nexent
@@ -26,6 +26,7 @@ Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: colorama>=0.4.6
28
28
  Requires-Dist: pyyaml>=6.0
29
+ Requires-Dist: textual>=0.47.0
29
30
  Provides-Extra: dev
30
31
  Requires-Dist: build>=1.0; extra == "dev"
31
32
  Requires-Dist: twine>=4.0; extra == "dev"
@@ -1,7 +1,6 @@
1
1
  import argparse
2
2
  import os
3
3
  import sys
4
- import msvcrt
5
4
  import time
6
5
  from colorama import Fore, Back, Style, init
7
6
  from ntc.templates.drf_structure.main import init_drf_project, init_drf_project_in_current_dir
@@ -16,24 +15,8 @@ from ntc.app_creator import create_app_structure
16
15
  init(autoreset=True)
17
16
 
18
17
  def print_banner():
19
- """Display the clean NTC welcome banner."""
20
- print(f"""
21
- {Fore.CYAN}╔{'═' * 75}╗{Style.RESET_ALL}
22
- {Fore.CYAN}║{' ' * 75}║{Style.RESET_ALL}
23
- {Fore.CYAN}║{' ' * 25}{Fore.YELLOW}{Style.BRIGHT}███╗ ██╗████████╗ ██████╗{' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
24
- {Fore.CYAN}║{' ' * 25}{Fore.YELLOW}{Style.BRIGHT}████╗ ██║╚══██╔══╝██╔════╝{' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
25
- {Fore.CYAN}║{' ' * 25}{Fore.YELLOW}{Style.BRIGHT}██╔██╗ ██║ ██║ ██║ {' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
26
- {Fore.CYAN}║{' ' * 25}{Fore.YELLOW}{Style.BRIGHT}██║╚██╗██║ ██║ ██║ {' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
27
- {Fore.CYAN}║{' ' * 25}{Fore.YELLOW}{Style.BRIGHT}██║ ╚████║ ██║ ╚██████╗{' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
28
- {Fore.CYAN}║{' ' * 25}{Fore.YELLOW}{Style.BRIGHT}╚═╝ ╚═══╝ ╚═╝ ╚═════╝{' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
29
- {Fore.CYAN}║{' ' * 75}║{Style.RESET_ALL}
30
- {Fore.CYAN}║{' ' * 24}{Fore.GREEN}{Style.BRIGHT}🚀 NEXENT TOOLKIT CONSOLE 🚀{' ' * 23}{Fore.CYAN}║{Style.RESET_ALL}
31
- {Fore.CYAN}║{' ' * 75}║{Style.RESET_ALL}
32
- {Fore.CYAN}║{' ' * 16}{Fore.WHITE}The ultimate toolkit for API-driven development{' ' * 12}{Fore.CYAN}║{Style.RESET_ALL}
33
- {Fore.CYAN}║{' ' * 75}║{Style.RESET_ALL}
34
- {Fore.CYAN}║{' ' * 10}{Fore.GREEN}Backend:{Fore.WHITE} Django/DRF, Laravel {Fore.BLUE}Frontend:{Fore.WHITE} React, Angular, Vue {Fore.CYAN}{' ' * 5}║{Style.RESET_ALL}
35
- {Fore.CYAN}║{' ' * 75}║{Style.RESET_ALL}
36
- {Fore.CYAN}╚{'═' * 75}╝{Style.RESET_ALL}""")
18
+ """Display minimal welcome banner."""
19
+ print(f"\n{Fore.WHITE}{Style.BRIGHT} ntc{Style.RESET_ALL} {Fore.LIGHTBLACK_EX}— project scaffolding tool{Style.RESET_ALL}")
37
20
  print()
38
21
 
39
22
  def print_welcome_message():
@@ -229,6 +212,7 @@ def animate_dependency_install(requirements_path=None, pip_command=None, env_typ
229
212
  def get_key():
230
213
  """Get a single keypress from user."""
231
214
  if os.name == 'nt': # Windows
215
+ import msvcrt
232
216
  key = msvcrt.getch()
233
217
  if key == b'\xe0': # Arrow keys on Windows
234
218
  key = msvcrt.getch()
@@ -699,9 +683,143 @@ def show_success_screen(project_name, project_type, technology, project_path):
699
683
  print(f"\n{Fore.CYAN}Press any key to exit...{Style.RESET_ALL}")
700
684
  get_key()
701
685
 
686
+ def run_doctor():
687
+ """Check setup and fix common issues like PATH configuration."""
688
+ import shutil
689
+ import site
690
+
691
+ # Nexent brand palette
692
+ DIM = Fore.LIGHTBLACK_EX
693
+ ACCENT = Fore.WHITE
694
+ OK = Fore.GREEN
695
+ WARN = Fore.YELLOW
696
+ ERR = Fore.RED
697
+ BOLD = Style.BRIGHT
698
+ RESET = Style.RESET_ALL
699
+
700
+ def _ok(text):
701
+ print(f" {OK} {text}{RESET}")
702
+
703
+ def _err(text):
704
+ print(f" {ERR} {text}{RESET}")
705
+
706
+ def _warn(text):
707
+ print(f" {WARN} {text}{RESET}")
708
+
709
+ def _dim(text):
710
+ print(f" {DIM}{text}{RESET}")
711
+
712
+ clear_screen()
713
+
714
+ # Minimal Nexent header
715
+ print(f"\n{BOLD}{Fore.WHITE} NEXENT{RESET}")
716
+ print(f" {DIM}Future Awaits{RESET}")
717
+ print(f" {DIM}{'─' * 50}{RESET}")
718
+ print(f" {Fore.WHITE}SETUP DIAGNOSTICS{RESET}\n")
719
+
720
+ issues_found = 0
721
+ issues_fixed = 0
722
+
723
+ # 1. Python
724
+ print(f" {Fore.WHITE}Python{RESET}")
725
+ py_version = sys.version_info
726
+ if py_version >= (3, 10):
727
+ _ok(f"{py_version.major}.{py_version.minor}.{py_version.micro}")
728
+ else:
729
+ _err(f"{py_version.major}.{py_version.minor} — >= 3.10 required")
730
+ issues_found += 1
731
+
732
+ # 2. Dependencies
733
+ print(f"\n {Fore.WHITE}Dependencies{RESET}")
734
+ deps_ok = True
735
+ for mod, name in [("colorama", "colorama"), ("yaml", "pyyaml")]:
736
+ try:
737
+ __import__(mod)
738
+ _ok(name)
739
+ except ImportError:
740
+ _err(name)
741
+ deps_ok = False
742
+ if not deps_ok:
743
+ issues_found += 1
744
+ _dim(" Run: pip install colorama pyyaml")
745
+
746
+ # 3. Command accessibility
747
+ print(f"\n {Fore.WHITE}Command{RESET}")
748
+ ntc_path = shutil.which("ntc")
749
+ if ntc_path:
750
+ _ok("ntc found")
751
+ _dim(f" {ntc_path}")
752
+ else:
753
+ _err("ntc not in PATH")
754
+ issues_found += 1
755
+
756
+ # 4. Scripts directory
757
+ print(f"\n {Fore.WHITE}Scripts Directory{RESET}")
758
+ scripts_dir = os.path.join(site.USER_BASE, "Scripts")
759
+ if os.path.exists(scripts_dir):
760
+ _ok(scripts_dir)
761
+ else:
762
+ _warn("missing — creating...")
763
+ os.makedirs(scripts_dir, exist_ok=True)
764
+ _ok("created")
765
+ issues_fixed += 1
766
+
767
+ # 5. PATH
768
+ if os.name == "nt":
769
+ print(f"\n {Fore.WHITE}PATH{RESET}")
770
+ current_path = os.environ.get("PATH", "")
771
+ if scripts_dir.lower() in current_path.lower():
772
+ _ok("Scripts directory in PATH")
773
+ else:
774
+ _warn("Scripts directory not in PATH")
775
+ try:
776
+ import winreg
777
+ with winreg.OpenKey(
778
+ winreg.HKEY_CURRENT_USER, "Environment", 0,
779
+ winreg.KEY_READ | winreg.KEY_WRITE,
780
+ ) as key:
781
+ existing, _ = winreg.QueryValueEx(key, "PATH")
782
+ if scripts_dir.lower() not in existing.lower():
783
+ new_path = f"{existing};{scripts_dir}"
784
+ winreg.SetValueEx(key, "PATH", 0, winreg.REG_EXPAND_SZ, new_path)
785
+ os.environ["PATH"] = new_path
786
+ _ok("added to registry")
787
+ issues_fixed += 1
788
+ else:
789
+ _ok("in registry (restart needed)")
790
+ except Exception as e:
791
+ _err(f"registry edit failed: {e}")
792
+ _dim(f" Add manually: {scripts_dir}")
793
+ issues_found += 1
794
+
795
+ # 6. Package version
796
+ print(f"\n {Fore.WHITE}Package{RESET}")
797
+ try:
798
+ import ntc
799
+ _ok(f"ntc-dev-kit {ntc.__version__}")
800
+ except (ImportError, AttributeError):
801
+ _err("ntc-dev-kit not installed")
802
+ issues_found += 1
803
+
804
+ # Summary
805
+ print(f"\n {DIM}{'─' * 50}{RESET}")
806
+ if issues_found == 0 and issues_fixed == 0:
807
+ print(f" {OK}Ready.{RESET}")
808
+ elif issues_fixed > 0:
809
+ print(f" {OK}Fixed {issues_fixed}.{RESET}")
810
+ if issues_found > 0:
811
+ print(f" {WARN}{issues_found} remaining.{RESET}")
812
+ else:
813
+ print(f" {DIM}Restart terminal for changes.{RESET}")
814
+ else:
815
+ print(f" {ERR}{issues_found} issue(s) found.{RESET}")
816
+ print(f" {DIM}Run 'ntc doctor' again after fixing.{RESET}")
817
+ print(f" {DIM}{'─' * 50}{RESET}\n")
818
+
819
+
702
820
  def main():
703
821
  parser = argparse.ArgumentParser(
704
- description="NTC - Nexent Toolkit Console",
822
+ description="ntc — project scaffolding tool",
705
823
  formatter_class=argparse.RawDescriptionHelpFormatter,
706
824
  epilog="""
707
825
  Examples:
@@ -713,7 +831,7 @@ Examples:
713
831
  ntc init --frontend react # Choose React frontend, ask for backend
714
832
  ntc compose myproject # Compose full-stack project with multiple components
715
833
  ntc start # Start all services from ntc.yml configuration
716
- ntc create app myapp # Create new Django app with NTC structure
834
+ ntc create app myapp # Create new Django app
717
835
  ntc drf init path name # Legacy Django REST Framework initialization
718
836
  """
719
837
  )
@@ -755,7 +873,13 @@ Examples:
755
873
  # Start services command
756
874
  start_parser = subparsers.add_parser("start", help="Start all services defined in ntc.yml")
757
875
  start_parser.add_argument("--path", help="Path to project root directory (default: current directory)")
758
-
876
+
877
+ # Doctor command for setup diagnostics
878
+ doctor_parser = subparsers.add_parser("doctor", help="Check setup and fix common issues")
879
+
880
+ # TUI command for interactive terminal UI
881
+ tui_parser = subparsers.add_parser("tui", help="Launch interactive terminal UI")
882
+
759
883
  args = parser.parse_args()
760
884
 
761
885
  if args.command == "init":
@@ -803,16 +927,19 @@ Examples:
803
927
  start_services(args.path)
804
928
  else:
805
929
  start_services()
930
+ elif args.command == "doctor":
931
+ run_doctor()
932
+ elif args.command == "tui":
933
+ from ntc.ui.app import run_tui
934
+ run_tui()
806
935
  else:
807
936
  # Show help if no command provided
808
937
  print_banner()
809
- print(f"{Fore.CYAN}💡 Quick Start:{Style.RESET_ALL}")
810
- print(f" {Fore.WHITE}• Run {Fore.GREEN}'ntc init'{Style.RESET_ALL} {Fore.WHITE}for interactive setup{Style.RESET_ALL}")
811
- print(f" {Fore.WHITE}• Run {Fore.GREEN}'ntc init django'{Style.RESET_ALL} {Fore.WHITE}for Django project{Style.RESET_ALL}")
812
- print(f" {Fore.WHITE}• Run {Fore.GREEN}'ntc init react-admin'{Style.RESET_ALL} {Fore.WHITE}for React Admin Dashboard{Style.RESET_ALL}")
813
- print(f" {Fore.WHITE}• Run {Fore.GREEN}'ntc compose myproject'{Style.RESET_ALL} {Fore.WHITE}for full-stack composition{Style.RESET_ALL}")
814
- print(f" {Fore.WHITE}• Run {Fore.GREEN}'ntc start'{Style.RESET_ALL} {Fore.WHITE}to start all services{Style.RESET_ALL}")
815
- print(f" {Fore.WHITE}• Run {Fore.GREEN}'ntc create app <name>'{Style.RESET_ALL} {Fore.WHITE}to add Django apps{Style.RESET_ALL}")
938
+ print(f"\n {Fore.LIGHTBLACK_EX}Quick Start:{Style.RESET_ALL}")
939
+ print(f" {Fore.WHITE}ntc tui{Style.RESET_ALL} {Fore.LIGHTBLACK_EX}interactive terminal UI{Style.RESET_ALL}")
940
+ print(f" {Fore.WHITE}ntc init{Style.RESET_ALL} {Fore.LIGHTBLACK_EX}interactive setup{Style.RESET_ALL}")
941
+ print(f" {Fore.WHITE}ntc init django{Style.RESET_ALL} {Fore.LIGHTBLACK_EX}Django project{Style.RESET_ALL}")
942
+ print(f" {Fore.WHITE}ntc doctor{Style.RESET_ALL} {Fore.LIGHTBLACK_EX}check setup{Style.RESET_ALL}")
816
943
  print()
817
944
  parser.print_help()
818
945
 
@@ -1,11 +1,30 @@
1
1
  import os
2
2
  import sys
3
3
  import yaml
4
- import msvcrt
5
4
  import shutil
6
5
  from colorama import Fore, Style
7
6
  from ntc.utils.output import print_success, print_error, print_warning, print_info
8
7
 
8
+
9
+ def _getch():
10
+ """Cross-platform single character input."""
11
+ if os.name == 'nt':
12
+ import msvcrt
13
+ return msvcrt.getch()
14
+ else:
15
+ import termios
16
+ import tty
17
+ fd = sys.stdin.fileno()
18
+ old = termios.tcgetattr(fd)
19
+ try:
20
+ tty.setraw(fd)
21
+ ch = sys.stdin.read(1)
22
+ if ch == '\x1b':
23
+ ch += sys.stdin.read(2)
24
+ return ch.encode('utf-8')
25
+ finally:
26
+ termios.tcsetattr(fd, termios.TCSADRAIN, old)
27
+
9
28
  def is_directory_empty(directory):
10
29
  """Check if a directory is empty (ignoring hidden files)."""
11
30
  if not os.path.exists(directory):
@@ -45,9 +64,9 @@ def get_project_choices():
45
64
  print(f"{prefix}[{checkmark}] {label}")
46
65
 
47
66
  # Get key press
48
- key = msvcrt.getch()
49
-
50
- if key == b'\r': # Enter key
67
+ key = _getch()
68
+
69
+ if key == b'\r' or key == b'\n': # Enter key
51
70
  selected_projects = []
52
71
  for option in options:
53
72
  if option["selected"]:
@@ -85,12 +104,16 @@ def get_project_choices():
85
104
  elif all(options[i]["selected"] for i in range(len(options) - 1)):
86
105
  options[-1]["selected"] = True
87
106
 
88
- elif key == b'\x00' or key == b'\xe0': # Arrow key prefix
89
- key = msvcrt.getch()
107
+ elif key == b'\x00' or key == b'\xe0': # Arrow key prefix (Windows)
108
+ key = _getch()
90
109
  if key == b'H': # Up arrow
91
110
  current_index = (current_index - 1) % len(options)
92
111
  elif key == b'P': # Down arrow
93
112
  current_index = (current_index + 1) % len(options)
113
+ elif key == b'\x1b[A': # Up arrow (Unix)
114
+ current_index = (current_index - 1) % len(options)
115
+ elif key == b'\x1b[B': # Down arrow (Unix)
116
+ current_index = (current_index + 1) % len(options)
94
117
 
95
118
  def create_ntc_yml(project_name, projects, root_dir):
96
119
  """Create ntc.yml configuration file."""
@@ -0,0 +1,56 @@
1
+ """Development launcher for ntc.
2
+
3
+ Run directly without pip install:
4
+ python ntc-main/main.py
5
+ python ntc-main/main.py doctor
6
+ """
7
+ import sys
8
+ import os
9
+ import importlib.util
10
+ import pkgutil
11
+
12
+ this_dir = os.path.dirname(os.path.abspath(__file__))
13
+
14
+ # Register 'ntc' package pointing to this directory
15
+ spec = importlib.util.spec_from_file_location("ntc", os.path.join(this_dir, "__init__.py"))
16
+ ntc = importlib.util.module_from_spec(spec)
17
+ ntc.__path__ = [this_dir]
18
+ sys.modules["ntc"] = ntc
19
+ spec.loader.exec_module(ntc)
20
+
21
+ # Only register modules cli_enhanced actually imports
22
+ # Skip template directories — those .py files are project templates, not importable code
23
+ modules_to_register = [
24
+ ("ntc.cli_enhanced", os.path.join(this_dir, "cli_enhanced.py")),
25
+ ("ntc.cli", os.path.join(this_dir, "cli.py")),
26
+ ("ntc.app_creator", os.path.join(this_dir, "app_creator.py")),
27
+ ("ntc.utils.output", os.path.join(this_dir, "utils", "output.py")),
28
+ ("ntc.utils.environment", os.path.join(this_dir, "utils", "environment.py")),
29
+ ("ntc.templates.drf_structure", os.path.join(this_dir, "templates", "drf_structure", "__init__.py")),
30
+ ("ntc.templates.drf_structure.main", os.path.join(this_dir, "templates", "drf_structure", "main.py")),
31
+ ("ntc.templates.react_structure", os.path.join(this_dir, "templates", "react_structure", "__init__.py")),
32
+ ("ntc.templates.react_structure.main", os.path.join(this_dir, "templates", "react_structure", "main.py")),
33
+ ("ntc.templates.react_admin", os.path.join(this_dir, "templates", "react_admin", "__init__.py")),
34
+ ("ntc.templates.react_admin.main", os.path.join(this_dir, "templates", "react_admin", "main.py")),
35
+ ("ntc.templates.nextjs", os.path.join(this_dir, "templates", "nextjs", "__init__.py")),
36
+ ("ntc.templates.nextjs.main", os.path.join(this_dir, "templates", "nextjs", "main.py")),
37
+ ("ntc.templates.flutter", os.path.join(this_dir, "templates", "flutter", "__init__.py")),
38
+ ("ntc.templates.flutter.main", os.path.join(this_dir, "templates", "flutter", "main.py")),
39
+ ("ntc.templates.auth_app", os.path.join(this_dir, "templates", "auth_app", "__init__.py")),
40
+ ("ntc.ui", os.path.join(this_dir, "ui", "__init__.py")),
41
+ ("ntc.ui.app", os.path.join(this_dir, "ui", "app.py")),
42
+ ]
43
+
44
+ for modname, file_path in modules_to_register:
45
+ if not os.path.exists(file_path):
46
+ continue
47
+ spec = importlib.util.spec_from_file_location(modname, file_path)
48
+ mod = importlib.util.module_from_spec(spec)
49
+ sys.modules[modname] = mod
50
+ spec.loader.exec_module(mod)
51
+
52
+ # Run the CLI
53
+ from ntc.cli_enhanced import main
54
+
55
+ if __name__ == "__main__":
56
+ main()
@@ -0,0 +1 @@
1
+ """Terminal UI for ntc."""
@@ -0,0 +1,179 @@
1
+ """Textual TUI for ntc.
2
+
3
+ Run:
4
+ python -m ntc.ui.app
5
+ """
6
+ from textual.app import App, ComposeResult
7
+ from textual.containers import Horizontal, Vertical
8
+ from textual.widgets import Static, ListView, ListItem, Header, Footer, Label
9
+ from textual.binding import Binding
10
+ from textual.screen import Screen
11
+
12
+
13
+ class MenuScreen(Screen):
14
+ """Main menu screen with sidebar navigation."""
15
+
16
+ BINDINGS = [
17
+ Binding("q", "quit", "Quit"),
18
+ Binding("escape", "quit", "Quit"),
19
+ ]
20
+
21
+ CSS = """
22
+ Screen {
23
+ align: center middle;
24
+ }
25
+ #sidebar {
26
+ width: 24;
27
+ height: 100%;
28
+ background: $surface-darken-1;
29
+ padding: 1;
30
+ }
31
+ #content {
32
+ width: 1fr;
33
+ height: 100%;
34
+ padding: 2 4;
35
+ }
36
+ #title {
37
+ text-align: center;
38
+ height: auto;
39
+ padding: 1;
40
+ color: $text;
41
+ text-style: bold;
42
+ }
43
+ #tagline {
44
+ text-align: center;
45
+ height: auto;
46
+ padding-bottom: 1;
47
+ color: $text-muted;
48
+ }
49
+ ListView {
50
+ height: auto;
51
+ border: none;
52
+ background: transparent;
53
+ }
54
+ ListView > ListItem {
55
+ padding: 0 1;
56
+ height: auto;
57
+ }
58
+ ListView > ListItem.--highlight {
59
+ background: $primary-darken-2;
60
+ color: $text;
61
+ text-style: bold;
62
+ }
63
+ #info {
64
+ color: $text-muted;
65
+ text-style: dim;
66
+ margin-top: 1;
67
+ }
68
+ .label {
69
+ color: $text;
70
+ text-style: bold;
71
+ margin-top: 1;
72
+ }
73
+ .desc {
74
+ color: $text-muted;
75
+ margin-left: 2;
76
+ }
77
+ """
78
+
79
+ def compose(self) -> ComposeResult:
80
+ with Horizontal():
81
+ with Vertical(id="sidebar"):
82
+ yield Static("ntc", id="title")
83
+ yield Static("project scaffolding", id="tagline")
84
+ yield ListView(
85
+ ListItem(Label("init")),
86
+ ListItem(Label("create app")),
87
+ ListItem(Label("compose")),
88
+ ListItem(Label("start")),
89
+ ListItem(Label("doctor")),
90
+ ListItem(Label("quit")),
91
+ )
92
+ yield Static("↑↓ navigate enter run", id="info")
93
+ with Vertical(id="content"):
94
+ yield Static(id="detail")
95
+
96
+ def on_mount(self) -> None:
97
+ self.query_one(ListView).focus()
98
+ self._update_detail(0)
99
+
100
+ def on_list_view_highlighted(self, event: ListView.Highlighted) -> None:
101
+ list_view = self.query_one(ListView)
102
+ if list_view.highlighted_child is not None:
103
+ self._update_detail(list_view.index)
104
+
105
+ def on_list_view_selected(self, event: ListView.Selected) -> None:
106
+ list_view = self.query_one(ListView)
107
+ self._run_command(list_view.index)
108
+
109
+ def _update_detail(self, index: int) -> None:
110
+ details = [
111
+ ("init", "Interactive project setup.\nChoose backend, frontend, and configure your stack."),
112
+ ("create app", "Generate a new app inside an existing project.\nCreates models, views, serializers, and URLs."),
113
+ ("compose", "Build a full-stack project from a YAML spec.\nOrchestrates multiple services."),
114
+ ("start", "Start all services defined in ntc.yml.\nRuns docker-compose or local processes."),
115
+ ("doctor", "Check setup and fix PATH issues.\nEnsures the CLI is properly configured."),
116
+ ("quit", "Exit the TUI and return to the shell."),
117
+ ]
118
+ label, desc = details[index]
119
+ self.query_one("#detail", Static).update(
120
+ f"[b]{label}[/b]\n\n{desc}"
121
+ )
122
+
123
+ def _run_command(self, index: int) -> None:
124
+ commands = ["init", "create_app", "compose", "start", "doctor", "quit"]
125
+ cmd = commands[index]
126
+ if cmd == "quit":
127
+ self.app.exit()
128
+ return
129
+
130
+ # Run the command and show result
131
+ detail = self.query_one("#detail", Static)
132
+ detail.update(f"[b]{cmd}[/b]\n\n[yellow]Running...[/yellow]")
133
+
134
+ try:
135
+ if cmd == "init":
136
+ from ntc.cli_enhanced import interactive_init
137
+ self.app.exit()
138
+ interactive_init()
139
+ elif cmd == "create_app":
140
+ from ntc.cli_enhanced import create_app_structure
141
+ # Would need input; show placeholder
142
+ detail.update("[b]create app[/b]\n\nRun from shell:\n ntc create app <name>")
143
+ elif cmd == "compose":
144
+ from ntc.cli_enhanced import compose_project
145
+ self.app.exit()
146
+ compose_project("myproject")
147
+ elif cmd == "start":
148
+ from ntc.cli_enhanced import start_services
149
+ self.app.exit()
150
+ start_services()
151
+ elif cmd == "doctor":
152
+ from ntc.cli_enhanced import run_doctor
153
+ self.app.exit()
154
+ run_doctor()
155
+ except Exception as e:
156
+ detail.update(f"[b]{cmd}[/b]\n\n[red]Error: {e}[/red]")
157
+
158
+
159
+ class NtcTui(App):
160
+ """Main TUI application."""
161
+
162
+ CSS = """
163
+ App {
164
+ background: $surface-darken-2;
165
+ }
166
+ """
167
+
168
+ def on_mount(self) -> None:
169
+ self.push_screen(MenuScreen())
170
+
171
+
172
+ def run_tui() -> None:
173
+ """Entry point for the TUI."""
174
+ app = NtcTui()
175
+ app.run()
176
+
177
+
178
+ if __name__ == "__main__":
179
+ run_tui()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ntc-dev-kit
3
- Version: 1.0.2
3
+ Version: 1.0.5
4
4
  Summary: Nexent Toolkit Console - A CLI tool for scaffolding Django REST Framework, React, Next.js, and Flutter projects
5
5
  Home-page: https://github.com/nexent/ntc
6
6
  Author: Nexent
@@ -26,6 +26,7 @@ Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: colorama>=0.4.6
28
28
  Requires-Dist: pyyaml>=6.0
29
+ Requires-Dist: textual>=0.47.0
29
30
  Provides-Extra: dev
30
31
  Requires-Dist: build>=1.0; extra == "dev"
31
32
  Requires-Dist: twine>=4.0; extra == "dev"
@@ -0,0 +1,69 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ requirements.txt
6
+ setup.py
7
+ ntc-main/__init__.py
8
+ ntc-main/app_creator.py
9
+ ntc-main/cli.py
10
+ ntc-main/cli_enhanced.py
11
+ ntc-main/main.py
12
+ ntc-main/composer/__init__.py
13
+ ntc-main/composer/main.py
14
+ ntc-main/deployment/__init__.py
15
+ ntc-main/templates/__init__.py
16
+ ntc-main/templates/auth_app/__init__.py
17
+ ntc-main/templates/auth_app/admin.py
18
+ ntc-main/templates/auth_app/apps.py
19
+ ntc-main/templates/auth_app/models.py
20
+ ntc-main/templates/auth_app/serializers.py
21
+ ntc-main/templates/auth_app/urls.py
22
+ ntc-main/templates/auth_app/views.py
23
+ ntc-main/templates/drf_structure/__init__.py
24
+ ntc-main/templates/drf_structure/main.py
25
+ ntc-main/templates/drf_structure/templates/apps/app_admin.py
26
+ ntc-main/templates/drf_structure/templates/apps/app_apps.py
27
+ ntc-main/templates/drf_structure/templates/apps/app_models.py
28
+ ntc-main/templates/drf_structure/templates/apps/app_urls.py
29
+ ntc-main/templates/drf_structure/templates/apps/app_views.py
30
+ ntc-main/templates/drf_structure/templates/apps/common_apps.py
31
+ ntc-main/templates/drf_structure/templates/apps/common_models.py
32
+ ntc-main/templates/drf_structure/templates/config/gunicorn_config.py
33
+ ntc-main/templates/drf_structure/templates/core/base_model.py
34
+ ntc-main/templates/drf_structure/templates/core/formatter.py
35
+ ntc-main/templates/drf_structure/templates/core/logger.py
36
+ ntc-main/templates/drf_structure/templates/core/pagination.py
37
+ ntc-main/templates/drf_structure/templates/core/response_wrapper.py
38
+ ntc-main/templates/drf_structure/templates/core/services/object_storage.py
39
+ ntc-main/templates/drf_structure/templates/core/services/azure/email/backend.py
40
+ ntc-main/templates/drf_structure/templates/core/services/azure/email/client.py
41
+ ntc-main/templates/drf_structure/templates/core/services/azure/email/notifier.py
42
+ ntc-main/templates/drf_structure/templates/django_project/asgi.py
43
+ ntc-main/templates/drf_structure/templates/django_project/celery.py
44
+ ntc-main/templates/drf_structure/templates/django_project/dev_settings.py
45
+ ntc-main/templates/drf_structure/templates/django_project/management_command.py
46
+ ntc-main/templates/drf_structure/templates/django_project/prod_settings.py
47
+ ntc-main/templates/drf_structure/templates/django_project/schema.py
48
+ ntc-main/templates/drf_structure/templates/django_project/urls.py
49
+ ntc-main/templates/drf_structure/templates/django_project/wsgi.py
50
+ ntc-main/templates/drf_structure/templates/root/manage.py
51
+ ntc-main/templates/flutter/__init__.py
52
+ ntc-main/templates/flutter/main.py
53
+ ntc-main/templates/nextjs/__init__.py
54
+ ntc-main/templates/nextjs/main.py
55
+ ntc-main/templates/react_admin/__init__.py
56
+ ntc-main/templates/react_admin/main.py
57
+ ntc-main/templates/react_structure/__init__.py
58
+ ntc-main/templates/react_structure/main.py
59
+ ntc-main/ui/__init__.py
60
+ ntc-main/ui/app.py
61
+ ntc-main/utils/__init__.py
62
+ ntc-main/utils/environment.py
63
+ ntc-main/utils/output.py
64
+ ntc_dev_kit.egg-info/PKG-INFO
65
+ ntc_dev_kit.egg-info/SOURCES.txt
66
+ ntc_dev_kit.egg-info/dependency_links.txt
67
+ ntc_dev_kit.egg-info/entry_points.txt
68
+ ntc_dev_kit.egg-info/requires.txt
69
+ ntc_dev_kit.egg-info/top_level.txt
@@ -1,5 +1,6 @@
1
1
  colorama>=0.4.6
2
2
  pyyaml>=6.0
3
+ textual>=0.47.0
3
4
 
4
5
  [dev]
5
6
  build>=1.0
@@ -0,0 +1 @@
1
+ ntc-main
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ntc-dev-kit"
7
- version = "1.0.2"
7
+ version = "1.0.5"
8
8
  description = "Nexent Toolkit Console - A CLI tool for scaffolding Django REST Framework, React, Next.js, and Flutter projects"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -27,6 +27,7 @@ requires-python = ">=3.10"
27
27
  dependencies = [
28
28
  "colorama>=0.4.6",
29
29
  "pyyaml>=6.0",
30
+ "textual>=0.47.0",
30
31
  ]
31
32
 
32
33
  [project.optional-dependencies]
@@ -1,2 +1,3 @@
1
1
  colorama>=0.4.6
2
2
  pyyaml>=6.0
3
+ textual>=0.47.0