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.
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/PKG-INFO +12 -8
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/README.md +11 -7
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/pyproject.toml +1 -1
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/cli.py +12 -1
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/__init__.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/bootstrap.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/bootstrap_plugin.cs +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/bootstrap_project.xml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/client.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/config.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/extract.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/extract_manifest.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/firstlogin.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/models.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/output.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/run.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/seed.py +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/10-subaccounts.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/20-accounts.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/40-ledger.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/50-gl-preferences.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/60-ledger-company.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/90-uoms.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/company.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/credit-terms.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/features.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/env +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/gitignore +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/10-financial-year.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/20-master-calendar.yaml +0 -0
- {acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/30-open-periods.yaml +0 -0
- {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.
|
|
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
|
-
|
|
195
|
-
|
|
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
|
-
`
|
|
204
|
+
`gmake check` must pass before every commit.
|
|
201
205
|
|
|
202
206
|
### Live end-to-end tier
|
|
203
207
|
|
|
204
|
-
`
|
|
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
|
-
`
|
|
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
|
-
|
|
215
|
-
|
|
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
|
-
|
|
178
|
-
|
|
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
|
-
`
|
|
187
|
+
`gmake check` must pass before every commit.
|
|
184
188
|
|
|
185
189
|
### Live end-to-end tier
|
|
186
190
|
|
|
187
|
-
`
|
|
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
|
-
`
|
|
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
|
-
|
|
198
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/10-subaccounts.yaml
RENAMED
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/20-accounts.yaml
RENAMED
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/40-ledger.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/baseline/90-uoms.yaml
RENAMED
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/company.yaml
RENAMED
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/credit-terms.yaml
RENAMED
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/bootstrap/features.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/10-financial-year.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{acumatica_cli-0.8.1 → acumatica_cli-0.8.2}/src/acumatica_cli/templates/setup/30-open-periods.yaml
RENAMED
|
File without changes
|
|
File without changes
|