acumatica-cli 0.35.0__tar.gz → 0.36.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 (77) hide show
  1. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/PKG-INFO +32 -1
  2. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/README.md +31 -0
  3. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/pyproject.toml +1 -1
  4. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/pyproject.toml.orig +1 -1
  5. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/cli.py +292 -100
  6. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/client.py +206 -20
  7. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/config.py +12 -9
  8. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/extract.py +10 -7
  9. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/output.py +21 -1
  10. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/run.py +101 -20
  11. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/seed.py +380 -87
  12. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/state.py +29 -3
  13. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/tenant.py +99 -13
  14. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/__init__.py +0 -0
  15. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/bootstrap.py +0 -0
  16. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/bootstrap_plugin.cs +0 -0
  17. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/bootstrap_project.xml +0 -0
  18. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/firstlogin.py +0 -0
  19. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/inventory.py +0 -0
  20. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/models.py +0 -0
  21. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/reconcile.py +0 -0
  22. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/seed_catalog.yaml +0 -0
  23. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/snapshot_map.yaml +0 -0
  24. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/README.md +0 -0
  25. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/10-subaccounts.yaml +0 -0
  26. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/20-accounts.yaml +0 -0
  27. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/40-ledger.yaml +0 -0
  28. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/50-gl-preferences.yaml +0 -0
  29. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/60-ledger-company.yaml +0 -0
  30. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/90-uoms.yaml +0 -0
  31. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/baseline/91-company-packaging.yaml +0 -0
  32. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/bootstrap/company.yaml +0 -0
  33. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/bootstrap/credit-terms.yaml +0 -0
  34. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/bootstrap/features.yaml +0 -0
  35. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/bootstrap/segmented-key.yaml +0 -0
  36. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/05-numbering-sequences.yaml +0 -0
  37. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/10-reason-codes.yaml +0 -0
  38. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/20-in-preferences.yaml +0 -0
  39. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/30-availability-rules.yaml +0 -0
  40. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/40-posting-classes.yaml +0 -0
  41. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/50-warehouse.yaml +0 -0
  42. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/51-warehouse-locations.yaml +0 -0
  43. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/52-warehouse-defaults.yaml +0 -0
  44. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/53-tax-categories.yaml +0 -0
  45. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/54-item-classes.yaml +0 -0
  46. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/56-so-preferences.yaml +0 -0
  47. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/57-po-preferences.yaml +0 -0
  48. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/58-order-types.yaml +0 -0
  49. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/60-ar-preferences.yaml +0 -0
  50. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/61-ap-preferences.yaml +0 -0
  51. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/62-ca-preferences.yaml +0 -0
  52. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/63-cash-account.yaml +0 -0
  53. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/64-payment-methods.yaml +0 -0
  54. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/65-statement-cycles.yaml +0 -0
  55. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/70-vendor-classes.yaml +0 -0
  56. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/71-customer-classes.yaml +0 -0
  57. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/75-vendors.yaml +0 -0
  58. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/76-customers.yaml +0 -0
  59. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/80-stock-items-parts.yaml +0 -0
  60. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/82-stock-items-kits.yaml +0 -0
  61. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/85-kit-specifications.yaml +0 -0
  62. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/90-roles.yaml +0 -0
  63. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/91-users.yaml +0 -0
  64. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/master/92-role-users.yaml +0 -0
  65. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/setup/10-financial-year.yaml +0 -0
  66. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/setup/20-master-calendar.yaml +0 -0
  67. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/setup/30-open-periods.yaml +0 -0
  68. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-config/views/10-trial-balance.yaml +0 -0
  69. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-scenario/10-seed-capital.yaml +0 -0
  70. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-scenario/20-buy.yaml +0 -0
  71. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-scenario/30-build.yaml +0 -0
  72. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/acu-scenario/40-sell.yaml +0 -0
  73. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/env +0 -0
  74. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/gitignore +0 -0
  75. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/overlays/README.md +0 -0
  76. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/overlays/default-24.200.001/README.md +0 -0
  77. {acumatica_cli-0.35.0 → acumatica_cli-0.36.0}/src/acumatica_cli/templates/overlays/default-24.200.001/acu-scenario/30-build.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acumatica-cli
3
- Version: 0.35.0
3
+ Version: 0.36.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>
@@ -173,6 +173,37 @@ Do not confuse them with each other or with `state`:
173
173
  `inventory/` and `findings/` are engagement outputs: not SEED_DIRS, never loaded by `apply`/`diff`, not scaffolded by `config init`.
174
174
  Binary `.adb` snapshots are rejected (XML only).
175
175
 
176
+ ### Machine-readable output (`--output json`)
177
+
178
+ `acu --output json <diff|apply|run|state> ...` prints one JSON document on stdout; progress and result lines move to stderr.
179
+ Exit codes do not change (`diff` still exits 2 on drift), and other commands ignore the flag.
180
+
181
+ `diff`:
182
+
183
+ ```json
184
+ {
185
+ "command": "diff", "tenant": "DEV", "base_url": "https://...", "drift": 1,
186
+ "files": [{
187
+ "file": "acu-config/baseline/10-uoms.yaml", "entity": "UnitsOfMeasure",
188
+ "records": 2,
189
+ "drifts": [{
190
+ "file": "acu-config/baseline/10-uoms.yaml", "entity": "UnitsOfMeasure",
191
+ "keys": {"UOM": "KG"}, "field": "Description", "kind": "changed",
192
+ "source": "Kilogram", "live": "kg",
193
+ "text": "UnitsOfMeasure [KG].Description: source='Kilogram' live='kg'"
194
+ }]
195
+ }]
196
+ }
197
+ ```
198
+
199
+ - `kind`: `changed`, `missing`, `extra` (detail row), `not_returned` or `not_applied` (setup action).
200
+ - `field`: path below the record (e.g. `Details[A].Qty`); `""` when the record itself is missing.
201
+ - `source` / `live`: set only for `changed`.
202
+
203
+ - `apply`: `{command, tenant, mode (all|plan|changed|dry_run), ok, failed, counts, errors, stopped, not_applied, files: [{file, entity, ok, errors}]}`; `counts` keys `create`, `update`, `unchanged`, `invoke`, `put`.
204
+ - `run`: `{command, tenant, counts: {passed, failed, skipped, not_run}, scenarios: [{file, outcome, misses, error?}], not_run}`; `misses` = failed expectation lines.
205
+ - `state`: `{command, tenant, mode (write|diff|assert), exit, changed, views: [{view, file, rows, status (wrote|changed|unchanged), differences}]}`.
206
+
176
207
  ## The data repo
177
208
 
178
209
  Your configuration lives in its own git repo.
@@ -155,6 +155,37 @@ Do not confuse them with each other or with `state`:
155
155
  `inventory/` and `findings/` are engagement outputs: not SEED_DIRS, never loaded by `apply`/`diff`, not scaffolded by `config init`.
156
156
  Binary `.adb` snapshots are rejected (XML only).
157
157
 
158
+ ### Machine-readable output (`--output json`)
159
+
160
+ `acu --output json <diff|apply|run|state> ...` prints one JSON document on stdout; progress and result lines move to stderr.
161
+ Exit codes do not change (`diff` still exits 2 on drift), and other commands ignore the flag.
162
+
163
+ `diff`:
164
+
165
+ ```json
166
+ {
167
+ "command": "diff", "tenant": "DEV", "base_url": "https://...", "drift": 1,
168
+ "files": [{
169
+ "file": "acu-config/baseline/10-uoms.yaml", "entity": "UnitsOfMeasure",
170
+ "records": 2,
171
+ "drifts": [{
172
+ "file": "acu-config/baseline/10-uoms.yaml", "entity": "UnitsOfMeasure",
173
+ "keys": {"UOM": "KG"}, "field": "Description", "kind": "changed",
174
+ "source": "Kilogram", "live": "kg",
175
+ "text": "UnitsOfMeasure [KG].Description: source='Kilogram' live='kg'"
176
+ }]
177
+ }]
178
+ }
179
+ ```
180
+
181
+ - `kind`: `changed`, `missing`, `extra` (detail row), `not_returned` or `not_applied` (setup action).
182
+ - `field`: path below the record (e.g. `Details[A].Qty`); `""` when the record itself is missing.
183
+ - `source` / `live`: set only for `changed`.
184
+
185
+ - `apply`: `{command, tenant, mode (all|plan|changed|dry_run), ok, failed, counts, errors, stopped, not_applied, files: [{file, entity, ok, errors}]}`; `counts` keys `create`, `update`, `unchanged`, `invoke`, `put`.
186
+ - `run`: `{command, tenant, counts: {passed, failed, skipped, not_run}, scenarios: [{file, outcome, misses, error?}], not_run}`; `misses` = failed expectation lines.
187
+ - `state`: `{command, tenant, mode (write|diff|assert), exit, changed, views: [{view, file, rows, status (wrote|changed|unchanged), differences}]}`.
188
+
158
189
  ## The data repo
159
190
 
160
191
  Your configuration lives in its own git repo.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "acumatica-cli"
3
- version = "0.35.0"
3
+ version = "0.36.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.35.0"
3
+ version = "0.36.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"