acumatica-cli 0.8.1__tar.gz → 0.8.2__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 (32) hide show
  1. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/PKG-INFO +12 -8
  2. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/README.md +11 -7
  3. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/pyproject.toml +1 -1
  4. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/cli.py +12 -1
  5. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/__init__.py +0 -0
  6. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/bootstrap.py +0 -0
  7. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/bootstrap_plugin.cs +0 -0
  8. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/bootstrap_project.xml +0 -0
  9. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/client.py +0 -0
  10. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/config.py +0 -0
  11. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/extract.py +0 -0
  12. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/extract_manifest.yaml +0 -0
  13. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/firstlogin.py +0 -0
  14. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/models.py +0 -0
  15. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/output.py +0 -0
  16. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/run.py +0 -0
  17. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/seed.py +0 -0
  18. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/10-subaccounts.yaml +0 -0
  19. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/20-accounts.yaml +0 -0
  20. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/40-ledger.yaml +0 -0
  21. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/50-gl-preferences.yaml +0 -0
  22. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/60-ledger-company.yaml +0 -0
  23. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/90-uoms.yaml +0 -0
  24. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/company.yaml +0 -0
  25. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/credit-terms.yaml +0 -0
  26. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/features.yaml +0 -0
  27. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/env +0 -0
  28. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/gitignore +0 -0
  29. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/10-financial-year.yaml +0 -0
  30. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/20-master-calendar.yaml +0 -0
  31. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/30-open-periods.yaml +0 -0
  32. {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/tenant.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: acumatica-cli
3
- Version: 0.8.1
3
+ Version: 0.8.2
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>
@@ -188,29 +188,33 @@ ssh -o BatchMode=yes Administrator@acu-dev1.vm.internal '$PSVersionTable.PSVersi
188
188
 
189
189
  ## Development
190
190
 
191
+ Requires **GNU Make at least 3.82** — the Makefile uses `.ONESHELL`.
192
+ On macOS use Homebrew's `gmake` (`brew install make`); `/usr/bin/make` is 3.81 and fails the guard.
193
+ Elsewhere plain `make` is fine when it is GNU Make.
194
+
191
195
  ```sh
192
196
  git clone https://github.com/kborovik/acumatica-cli.git
193
197
  cd acumatica-cli
194
- make install # editable install as a global uv tool
195
- make check # offline gate: ruff, basedpyright strict, pytest
198
+ gmake install # editable install as a global uv tool
199
+ gmake check # offline gate: ruff, basedpyright strict, pytest
196
200
  ```
197
201
 
198
202
  The default test suite is fully offline.
199
203
  REST is faked with `httpx.MockTransport`, SSH with a monkeypatched `subprocess.run` — no live instance is needed.
200
- `make check` must pass before every commit.
204
+ `gmake check` must pass before every commit.
201
205
 
202
206
  ### Live end-to-end tier
203
207
 
204
- `make e2e` runs the opt-in live tier against a real Acumatica instance (pytest marker `e2e`, deselected by the default suite).
208
+ `gmake e2e` runs the opt-in live tier against a real Acumatica instance (pytest marker `e2e`, deselected by the default suite).
205
209
 
206
210
  Configuration is one file: a decrypted `.env` at the repo root names the instance — `ACU_BASE_URL`, `ACU_SSH`, `ACU_TENANT`, `ACU_PASSWORD`.
207
- `make e2e` refuses to start without it.
211
+ `gmake e2e` refuses to start without it.
208
212
 
209
213
  The tier is self-contained.
210
214
  Each run scaffolds a synthetic single-org company from the packaged `acu config init` templates into a temporary directory, copies the real `.env` into it, and runs the installed `acu` binary from there — no data repo, no pre-existing fixtures on the instance.
211
215
  Scratch tenants (`E2E`, `E2EA`, `E2EB`) are created on the way in and always deleted on the way out, so nothing persists.
212
216
 
213
217
  ```sh
214
- make e2e # whole tier, about 20 minutes
215
- make e2e FILE=test_provision_lifecycle # one file, by stem or path
218
+ gmake e2e # whole tier, about 20 minutes
219
+ gmake e2e FILE=test_provision_lifecycle # one file, by stem or path
216
220
  ```
@@ -171,29 +171,33 @@ ssh -o BatchMode=yes Administrator@acu-dev1.vm.internal '$PSVersionTable.PSVersi
171
171
 
172
172
  ## Development
173
173
 
174
+ Requires **GNU Make at least 3.82** — the Makefile uses `.ONESHELL`.
175
+ On macOS use Homebrew's `gmake` (`brew install make`); `/usr/bin/make` is 3.81 and fails the guard.
176
+ Elsewhere plain `make` is fine when it is GNU Make.
177
+
174
178
  ```sh
175
179
  git clone https://github.com/kborovik/acumatica-cli.git
176
180
  cd acumatica-cli
177
- make install # editable install as a global uv tool
178
- make check # offline gate: ruff, basedpyright strict, pytest
181
+ gmake install # editable install as a global uv tool
182
+ gmake check # offline gate: ruff, basedpyright strict, pytest
179
183
  ```
180
184
 
181
185
  The default test suite is fully offline.
182
186
  REST is faked with `httpx.MockTransport`, SSH with a monkeypatched `subprocess.run` — no live instance is needed.
183
- `make check` must pass before every commit.
187
+ `gmake check` must pass before every commit.
184
188
 
185
189
  ### Live end-to-end tier
186
190
 
187
- `make e2e` runs the opt-in live tier against a real Acumatica instance (pytest marker `e2e`, deselected by the default suite).
191
+ `gmake e2e` runs the opt-in live tier against a real Acumatica instance (pytest marker `e2e`, deselected by the default suite).
188
192
 
189
193
  Configuration is one file: a decrypted `.env` at the repo root names the instance — `ACU_BASE_URL`, `ACU_SSH`, `ACU_TENANT`, `ACU_PASSWORD`.
190
- `make e2e` refuses to start without it.
194
+ `gmake e2e` refuses to start without it.
191
195
 
192
196
  The tier is self-contained.
193
197
  Each run scaffolds a synthetic single-org company from the packaged `acu config init` templates into a temporary directory, copies the real `.env` into it, and runs the installed `acu` binary from there — no data repo, no pre-existing fixtures on the instance.
194
198
  Scratch tenants (`E2E`, `E2EA`, `E2EB`) are created on the way in and always deleted on the way out, so nothing persists.
195
199
 
196
200
  ```sh
197
- make e2e # whole tier, about 20 minutes
198
- make e2e FILE=test_provision_lifecycle # one file, by stem or path
201
+ gmake e2e # whole tier, about 20 minutes
202
+ gmake e2e FILE=test_provision_lifecycle # one file, by stem or path
199
203
  ```
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "acumatica-cli"
3
- version = "0.8.1"
3
+ version = "0.8.2"
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
  readme = "README.md"
@@ -558,7 +558,18 @@ def diff_cmd(inst: Instance, files: tuple[Path, ...]) -> None:
558
558
  with AcumaticaClient(inst) as client:
559
559
  for path in paths:
560
560
  baseline = seed.load_baseline(path)
561
- drifts += seed.diff(client, baseline)
561
+ # same file banner as apply so a long multi-file diff shows
562
+ # progress instead of silence until the final status line
563
+ output.data(
564
+ f"{path} -> {inst.tenant} on {inst.base_url} ({baseline.entity})"
565
+ )
566
+ file_drifts = seed.diff(client, baseline)
567
+ drifts += file_drifts
568
+ n = 1 if isinstance(baseline, seed.ActionFile) else len(baseline.records)
569
+ if file_drifts:
570
+ output.data(f" {n} record(s), {len(file_drifts)} drift(s)")
571
+ else:
572
+ output.data(f" {n} record(s) ok")
562
573
  _exit_on_drift(inst, drifts, len(paths))
563
574
 
564
575