# 需要导入模块: from flask.ext import restful [as 别名]
# 或者: from flask.ext.restful import Resource [as 别名]
def add_lm_endpoints(api, lm_adapter, template_adapter):
r"""
Generate a Flask App that will serve meshes landmarks and templates to
landmarker.io
Parameters
----------
adapter: :class:`LandmarkerIOAdapter`
Concrete implementation of the LandmarkerIOAdapter. Will be queried for
all data to pass to landmarker.io.
dev: `bool`, optional
If True, listen to anyone for CORS.
Returns
-------
api, app, api_endpoint
"""
class Landmark(Resource):
def get(self, asset_id, lm_id):
err = "{} does not have {} landmarks".format(asset_id, lm_id)
try:
return lm_adapter.load_lm(asset_id, lm_id)
except Exception as e:
try:
return template_adapter.load_template(lm_id)
except Exception as e:
return abort(404, message=err)
def put(self, asset_id, lm_id):
try:
return lm_adapter.save_lm(asset_id, lm_id, request.json)
except Exception as e:
print(e)
return abort(409, message="{}:{} unable to "
"save".format(asset_id, lm_id))
# Need this here to enable CORS put see http://mzl.la/1rCDkWX
def options(self, asset_id, lm_id):
pass
class LandmarkList(Resource):
def get(self):
return lm_adapter.asset_id_to_lm_id()
class LandmarkListForId(Resource):
def get(self, asset_id):
return lm_adapter.lm_ids(asset_id)
lm_url = partial(url, Endpoints.landmarks)
api.add_resource(LandmarkList, lm_url())
api.add_resource(LandmarkListForId, asset(lm_url)())
api.add_resource(Landmark, asset(lm_url)(''))