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).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nemo_bulk_upload-1.1.0.tar.gz (40.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nemo_bulk_upload-1.1.0-py3-none-any.whl (47.5 kB view details)

Uploaded Python 3

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

Hashes for nemo_bulk_upload-1.1.0.tar.gz
Algorithm Hash digest
SHA256 0f4eb340eba8bf92e4795c07c8f59d8c430be13d2322e435c5531bd52aebae52
MD5 6b1c0fee0235ca301d893f451a88005d
BLAKE2b-256 3dde74d22a7fdcb5218f800f56cdd2bd5231fc136d95e4d154cee8b1697e48f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for nemo_bulk_upload-1.1.0.tar.gz:

Publisher: publish.yml on alexanderenrique/NEMO-bulk-upload

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nemo_bulk_upload-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nemo_bulk_upload-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 81bfe35be6583b8fb4e7f6cc3a64830ee82e099cc21f87e3485e4b9543ab1c34
MD5 2a8a2aa51f7f8c936ebb249e7e885f04
BLAKE2b-256 80881bbfa14751b5696dea4f9bd083a68f627c67bba5a7fb95c8201b9b900cff

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 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