Skip to main content

NEMO Bulk Upload

Code style: black

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 .xlsx is 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 site DATETIME_INPUT_FORMATS.
  • Create stays locked until the current file passes Check with zero errors (warnings are OK).
  • Create-only: an id column 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 / Create
  • NEMO | Can add usage event — required to Create tool usage rows
  • rates | 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

  1. Open Bulk upload (/bulk_upload/).
  2. Choose Tool usage.
  3. Optionally download the Excel template (or keep using your existing workbook).
  4. Drop .xlsx or .csv and click Check for errors.
  5. Review warnings (extra columns, defaulted PTAs) and fix any red cells in Excel, then drop again.
  6. 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).

Metadata

Release files for NEMO-bulk-upload 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for NEMO-bulk-upload 1.1.0
File Size Uploaded
nemo_bulk_upload-1.1.0.tar.gz 40.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for NEMO-bulk-upload 1.1.0
File Interpreter ABI Platform
nemo_bulk_upload-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 88.0 kB

Release files / nemo_bulk_upload-1.1.0.tar.gz

Download URL nemo_bulk_upload-1.1.0.tar.gz
Size 40.5 kB
Tags Source
SHA-256 checksum
How to use checksums
0f4eb340eba8bf92e4795c07c8f59d8c430be13d2322e435c5531bd52aebae52
BLAKE2b-256 checksum
How to use checksums
3dde74d22a7fdcb5218f800f56cdd2bd5231fc136d95e4d154cee8b1697e48f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release files / nemo_bulk_upload-1.1.0-py3-none-any.whl

Download URL nemo_bulk_upload-1.1.0-py3-none-any.whl
Size 47.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
81bfe35be6583b8fb4e7f6cc3a64830ee82e099cc21f87e3485e4b9543ab1c34
BLAKE2b-256 checksum
How to use checksums
80881bbfa14751b5696dea4f9bd083a68f627c67bba5a7fb95c8201b9b900cff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page