Skip to content
This repository has been archived by the owner on Sep 23, 2018. It is now read-only.

Commit

Permalink
eliminate the need to use a global Graph object when building the Reg…
Browse files Browse the repository at this point in the history
…isterOfRegister view.

Added a simple example file to show how to write a register of Cats.
  • Loading branch information
ashleysommer committed Jul 25, 2018
1 parent 561ae95 commit 915920e
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 9 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ __pycache__/

# PyCharm
/.idea/
/.vscode/

# Mac
.DS_Store
Expand All @@ -23,3 +24,6 @@ dist/

# Virtualenv
/venv/

# generated rofr.ttl
rofr.ttl
56 changes: 56 additions & 0 deletions example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from flask import Flask, Response, request
from pyldapi import setup as pyldapi_setup
from pyldapi import RegisterOfRegistersRenderer, RegisterRenderer

cats = [
{
"name": "Jonny",
"breed": "Tortoiseshell",
"age": 10,
"color": "orange",
}, {
"name": "Sally",
"breed": "Manx",
"age": 3,
"color": "brown",
}, {
"name": "Spud",
"breed": "Persian",
"age": 7,
"color": "grey",
}
]


app = Flask(__name__)


@app.route('/cats')
def reg1():
cat_items = [("http://example.com/id/cat/{}".format(i['name']), i['name']) for i in cats]
r = RegisterRenderer(request,
request.url_root + 'cats',
"Cats Register",
"A complete register of my cats.",
cat_items,
["http://example.com/Cat"],
len(cat_items)
)
return r.render()


@app.route('/')
def index():
rofr = RegisterOfRegistersRenderer(request,
request.url,
"Register of Registers",
"A register of all of my registers.",
"./rofr.ttl"
)
return rofr.render()

thread = pyldapi_setup(app, '.', 'http://127.0.0.1:8081')

if __name__ == "__main__":
app.run("127.0.0.1", 8081, debug=True, threaded=True)
thread.join()
17 changes: 8 additions & 9 deletions pyldapi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@
from abc import ABCMeta, abstractmethod


g = Graph()


def setup(app, api_home_dir, api_uri):
"""
Used to set up the Register of Registers for this LDAPI
Expand All @@ -23,7 +20,7 @@ def setup(app, api_home_dir, api_uri):
:param api_uri: URI base of the API
:type api_uri: string
:return: the thread executing this task
:rtype: thread
:rtype: Thread
"""
t = Thread(target=_make_rofr_rdf, args=(app, api_home_dir, api_uri))
t.start()
Expand All @@ -45,13 +42,13 @@ def _make_rofr_rdf(app, api_home_dir, api_uri):
"""
sleep(1) # to ensure that this occurs after the Flask boot
print('making RofR')

g = Graph()
# get the RDF for each Register, extract the bits we need, write them to graph g
for rule in app.url_map.iter_rules():
if '<' not in str(rule): # no registers can have a Flask variable in their path
# make the register view URI for each possible register
candidate_register_uri = api_uri + str(rule) + '?_view=reg&_format=text/turtle'
get_filtered_register_graph(candidate_register_uri)
get_filtered_register_graph(candidate_register_uri, g)

# serialise g
with open(os.path.join(api_home_dir, 'rofr.ttl'), 'w') as f:
Expand All @@ -60,16 +57,19 @@ def _make_rofr_rdf(app, api_home_dir, api_uri):
print('finished making RofR')


def get_filtered_register_graph(register_uri):
def get_filtered_register_graph(register_uri, g):
"""
Gets a filtered version (label, comment, contained item classes & subregisters only) of the each register for the
Register of Registers
:param register_uri: the public URI of the register
:type register_uri: string
:param g: the rdf graph to append registers to
:type g: Graph
:return: True if ok, else False
:rtype: boolean
"""
assert isinstance(g, Graph)
logging.debug('assessing register candidate ' + register_uri.replace('?_view=reg&_format=text/turtle', ''))
try:
r = requests.get(register_uri)
Expand Down Expand Up @@ -106,7 +106,6 @@ def get_filtered_register_graph(register_uri):
}}
'''.format(register_uri.replace('?_view=reg&_format=text/turtle', ''))

global g
g += g2.query(q)

return True
Expand All @@ -120,7 +119,7 @@ def get_filtered_register_graph(register_uri):

class View:
"""
A class containing elements for a Linked Data 'movel view', including MIME type 'formats'
A class containing elements for a Linked Data 'model view', including MIME type 'formats'
"""
def __init__(
self,
Expand Down

0 comments on commit 915920e

Please sign in to comment.