Development¶
Setting up a development environment¶
Check out the code.
$ git clone https://github.com/OnroerendErfgoed/uriregistry.git
Create a virtual environment (require virtualenvwrapper).
# Create a new environment
$ mkvirtualenv uriregistry
# Activate an existing environment
$ workon uriregistry
Install requirements.
$ pip install -r requirements-dev.txt
$ python setup.py develop
Run the application with the sample config sample.yaml
.
$ pserve development.ini
Point your browser at http://localhost:6543 to see it in action!
Configuring a UriRegistry¶
Your UriRegistry can be configured with a YAML file. By default, a file
sample.yaml
in the uriregistry package is used, but you can change
this withing your own development.ini
.
uriregistry.config = %(here)s/myapp.yaml
In this config file you specify which applications can be called by the registry when looking for URI’s in use. You can also specify for each URI template in what application it might be found.
applications:
- uri: http://localhost:5555
name: app1
service_url: http://localhost:5555/references
- uri: http://localhost:2222
name: app2
service_url: http://localhost:2222/references
uri_templates:
- match_uri: http://id.erfgoed.net/foobar/\d+
applications:
- http://localhost:5555
- http://localhost:2222
- match_uri: http://id.erfgoed.net/bar/\w+
applications:
- http://localhost:5555
- match_uri: http://id.erfgoed.net/foo/.+
applications:
- http://localhost:2222
Testing¶
Tests are run with pytest. We support the last python 2.x release and the two most current python 3.x release. To make testing easier, use tox.
# Run all tests for all environments
$ tox
# No coverage
$ py.test
# Coverage
$ py.test --cov uriregistry --cov-report term-missing tests
Adding pyramid_urireferencer to an application¶
When you want to add an application to the network of applications, you need to
include the pyramid_urireferencer
library. Add it to your
requirements.txt
and setup.py
requirements.
Add the library to your application by including the following in your main:
config.include('pyramid_urireferencer')
Now you need to configure your application. Edit your development.ini
and add two configuration options.
# settings for the urireferencer
# A dotted name indicating where your referencer can be found
urireferencer.referencer = myapp.referencer.MyReferencer
# The url pointing towards your own UriRegistry
urireferencer.registry_url = http://localhost:6543
Of course, you also need to write this referencer. To do this, create an object
that implements the abstract
pyramid_urireferencer.referencer.AbstractReferencer
. Depending on your
needs it might be easier to extend the
pyramid_urireferencer.referencer.Referencer
. This class already
has a is_referenced()
method. But the method requires a function get_uri()
to determine the uri of the current request.
The get_uri()
still needs to be implemented. The referencer also requires you to implement the
references()
method.
from pyramid_urireferencer.referencer import Referencer
from pyramid_urireferencer.models import ApplicationResponse
class DemoReferencer(Referencer):
def get_uri(self, request):
id = request.matchdict['id']
if request.data_manager.get(aid).type == 'cirkel':
return request.registry.settings['cirkel.uri'].format(id)
else:
return request.registry.settings['square.uri'].format(id)
def references(self, uri):
try:
# Generate a demo response
has_references = True
count = 8
items = []
for x in range(1, 5):
items.append(Item("itemname_" + str(x), "http://demo_uri/" + str(x)))
success = True
except:
has_references = None
count = None
items = None
success = False
return ApplicationResponse(
'My application',
'http://app.me',
'http://app.me/references',
success,
has_references,
count,
items
)