acumatica-cli 0.18.2__tar.gz → 0.19.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.
Files changed (70) hide show
  1. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/PKG-INFO +3 -2
  2. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/README.md +2 -1
  3. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/pyproject.toml +1 -1
  4. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/pyproject.toml.orig +1 -1
  5. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/cli.py +21 -0
  6. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/client.py +1 -1
  7. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/__init__.py +0 -0
  8. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/bootstrap.py +0 -0
  9. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/bootstrap_plugin.cs +0 -0
  10. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/bootstrap_project.xml +0 -0
  11. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/config.py +0 -0
  12. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/extract.py +0 -0
  13. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/firstlogin.py +0 -0
  14. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/inventory.py +0 -0
  15. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/models.py +0 -0
  16. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/output.py +0 -0
  17. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/reconcile.py +0 -0
  18. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/run.py +0 -0
  19. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/seed.py +0 -0
  20. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/seed_catalog.yaml +0 -0
  21. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/snapshot_map.yaml +0 -0
  22. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/state.py +0 -0
  23. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/target.py +0 -0
  24. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/README.md +0 -0
  25. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/baseline/10-subaccounts.yaml +0 -0
  26. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/baseline/20-accounts.yaml +0 -0
  27. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/baseline/40-ledger.yaml +0 -0
  28. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/baseline/50-gl-preferences.yaml +0 -0
  29. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/baseline/60-ledger-company.yaml +0 -0
  30. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/baseline/90-uoms.yaml +0 -0
  31. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/bootstrap/company.yaml +0 -0
  32. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/bootstrap/credit-terms.yaml +0 -0
  33. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/bootstrap/features.yaml +0 -0
  34. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/10-reason-codes.yaml +0 -0
  35. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/20-in-preferences.yaml +0 -0
  36. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/30-availability-rules.yaml +0 -0
  37. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/40-posting-classes.yaml +0 -0
  38. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/50-warehouse.yaml +0 -0
  39. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/51-warehouse-locations.yaml +0 -0
  40. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/52-warehouse-defaults.yaml +0 -0
  41. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/53-tax-categories.yaml +0 -0
  42. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/54-item-classes.yaml +0 -0
  43. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/56-so-preferences.yaml +0 -0
  44. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/57-po-preferences.yaml +0 -0
  45. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/58-order-types.yaml +0 -0
  46. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/60-ar-preferences.yaml +0 -0
  47. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/61-ap-preferences.yaml +0 -0
  48. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/62-ca-preferences.yaml +0 -0
  49. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/63-cash-account.yaml +0 -0
  50. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/64-payment-methods.yaml +0 -0
  51. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/65-statement-cycles.yaml +0 -0
  52. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/70-vendor-classes.yaml +0 -0
  53. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/71-customer-classes.yaml +0 -0
  54. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/75-vendors.yaml +0 -0
  55. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/76-customers.yaml +0 -0
  56. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/80-stock-items-parts.yaml +0 -0
  57. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/82-stock-items-kits.yaml +0 -0
  58. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/master/85-kit-specifications.yaml +0 -0
  59. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/setup/10-financial-year.yaml +0 -0
  60. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/setup/20-master-calendar.yaml +0 -0
  61. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/setup/30-open-periods.yaml +0 -0
  62. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/config/views/10-trial-balance.yaml +0 -0
  63. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/env +0 -0
  64. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/gitignore +0 -0
  65. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/scenario/10-seed-capital.yaml +0 -0
  66. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/scenario/20-buy.yaml +0 -0
  67. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/scenario/30-build.yaml +0 -0
  68. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/scenario/40-sell.yaml +0 -0
  69. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/templates/target +0 -0
  70. {acumatica_cli-0.18.2 → acumatica_cli-0.19.0}/src/acumatica_cli/tenant.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acumatica-cli
3
- Version: 0.18.2
3
+ Version: 0.19.0
4
4
  Summary: Acumatica ERP Config-as-Code: tenant provisioning, baseline config, and reference data
5
5
  Author: Konstantin Borovik
6
6
  Author-email: Konstantin Borovik <kb@lab5.ca>
@@ -78,7 +78,8 @@ acu [--tenant NAME] [--url URL] [--ssh USER@HOST] [--api-version V]
78
78
  │ ├── list CompanyID, sign-in name, internal CD, type
79
79
  │ ├── create --id N --login NAME create + bootstrap; re-run to republish (SSH)
80
80
  │ │ [--type SalesDemo|T100|U100] [--parent N] [--hidden] [--no-init]
81
- └── delete --id N [--yes] delete the tenant and its data, recycle app pool
81
+ ├── delete --id N [--yes] delete the tenant and its data, recycle app pool
82
+ │ └── recycle [--yes] restart site app pool (tenant map + free API slots)
82
83
 
83
84
  ├── bootstrap [--export PATH] publish AcuBootstrap (REST); --export = offline zip
84
85
  ├── apply [--dry-run] [FILES...] push YAML via REST (idempotent PUT upserts)
@@ -60,7 +60,8 @@ acu [--tenant NAME] [--url URL] [--ssh USER@HOST] [--api-version V]
60
60
  │ ├── list CompanyID, sign-in name, internal CD, type
61
61
  │ ├── create --id N --login NAME create + bootstrap; re-run to republish (SSH)
62
62
  │ │ [--type SalesDemo|T100|U100] [--parent N] [--hidden] [--no-init]
63
- └── delete --id N [--yes] delete the tenant and its data, recycle app pool
63
+ ├── delete --id N [--yes] delete the tenant and its data, recycle app pool
64
+ │ └── recycle [--yes] restart site app pool (tenant map + free API slots)
64
65
 
65
66
  ├── bootstrap [--export PATH] publish AcuBootstrap (REST); --export = offline zip
66
67
  ├── apply [--dry-run] [FILES...] push YAML via REST (idempotent PUT upserts)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "acumatica-cli"
3
- version = "0.18.2"
3
+ version = "0.19.0"
4
4
  description = "Acumatica ERP Config-as-Code: tenant provisioning, baseline config, and reference data"
5
5
  license = "PolyForm-Noncommercial-1.0.0"
6
6
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "acumatica-cli"
3
- version = "0.18.2"
3
+ version = "0.19.0"
4
4
  description = "Acumatica ERP Config-as-Code: tenant provisioning, baseline config, and reference data"
5
5
  authors = [{ name = "Konstantin Borovik", email = "kb@lab5.ca" }]
6
6
  license = "PolyForm-Noncommercial-1.0.0"
@@ -470,6 +470,27 @@ def tenant_delete(inst: Instance, company_id: int) -> None:
470
470
  mgr.recycle_app_pool()
471
471
 
472
472
 
473
+ @tenant_group.command("recycle")
474
+ @click.confirmation_option(
475
+ prompt=(
476
+ "Recycle the site app pool? This kills all sessions and frees API-user slots."
477
+ )
478
+ )
479
+ @pass_instance
480
+ def tenant_recycle(inst: Instance) -> None:
481
+ """Recycle the IIS app pool for the instance (site-wide; no tenant --id).
482
+
483
+ Control plane only (SSH): ``Restart-WebAppPool`` for the instance pool.
484
+ Reloads the tenant map (V5) and drops every in-flight session so concurrent
485
+ API-user license slots free up. Hosted / empty ACU_SSH hard-errors before
486
+ any remote (same as other tenant cmds).
487
+ """
488
+ mgr = TenantManager(inst)
489
+ with output.step("recycling app pool (tenant map + free API-user sessions)"):
490
+ mgr.recycle_app_pool()
491
+ output.success("app pool recycled")
492
+
493
+
473
494
  @cli.group("config")
474
495
  def config_group() -> None:
475
496
  """Configuration ops.
@@ -224,7 +224,7 @@ class AcumaticaClient:
224
224
  f"tenant guard: asked for tenant {self.instance.tenant!r} "
225
225
  f"but the session landed on {landed!r} - the instance "
226
226
  "tenant map is stale or the tenant does not exist; check "
227
- "acu tenant list and recycle the app pool"
227
+ "acu tenant list and run acu tenant recycle"
228
228
  )
229
229
 
230
230
  def relogin(self) -> None: