NEMO Bulk Upload
Plugin for NEMO (and NEMO-CE) that lets billing staff and facility managers bulk-create records from Excel or CSV using friendly names (not IDs). Staff pick a record type, drop a spreadsheet, click Check for errors, fix anything red, then click Create records.
Requires NEMO or NEMO-CE ≥ 7.3.0 and Python ≥ 3.10.
Features (v1.1)
- Tool usage (
UsageEvent) uploads: username, tool name, project / PTA, start, end, note. - Billing rates (
NEMO_billing.rates.Rate) uploads when NEMO-billing is installed: rate type, item, category, amount, effective date (for annual FY changes). Creates new dated rates; does not overwrite older ones. - Header aliases (
User→ Username,Tool→ Tool name / Item,Project/PTA→ Project / PTA). - First sheet of an
.xlsxis used (no need to rename it to "Data"). - Extra columns are warned and ignored (e.g. display Name, Charge check).
- Missing or blank Project / PTA defaults to the user's first active project, with a warning that names the PTA.
- Datetimes accept ISO text (
2026-08-10 15:30:00), Excel serials, and siteDATETIME_INPUT_FORMATS. - Create stays locked until the current file passes Check with zero errors (warnings are OK).
- Create-only: an
idcolumn is rejected. - Optional Excel / CSV template download and Download errors spreadsheet.
Install
pip install NEMO-bulk-upload
# or in Docker: NEMO_EXTRA_PIP_PACKAGES="NEMO-bulk-upload"
In site settings.py, list the plugin before NEMO so the navbar override wins:
INSTALLED_APPS = [
"NEMO_bulk_upload.apps.BulkUploadConfig", # before NEMO
"NEMO",
...
]
Then:
python manage.py migrate bulk_upload
Optional: billing rates
To enable Billing rates on the picker, install NEMO-billing and add its apps before NEMO:
pip install NEMO-billing
INSTALLED_APPS = [
"NEMO_bulk_upload.apps.BulkUploadConfig",
"NEMO_billing",
"NEMO_billing.rates",
# "NEMO_billing.invoices", # optional
"NEMO",
...
]
Without billing installed, only Tool usage appears (same as v1.0).
Permissions
Grant on the user or group (Detailed Admin → Users / Groups):
bulk_upload | Can use bulk upload— open the page and run Check / CreateNEMO | Can add usage event— required to Create tool usage rowsrates | Can add rate— required to Create billing rate rows (when NEMO-billing is installed)
Landing page icon
Detailed Admin → Landing page choices → add an entry with URL /bulk_upload/ and a 128×128 image.
Navbar
When the plugin is installed before NEMO, Bulk upload appears under Administration for users with use_bulk_upload.
Usage
Tool usage
- Open Bulk upload (
/bulk_upload/). - Choose Tool usage.
- Optionally download the Excel template (or keep using your existing workbook).
- Drop
.xlsxor.csvand click Check for errors. - Review warnings (extra columns, defaulted PTAs) and fix any red cells in Excel, then drop again.
- When Check passes, click Create records and confirm.
Billing rates (annual FY change)
One spreadsheet row creates one new Rate with an Effective date. Older rates for earlier dates stay in place for historical invoices.
| Column | Required? | Notes |
|---|---|---|
| Rate type | Yes | Tool usage, TOOL_USAGE, Consumable/Supply, Staff charge, … |
| Item | When type is item-specific | Tool, area, or consumable name (Tool / Area / Consumable aliases OK) |
| Category | When type is category-specific | e.g. Local, Industry |
| Amount | Yes | 55, 55.00, or $55 |
| Effective date | Yes | e.g. 2026-09-01 or 9/1/2026 |
| Flat / Daily / Schedule / Minimum charge / Service fee | No |
Example:
Rate type,Item,Category,Amount,Effective date,Flat
Tool usage,AIX200,Local,55.00,2026-09-01,No
Tool usage,AIX200,Industry,150.00,2026-09-01,No
Consumable/Supply,Acetone,,33.00,2026-09-01,Yes
Staff charge rates leave Item blank. Consumable rates must be Flat = Yes.
Development
./scripts/dev_reinstall.sh -n /path/to/nemo-ce
python run_tests.py
Rate tests are skipped automatically if NEMO_billing.rates is not in INSTALLED_APPS.
License
NIST public-domain statement (see LICENSE).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nemo_bulk_upload-1.1.0.tar.gz.
File metadata
- Download URL: nemo_bulk_upload-1.1.0.tar.gz
- Upload date:
- Size: 40.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f4eb340eba8bf92e4795c07c8f59d8c430be13d2322e435c5531bd52aebae52
|
|
| MD5 |
6b1c0fee0235ca301d893f451a88005d
|
|
| BLAKE2b-256 |
3dde74d22a7fdcb5218f800f56cdd2bd5231fc136d95e4d154cee8b1697e48f3
|
Provenance
The following attestation bundles were made for nemo_bulk_upload-1.1.0.tar.gz:
Publisher:
publish.yml on alexanderenrique/NEMO-bulk-upload
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nemo_bulk_upload-1.1.0.tar.gz -
Subject digest:
0f4eb340eba8bf92e4795c07c8f59d8c430be13d2322e435c5531bd52aebae52 - Sigstore transparency entry: 2483974644
- Sigstore integration time:
-
Permalink:
alexanderenrique/NEMO-bulk-upload@c637a46214655aee2e4db34d56249869f2a4bb8c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/alexanderenrique
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c637a46214655aee2e4db34d56249869f2a4bb8c -
Trigger Event:
push
-
Statement type:
File details
Details for the file nemo_bulk_upload-1.1.0-py3-none-any.whl.
File metadata
- Download URL: nemo_bulk_upload-1.1.0-py3-none-any.whl
- Upload date:
- Size: 47.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81bfe35be6583b8fb4e7f6cc3a64830ee82e099cc21f87e3485e4b9543ab1c34
|
|
| MD5 |
2a8a2aa51f7f8c936ebb249e7e885f04
|
|
| BLAKE2b-256 |
80881bbfa14751b5696dea4f9bd083a68f627c67bba5a7fb95c8201b9b900cff
|
Provenance
The following attestation bundles were made for nemo_bulk_upload-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on alexanderenrique/NEMO-bulk-upload
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nemo_bulk_upload-1.1.0-py3-none-any.whl -
Subject digest:
81bfe35be6583b8fb4e7f6cc3a64830ee82e099cc21f87e3485e4b9543ab1c34 - Sigstore transparency entry: 2483974691
- Sigstore integration time:
-
Permalink:
alexanderenrique/NEMO-bulk-upload@c637a46214655aee2e4db34d56249869f2a4bb8c -
Branch / Tag:
refs/heads/main - Owner: https://github.com/alexanderenrique
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c637a46214655aee2e4db34d56249869f2a4bb8c -
Trigger Event:
push
-
Statement type: