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
- The available implemented Left Operands from those specified in the ODRL Vocabulary & Expression 2.2 are the following:
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 | ✗ |
- The available implemented Right Operands from those specified in the ODRL Vocabulary & Expression 2.2 are the following:
Right Operands | Implementation status | # |
---|---|---|
policyUsage | unsupported | ✗ |
ODRL actions
- The available implemented Right Operands from those specified in the ODRL Vocabulary & Expression 2.2 are the following:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyodre-0.0.4.tar.gz
.
File metadata
- Download URL: pyodre-0.0.4.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8f060faaf6918f1a3ca87079b45728425a536a790801a7a10c4886c3606bf421 |
|
MD5 | be3bdd61588c213f5d970c6dcf2872bc |
|
BLAKE2b-256 | fa6c52b69d6cfdfb2bac57e2a8c04e07d7d83c08a43d37c8a7f2c2512978051d |
Provenance
File details
Details for the file pyodre-0.0.4-py3-none-any.whl
.
File metadata
- Download URL: pyodre-0.0.4-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 57a4b1138a9589ff6413cf5f7a6fcfc770ff59bd4a47850b200cc68aa3181503 |
|
MD5 | 603fda8bbe4a210296d6825a10015839 |
|
BLAKE2b-256 | 940c549be39d55f6fc209f8e73de6aea5178fc4f9d7118c5b7f7605cf6699e06 |