95 lines
2 KiB
Python
95 lines
2 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# vi:si:et:sw=4:sts=4:ts=4
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
from tornado.web import Application
|
||
|
from tornado.httpserver import HTTPServer
|
||
|
from tornado.ioloop import IOLoop
|
||
|
from flask import Flask
|
||
|
|
||
|
import oxtornado
|
||
|
from oxtornado import actions
|
||
|
|
||
|
import meta
|
||
|
import utils
|
||
|
|
||
|
import logging
|
||
|
logger = logging.getLogger('metaoml')
|
||
|
logging.basicConfig(level=logging.DEBUG)
|
||
|
|
||
|
def findMetadata(data):
|
||
|
'''
|
||
|
takes {
|
||
|
query: string,
|
||
|
}
|
||
|
returns {
|
||
|
items: [{
|
||
|
key: value
|
||
|
}]
|
||
|
}
|
||
|
key is one of the supported identifiers: isbn10, isbn13...
|
||
|
'''
|
||
|
response = {}
|
||
|
logger.debug('findMetadata %s', data)
|
||
|
response['items'] = meta.find(data['query'])
|
||
|
return response
|
||
|
actions.register(findMetadata)
|
||
|
|
||
|
def getMetadata(data):
|
||
|
'''
|
||
|
takes {
|
||
|
key: value
|
||
|
includeEdits: boolean
|
||
|
}
|
||
|
key can be one of the supported identifiers: isbn10, isbn13, oclc, olid,...
|
||
|
'''
|
||
|
logger.debug('getMetadata %s', data)
|
||
|
if 'includeEdits' in data:
|
||
|
include_edits = data.pop('includeEdits')
|
||
|
else:
|
||
|
include_edits = False
|
||
|
key, value = data.iteritems().next()
|
||
|
if key == 'isbn':
|
||
|
value = utils.normalize_isbn(value)
|
||
|
response = meta.lookup(key, value)
|
||
|
if response:
|
||
|
response['primaryid'] = [key, value]
|
||
|
return response
|
||
|
actions.register(getMetadata)
|
||
|
|
||
|
def run():
|
||
|
root_dir = os.path.normpath(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..'))
|
||
|
|
||
|
options = {
|
||
|
'debug': True
|
||
|
}
|
||
|
app = Flask('metaoml')
|
||
|
|
||
|
handlers = [
|
||
|
(r'/api/', oxtornado.ApiHandler, dict(app=app)),
|
||
|
]
|
||
|
|
||
|
http_server = HTTPServer(Application(handlers, **options))
|
||
|
|
||
|
port = 9855
|
||
|
address = ''
|
||
|
http_server.listen(port, '')
|
||
|
|
||
|
|
||
|
main = IOLoop.instance()
|
||
|
|
||
|
if ':' in address:
|
||
|
host = '[%s]' % address
|
||
|
elif not address:
|
||
|
host = '[::1]'
|
||
|
else:
|
||
|
host = address
|
||
|
url = 'http://%s:%s/' % (host, port)
|
||
|
print url
|
||
|
main.start()
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
run()
|