Skip to main content

Open Digital Rights Enforcement Framework python implementation

Project description

ODRE Framework

License

This is a pythom impementation of the ODRE approach to enforce ODRL policices. You can play with this implementation in our demo.

Quickstart

Install

pip install pyodre

Enforce ODRL policies

from pyodre.odre import ODRE

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)

Register new functions (descriptive + interpretable)

In order to include new operators or operands a user must provide the name space and a function prefix for the terms in the ontology extensions that is been integrated in ODRE. To do this, the user must include this information in the Interpreter class; for instance, a new function namespace prefix fnc: <http://organiation.org/namespace> and its function prefix fnc_. Then, the user must implement the function fnc_XX in the file python functions considering that XX should meet the term in the ontology, for instance the python function fnc_time will be called if the policy contains the term fnc:time.

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 supported
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 supported
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

BibTeX Citation

@misc{cimmino2024opendigitalrightsenforcement,
      title={Open Digital Rights Enforcement Framework (ODRE): from descriptive to enforceable policies}, 
      author={Andrea Cimmino and Juan Cano-Benito and Raúl García-Castro},
      year={2024},
      eprint={2409.17602},
      archivePrefix={arXiv},
      primaryClass={cs.CR},
      url={https://arxiv.org/abs/2409.17602}, 
}

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-1.0.5.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

pyodre-1.0.5-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pyodre-1.0.5.tar.gz
Algorithm Hash digest
SHA256 6caf8fb10a764af185f6bda46f19f2aee83f3aed4a8e33e1155bb1458e4db817
MD5 133b7613c37f123315740ad47ad808ab
BLAKE2b-256 d5ed3a6823068f2c17aee8c190ae2e5370dad8f0ac36bc34c703c0cf43d82422

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pyodre-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6d974c6cbe95e2c43d13e1149b406456cedc63057ae1c3d41152b7fe0ce1cd2b
MD5 983da33aab4b59098d7de8f4140c5897
BLAKE2b-256 ec6894240d126f2029ed85e17cc85813cc63bc02f989e0b6ab8e5d3b0ea8fc33

See more details on using hashes here.

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