# DjangoLDP TAMIS
Django/[DjangoLDP](https://git.startinblox.com/djangoldp-packages/djangoldp) package that provides the backend data model for TAMIS, a workflow tool for audiovisual post-production. It exposes the domain as Linked Data Platform (LDP) resources so it can be consumed by the matching web-components package [solid-tamis](https://git.startinblox.com/components/solid-tamis).
## Functional overview
TAMIS coordinates post-production work between a Client (who orders content finishing) and a Provider (who performs it) — typically subtitling, dubbing, mix, conform, color, etc. Work is tracked against the broadcaster-style editorial hierarchy Serie → Season → Programme → EditorialWork, with standalone movies sitting directly as a Programme (no series); both shapes are first-class.
The unit of work is a `Prestation` — one contracted job attached to an EditorialWork. Prestations are grouped under a `Commande` (a purchase order between a specific Client and Provider) and cross-referenced to external systems via `Identifiant`s (issuer Agent + identifier string), which is how a TAMIS EditorialWork maps to a broadcaster’s asset ID.
Every prestation carries an ordered timeline of `Step`s built from a template. Three steps are seeded at app startup — Refusé, Validation, Livraison — and the workflow is enforced by signals:
the last two steps of any prestation are always Livraison (delivery) → Validation (client sign-off);
adding a Refusé step (rejection) automatically re-queues Livraison + Validation after it, so a rejection cleanly restarts the delivery → validation loop without the operator having to rebuild the timeline;
step ordering is renumbered after every change so the UI can render a stable sequence.
Each prestation produces deliverables: an empty Asset is auto-created on prestation creation; assets hold MediaResource`s (the actual file: name, size, `Format), broken down into Track / AudioTrack / VideoTrack. EditorialWork.assets is a computed rollup of every asset across the editorial work’s prestations — the “all deliverables for this episode/film” view.
Access is team-based, not ownership-based. Every prestation owns three Django groups — admins / editors / visitors — wired to ACLPermissions. The same prestation can therefore have the client’s QA reviewers as visitors, the provider’s operators as editors, and a studio lead as admin. TamisProfile carries enterprise/title/job/phone so the UI can show who’s who across organisations, and Favourite lets users pin prestations for quick access.
## What it provides
A Django app (djangoldp_tamis) that models the editorial hierarchy and the delivery workflow around it:
Editorial hierarchy — Serie → Season → Programme → EditorialWork, typed against the [EBUCore Plus](http://www.ebu.ch/metadata/ontologies/ebucoreplus) ontology (ec:Programme, ec:EditorialObject, …).
Prestations — a Prestation is a unit of work attached to an EditorialWork, with a template-driven ordered list of Step`s (`StepToTemplate → PrestationStep). Three seeded steps — Refusé, Validation, Livraison — are created automatically on app startup and their order is maintained by signals (a rejection re-appends Livraison + Validation; the last two steps are always guaranteed).
Per-prestation access control — each Prestation owns three Django Group`s (`admins, editors, visitors) wired to ACLPermissions, so team membership (not object ownership) drives who can view/change/control a prestation. Memberships are exposed on LDPUser.prestations as a dynamic nested container.
Commandes — Commande groups prestations under a Client/Provider pair, with free-form Identifiant`s (issuer `Agent + identifier string).
Assets & media — Asset (inherits prestation permissions) → MediaResource → Track / AudioTrack / VideoTrack, with Format lookup. EditorialWork.assets is a computed nested container aggregating all assets across its prestations.
Profile — TamisProfile (one-to-one with the user), auto-created on user save.
Admin — registers all public models under DjangoLDPAdmin with inlines for prestation steps, assets, and media tracks; replaces the default Group admin with a read-only variant.
Installed via djangoldp~=3.1.0, djangoldp_account~=3.1.0, djangoldp_dashboard~=3.0.0.
## Installation
See the [server installation guide](https://git.startinblox.com/applications/tamis-poc/-/snippets/17) for the full DjangoLDP server setup.
## Sample data
A fixture provides one movie programme with one editorial work and one serie/season/programme with two editorial works, each with one prestation:
`sh ./manage.py loaddata sample_tamis `
Also shipped under djangoldp_tamis/fixtures/: tamis_dashboard.json (dashboard layout) and RDF exports (sample_tamis_data.ttl, sample_tamis_data.nt).
Metadata
Release files for djangoldp-tamis 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| djangoldp_tamis-2.1.0.tar.gz | 24.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| djangoldp_tamis-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.7 kB
Release files / djangoldp_tamis-2.1.0.tar.gz
| Download URL | djangoldp_tamis-2.1.0.tar.gz |
|---|---|
| Size | 24.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6563f198c22fad53d462574d378312902794ea76396583fc78f717187315dcd9
|
|
BLAKE2b-256 checksum How to use checksums |
fea7a91accc4cb79d77638bffd54d348873ce3509ff604d116914cf438b5b1b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/45.0 requests/2.34.2 requests-toolbelt/1.0.0 urllib3/2.7.0 tqdm/4.68.3 importlib-metadata/9.0.0 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.11.15
|
Release files / djangoldp_tamis-2.1.0-py3-none-any.whl
| Download URL | djangoldp_tamis-2.1.0-py3-none-any.whl |
|---|---|
| Size | 47.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09ba8913d9b60abbc72251c05835266898bd08a28be4e81d643d037c095460fd
|
|
BLAKE2b-256 checksum How to use checksums |
10fe670d9dea52deb8ccd846c6390e162f744cae102639b2d61f40e8d3ab6e13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/45.0 requests/2.34.2 requests-toolbelt/1.0.0 urllib3/2.7.0 tqdm/4.68.3 importlib-metadata/9.0.0 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.11.15
|