Python Database API interface: Difference between revisions

From University Map Wiki
Jump to navigationJump to search
(Created)
 
No edit summary
Line 1: Line 1:
There is an (experimental) Python interface to the Database API which may make working with the API from Python a little easier. The [[Media:ucammap-0.71.tar.gz|current version is available here]].
There is an (experimental) Python interface to the Database API which may make working with the API from Python a little easier. The [[Media:ucammap-0.72.tar.gz|current version is available here]]. Note that while the distribution is really called 'ucammap' this wiki will upper-case the initial 'U' in the name of the distributed file - adapt the installation instructions accordingly.


Here is the README.txt file form the distributon:
Here is the README.txt file form the distribution:


<pre><nowiki>
<pre><nowiki>
Line 19: Line 19:
setup.py.
setup.py.


   tar zxf ucammap-0.71.tar.gz
   tar zxf ucammap-0.72.tar.gz
   cd ucammap-0.71
   cd ucammap-0.72
   python3 setup.py install
   python3 setup.py install



Revision as of 08:08, 25 October 2012

There is an (experimental) Python interface to the Database API which may make working with the API from Python a little easier. The current version is available here. Note that while the distribution is really called 'ucammap' this wiki will upper-case the initial 'U' in the name of the distributed file - adapt the installation instructions accordingly.

Here is the README.txt file form the distribution:

University Map Python API
=========================

This is a fairly simple Python 3 interface to the database API to the
University of Cambridge Map. The underlying API is described at

  https://wiki.cam.ac.uk/university-map/The_Database_API

Installation
------------

Unpack the distribution, move into the directory created, and run
setup.py. You will probably need privileged (i.e. root) access to run
setup.py.

  tar zxf ucammap-0.72.tar.gz
  cd ucammap-0.72
  python3 setup.py install

Adapt the package version number as necessary. Note that as
distributed this is a Python v3 module and so should be installed
using your system's copy of Python 3 if it has both v2 and v3
installed.

Use
---

Note, again, that as distributed this is a Python v3 module. It should
be easy enough to convert it to run under Python 2 if needed.

The code contains extensive in-line documentation so you may want to
look at that, in the source, via the built in help() function, or in
the ucammap.pydoc file included in the distribution.

The interface is implemented by the 'ucammap' module which should be
imported in the usual way. The primary (close to only) way to use this
is to create a ucammap.API object and then call its 'search'
method. All keyword arguments to search are converted to URL
parameters and included in a call to the underlying interface - see
the API documentation for more detail of what's possible. The result
is a (possibly empty) sequence of objects representing the selected
entities.

Throughout the API, collections of information are represented by one
of three Python object types - Entity, Info, and Address. Information
about the objects can be retrieved via attributes of the objects -
these return either strings or other objects, or sequences of strings
or objects as appropriate. See the underlying API documentation for
more details of what's available, and the module documentation for how
to access it. Objects also provide utility methods for transforming
their data - for example Entity provides a sort_name method to format
names in a format suitable for sorting.

The API class uses the standard logging module (at 'info' and 'debug')
to track the retrieval of API data.

The following provides a simple demonstration (also included in the
distribution as example.py):

#!/usr/bin/python3

import ucammap
import logging
logging.basicConfig(level=logging.INFO)

database = ucammap.API()

results = database.search(q = 'computing')

for result in results:
    print(result.full_name())
    if result.info:
        for k in result.info_keys():
            print("  " + k.capitalize() + ":")
            for i in result.filtered_info(k):
                print("     ", i.value)
    print()