Skip to main content

Open Digital Rights Enforcement Framework python implementation

Project description

ODRE Framework

Quickstart

To enforce an ODRL policy using the Python Interpreter

policy = """
{
    "@context": "http://www.w3.org/ns/odrl.jsonld",
    "@type": "Offer",
    "uid": "http://example.com/policy:6163",
    "profile": "http://example.com/odrl:profile:10",
    "permission": [{
       "target": "http://example.com/document:1234",
       "assigner": "http://example.com/org:616",
       "action": "distribute",
       "constraint": [{
           "leftOperand": "dateTime",
           "operator": "lt",
           "rightOperand":  { "@value": "2025-01-01", "@type": "xsd:date" }
       }]
   }]
}
"""
usage_decision = ODRE().enforce(policy)
print(usage_decision)

In the case a user wants to activate the DEBUG mode that shows the interpretable policies, the actions and the usage decision the following excerpt must be used. In addition, note that the interpreter can be modified

usage_decision = ODRE().set_debug(True).set_interpreter(PythonInterpreter()).enforce(policy)
print(usage_decision)

Interpolation

The policy templating is based on the Jinja language, it can be used to pass data variables that are not hardcoded in the policy increasing its privacy or it can be used to pass python native functions so they can be expressed in the policy and invoked during the enforcement.

In the following example a variable {{token}} is expressed in the policy and, as left operand, the function {{retrieve_token()}} is used. Note that the value of both is passed to the ODRE object under the parameter interpolations

policy = """
{
    "@context": "http://www.w3.org/ns/odrl.jsonld",
    "@type": "Offer",
    "uid": "http://example.com/policy:6163",
    "profile": "http://example.com/odrl:profile:10",
    "permission": [{
       "target": "http://example.com/document:1234",
       "assigner": "http://example.com/org:616",
       "action": "distribute",
       "constraint": [{
           "leftOperand": "dateTime",
           "operator": "lt",
           "rightOperand":  { "@value": "2025-01-01", "@type": "xsd:date" }
       },{
           "leftOperand": { "@value": "{{retrieve_token()}}" , "@type": "xsd:string" },
           "operator": "eq",
           "rightOperand":  { "@value": "{{token}}", "@type": "xsd:string" }
       }]
   }]
}
"""

def get_token():
    return "AAA"

usage_decision = ODRE().set_debug(True).enforce(policy, interpolations={'token' : 'AAA', 'retrieve_token' : get_token})
print(usage_decision)

Supported features

ODRL operantors

Operators Implementation status #
eq supported
gt supported
gteq unsupported
lt supported
lteq supported
neq supported
hasPart unsupported
isA unsupported
isAllOf unsupported
isAnyOf unsupported
isNoneOf unsupported
isPartOf unsupported

ODRL operands

Left Operands Implementation status #
absolutePosition unsupported
absoluteSize unsupported
absoluteSpatialPosition unsupported
absoluteTemporalPosition unsupported
count unsupported
dateTime unsupported
delayPeriod unsupported
deliveryChannel unsupported
device unsupported
elapsedTime unsupported
event unsupported
fileFormat unsupported
industry unsupported
language unsupported
media unsupported
meteredTime unsupported
payAmount unsupported
percentage unsupported
product unsupported
purpose unsupported
recipient unsupported
relativePosition unsupported
relativeSize unsupported
relativeSpatialPosition unsupported
relativeTemporalPosition unsupported
resolution unsupported
spatial unsupported
spatialCoordinates unsupported
system unsupported
systemDevice unsupported
timeInterval unsupported
unitOfCount unsupported
version unsupported
virtualLocation unsupported
Right Operands Implementation status #
policyUsage unsupported

ODRL actions

Actions Implementation status #
policyUsage unsupported

Extensions

In order to include new operators or operands a user must provide their name space and a function prefix for it. For instance, the new function http://XXXXX and its function prefix fnc_. Then, the user must implement the function fnc_XX in the file python functions

Project details


Download files

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

Source Distribution

pyodre-0.0.12.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

pyodre-0.0.12-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file pyodre-0.0.12.tar.gz.

File metadata

  • Download URL: pyodre-0.0.12.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.4

File hashes

Hashes for pyodre-0.0.12.tar.gz
Algorithm Hash digest
SHA256 eafa4fad3f651cb09e8c98c53dc14bfcdb989d569e0ac60051578ab6ad7f0ca1
MD5 3cda23399b2048ce57b846401001c977
BLAKE2b-256 f815f7e80e7bf7e2d3d2606aa1412bf39c7ef363a5307d2e7f6d8ea2807c1888

See more details on using hashes here.

Provenance

File details

Details for the file pyodre-0.0.12-py3-none-any.whl.

File metadata

  • Download URL: pyodre-0.0.12-py3-none-any.whl
  • Upload date:
  • Size: 10.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.4

File hashes

Hashes for pyodre-0.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 5e600d4864d0a5f0ca16f8aaacfc8c5007488e4f276312459e9e3efbf0fc886b
MD5 beb0ad434fed6094aa6b3b28489af87d
BLAKE2b-256 6fdb89d606056e50ff084d3b053d6edbb0bed7caeea383d60954288e1db93d39

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page