Source code for services.retrieval

import db, json, re

from utils import jsonp
from flask import Response
from flask.ext.restful import Resource


[docs]class Doc(Resource): """ Container class for all web requests for single documents """ @jsonp
[docs] def get(self, lang, smallkey): """ A REST endpoint for fetching a single document from the doc store. :param lang: A two letter language code for the response :param smallkey: A short key which uniquely identifies the dataset :type smallkey: str :returns: Response -- a JSON response object; None with a 404 code if the key was not matched """ doc = db.get_doc(smallkey, lang, self.version) if doc is None: return None, 404 return Response(json.dumps(doc), mimetype='application/json')
[docs]class Docs(Resource): """ Container class for all web requests for sets of documents """ @jsonp
[docs] def get(self, lang, smallkeylist, sortarg=''): """ A REST endpoint for fetching a single document from the doc store. :param lang: A two letter language code for the response :type lang: str :param smallkeylist: A comma separated string of short keys each of which identifies a single dataset :type smallkeylist: str :param sortargs: 'sort' if returned list should be sorted based on geometry :type sortargs: str :returns: list -- an array of JSON configuration fragments (empty error objects are added where keys do not match) """ keys = [x.strip() for x in smallkeylist.split(',')] unsorted_docs = [db.get_doc(smallkey, lang, self.version) for smallkey in keys] if sortarg == 'sort': # used to retrieve geometryType dbdata = [db.get_raw(smallkey) for smallkey in keys] lines = [] polys = [] points = [] for rawdata, doc in zip(dbdata, unsorted_docs): # Point if rawdata["data"]["en"]["geometryType"] == "esriGeometryPoint": points.append(doc) # Polygon elif rawdata["data"]["en"]["geometryType"] == "esriGeometryPolygon": polys.append(doc) # Line else: lines.append(doc) # Concat lists (first in docs = bottom of layer list) docs = polys + lines + points else: docs = unsorted_docs return Response(json.dumps(docs), mimetype='application/json')
[docs]class DocV1(Doc):
[docs] def __init__(self): super(DocV1, self).__init__() self.version = '1'
[docs]class DocsV1(Docs):
[docs] def __init__(self): super(DocsV1, self).__init__() self.version = '1'
[docs]class DocV2(Doc):
[docs] def __init__(self): super(DocV2, self).__init__() self.version = '2'
[docs]class DocsV2(Docs):
[docs] def __init__(self): super(DocsV2, self).__init__() self.version = '2'
[docs]class Version(Doc):
[docs] def get(self): with open("setup.py") as f: for line in f: if "version" in line: version_no = re.findall("\d+\.\d+.\d+", line) return version_no