quickscale-cli 0.63.0__tar.gz → 0.67.0__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: quickscale-cli
3
- Version: 0.63.0
3
+ Version: 0.67.0
4
4
  Summary: Command-line interface for QuickScale Django project generator
5
5
  Home-page: https://github.com/Experto-AI/quickscale
6
6
  License: Apache-2.0
@@ -10,7 +10,6 @@ Author-email: victor@experto.ai
10
10
  Requires-Python: >=3.10,<4.0
11
11
  Classifier: Development Status :: 3 - Alpha
12
12
  Classifier: Framework :: Django
13
- Classifier: Framework :: Django :: 4.2
14
13
  Classifier: Framework :: Django :: 5.0
15
14
  Classifier: Intended Audience :: Developers
16
15
  Classifier: License :: OSI Approved :: Apache Software License
@@ -18,7 +17,7 @@ Classifier: Programming Language :: Python :: 3
18
17
  Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
20
19
  Classifier: Programming Language :: Python :: 3.12
21
- Requires-Dist: click (>=8.1.0,<9.0.0)
22
- Requires-Dist: quickscale-core (>=0.63.0,<0.64.0)
20
+ Requires-Dist: click (>=8.3.0,<9.0.0)
21
+ Requires-Dist: quickscale-core (>=0.67.0,<0.68.0)
23
22
  Project-URL: Documentation, https://github.com/Experto-AI/quickscale/tree/main/docs
24
23
  Project-URL: Repository, https://github.com/Experto-AI/quickscale
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "quickscale-cli"
3
- version = "0.63.0"
3
+ version = "0.67.0"
4
4
  description = "Command-line interface for QuickScale Django project generator"
5
5
  authors = ["Experto AI <victor@experto.ai>"]
6
6
  license = "Apache-2.0"
@@ -17,21 +17,18 @@ classifiers = [
17
17
  "Programming Language :: Python :: 3.11",
18
18
  "Programming Language :: Python :: 3.12",
19
19
  "Framework :: Django",
20
- "Framework :: Django :: 4.2",
21
20
  "Framework :: Django :: 5.0",
22
21
  ]
23
22
  packages = [{include = "quickscale_cli", from = "src"}]
24
23
 
25
24
  [tool.poetry.dependencies]
26
25
  python = "^3.10"
27
- click = "^8.1.0"
28
- quickscale-core = "^0.63.0"
26
+ click = "^8.3.0"
27
+ quickscale-core = "^0.67.0"
29
28
 
30
29
  [tool.poetry.group.dev.dependencies]
31
- pytest = "^7.4.0"
32
- pytest-cov = "^4.1.0"
33
- ruff = "^0.6.0"
34
- mypy = "^1.8.0"
30
+ # Dev dependencies centralized in root pyproject.toml
31
+ # Use: poetry install from repository root
35
32
 
36
33
  [tool.poetry.scripts]
37
34
  quickscale = "quickscale_cli.main:cli"
@@ -53,58 +50,18 @@ addopts = [
53
50
  "--cov-report=html",
54
51
  "-m", "not e2e", # Skip E2E tests by default (run with: pytest -m e2e)
55
52
  ]
56
-
57
- [tool.ruff]
58
- line-length = 100
59
- target-version = "py310"
60
-
61
- [tool.ruff.lint]
62
- select = [
63
- "E", # pycodestyle errors
64
- "W", # pycodestyle warnings
65
- "F", # pyflakes
66
- "I", # isort
67
- "N", # pep8-naming
68
- "UP", # pyupgrade
69
- "D", # docstring rules
70
- ]
71
- ignore = [
72
- "D100", # Missing docstring in public module
73
- "D101", # Missing docstring in public class
74
- "D102", # Missing docstring in public method
75
- "D103", # Missing docstring in public function
76
- "D105", # Missing docstring in magic method
77
- "D107", # Missing docstring in __init__
78
- "D203", # 1 blank line required before class docstring (incompatible with D211)
79
- "D212", # Multi-line docstring summary should start at the first line (incompatible with D213)
80
- "D400", # First line should end with a period
81
- "D415", # First line should end with a period, question mark, or exclamation point
53
+ markers = [
54
+ "integration: integration tests (slower, require external dependencies)",
55
+ "slow: slow tests that take significant time to run",
56
+ "e2e: end-to-end tests",
82
57
  ]
83
58
 
59
+ # Ruff and mypy configurations centralized in root ruff.toml and mypy.ini
60
+ # Package-specific isort override
84
61
  [tool.ruff.lint.isort]
85
62
  known-first-party = ["quickscale_cli", "quickscale_core"]
86
63
 
87
- [tool.mypy]
88
- python_version = "3.10"
89
- warn_return_any = true
90
- warn_unused_configs = true
91
- disallow_untyped_defs = true
92
- disallow_incomplete_defs = true
93
- check_untyped_defs = true
94
- disallow_untyped_decorators = true
95
- no_implicit_optional = true
96
- warn_redundant_casts = true
97
- warn_unused_ignores = true
98
- warn_no_return = true
99
- warn_unreachable = true
100
- strict_equality = true
101
- show_error_codes = true
102
-
103
- [[tool.mypy.overrides]]
104
- module = "tests.*"
105
- disallow_untyped_defs = false
106
- check_untyped_defs = false
107
-
64
+ # Package-specific mypy overrides
108
65
  [[tool.mypy.overrides]]
109
66
  module = "quickscale_core.*"
110
67
  ignore_missing_imports = true
@@ -1,2 +1,2 @@
1
1
  # Auto-generated by scripts/version_tool.sh
2
- __version__ = "0.63.0"
2
+ __version__ = "0.67.0"
@@ -37,7 +37,9 @@ def deploy() -> None:
37
37
 
38
38
 
39
39
  @deploy.command()
40
- @click.option("--project-name", help="Railway project name (auto-detected if not provided)")
40
+ @click.option(
41
+ "--project-name", help="Railway project name (auto-detected if not provided)"
42
+ )
41
43
  def railway(project_name: str | None) -> None:
42
44
  """
43
45
  Deploy project to Railway with automated setup.
@@ -106,7 +108,9 @@ def railway(project_name: str | None) -> None:
106
108
  click.secho(f"⚠️ Warning: {lock_message}", fg="yellow")
107
109
  if "not found" not in lock_message.lower():
108
110
  # Lock file exists but is inconsistent - offer to fix it
109
- click.echo("💡 The lock file needs to be regenerated to match pyproject.toml")
111
+ click.echo(
112
+ "💡 The lock file needs to be regenerated to match pyproject.toml"
113
+ )
110
114
  if click.confirm("Run 'poetry lock --no-update' to fix?", default=True):
111
115
  click.echo("🔄 Updating poetry.lock...")
112
116
  success, fix_message = fix_poetry_lock()
@@ -114,7 +118,9 @@ def railway(project_name: str | None) -> None:
114
118
  click.secho(f"✅ {fix_message}", fg="green")
115
119
  else:
116
120
  click.secho(f"❌ Error: {fix_message}", fg="red", err=True)
117
- click.echo("💡 Try running manually: poetry lock --no-update", err=True)
121
+ click.echo(
122
+ "💡 Try running manually: poetry lock --no-update", err=True
123
+ )
118
124
  if not click.confirm("Continue anyway?", default=False):
119
125
  click.echo("Deployment cancelled")
120
126
  sys.exit(0)
@@ -143,7 +149,9 @@ def railway(project_name: str | None) -> None:
143
149
  click.secho("❌ Error: npm is not installed", fg="red", err=True)
144
150
  click.echo("\n💡 Install Node.js and npm first:", err=True)
145
151
  click.echo(" https://nodejs.org/", err=True)
146
- click.echo("\nThen run this command again to auto-install Railway CLI", err=True)
152
+ click.echo(
153
+ "\nThen run this command again to auto-install Railway CLI", err=True
154
+ )
147
155
  sys.exit(1)
148
156
 
149
157
  # Auto-install Railway CLI
@@ -178,10 +186,14 @@ def railway(project_name: str | None) -> None:
178
186
  new_version = get_railway_cli_version()
179
187
  click.secho(f"✅ Railway CLI upgraded to {new_version}", fg="green")
180
188
  else:
181
- click.secho("⚠️ Warning: Failed to upgrade Railway CLI", fg="yellow")
189
+ click.secho(
190
+ "⚠️ Warning: Failed to upgrade Railway CLI", fg="yellow"
191
+ )
182
192
  click.echo("💡 Try upgrading manually:", err=True)
183
193
  click.echo(" npm update -g @railway/cli", err=True)
184
- if not click.confirm("Continue with current version?", default=False):
194
+ if not click.confirm(
195
+ "Continue with current version?", default=False
196
+ ):
185
197
  sys.exit(1)
186
198
  else:
187
199
  click.secho("✅ Railway CLI version is up to date", fg="green")
@@ -203,7 +215,8 @@ def railway(project_name: str | None) -> None:
203
215
  click.echo("\n💡 Try authenticating manually:", err=True)
204
216
  click.echo(" railway login (opens browser)", err=True)
205
217
  click.echo(
206
- " railway login --browserless (for headless/remote systems)", err=True
218
+ " railway login --browserless (for headless/remote systems)",
219
+ err=True,
207
220
  )
208
221
  sys.exit(1)
209
222
  else:
@@ -219,7 +232,9 @@ def railway(project_name: str | None) -> None:
219
232
  result = run_railway_command(["init"], timeout=60, interactive=True)
220
233
 
221
234
  if result.returncode != 0:
222
- click.secho("❌ Error: Failed to initialize Railway project", fg="red", err=True)
235
+ click.secho(
236
+ "❌ Error: Failed to initialize Railway project", fg="red", err=True
237
+ )
223
238
  sys.exit(1)
224
239
 
225
240
  click.secho("✅ Railway project initialized", fg="green")
@@ -268,7 +283,9 @@ def railway(project_name: str | None) -> None:
268
283
  )
269
284
 
270
285
  if result.returncode != 0:
271
- click.secho(f"⚠️ Warning: Could not create service '{app_service}'", fg="yellow")
286
+ click.secho(
287
+ f"⚠️ Warning: Could not create service '{app_service}'", fg="yellow"
288
+ )
272
289
  click.echo("💡 Create manually: railway add --service", err=True)
273
290
  else:
274
291
  click.secho(f"✅ Service '{app_service}' created", fg="green")
@@ -288,7 +305,9 @@ def railway(project_name: str | None) -> None:
288
305
  f' railway variables --set "DATABASE_URL=${{{{Postgres.DATABASE_URL}}}}" '
289
306
  f"--service {app_service}"
290
307
  )
291
- click.echo(" Or link via Railway dashboard > Variables > New Variable > Reference")
308
+ click.echo(
309
+ " Or link via Railway dashboard > Variables > New Variable > Reference"
310
+ )
292
311
 
293
312
  # Step 7: Generate public domain first (before setting env vars)
294
313
  click.echo("\n🌐 Generating public domain...")
@@ -332,7 +351,9 @@ def railway(project_name: str | None) -> None:
332
351
  click.echo(f" • {key}={env_vars[key]}")
333
352
  click.echo("💡 This triggers ONE deployment with all variables set")
334
353
  else:
335
- click.secho("⚠️ Warning: Some environment variables could not be set", fg="yellow")
354
+ click.secho(
355
+ "⚠️ Warning: Some environment variables could not be set", fg="yellow"
356
+ )
336
357
  if failed_keys:
337
358
  click.echo("Failed variables:")
338
359
  for key in failed_keys:
@@ -348,7 +369,9 @@ def railway(project_name: str | None) -> None:
348
369
  try:
349
370
  # Deploy to the specific app service
350
371
  # railway.json in project root configures the build and startCommand
351
- result = run_railway_command(["up", "--service", app_service, "--detach"], timeout=60)
372
+ result = run_railway_command(
373
+ ["up", "--service", app_service, "--detach"], timeout=60
374
+ )
352
375
 
353
376
  if result.returncode != 0:
354
377
  click.secho("❌ Error: Deployment failed", fg="red", err=True)
@@ -358,7 +381,9 @@ def railway(project_name: str | None) -> None:
358
381
  click.echo(" - Verify railway.json exists in project root", err=True)
359
382
  click.echo(" - Verify Dockerfile is present", err=True)
360
383
  click.echo(" - Check pyproject.toml dependencies", err=True)
361
- click.echo(" - Ensure DATABASE_URL is linked to PostgreSQL service", err=True)
384
+ click.echo(
385
+ " - Ensure DATABASE_URL is linked to PostgreSQL service", err=True
386
+ )
362
387
  sys.exit(1)
363
388
 
364
389
  click.secho("✅ Deployment started", fg="green")