def api_prefix(self): """ Prefix to API endpoints. .. versionadded:: 0.2 """ return api_prefix(self.config['URL_PREFIX'], self.config['API_VERSION'])
def _add_url_rules(self): """ Builds the API url map. Methods are enabled for each mapped endpoint, as configured in the settings. .. versionchanged:: 0.0.4 config.SOURCES. Maps resources to their datasources. .. versionchanged:: 0.0.3 Support for API_VERSION as an endpoint prefix. """ # helpers resources = {} # maps urls to resources (DOMAIN keys) urls = {} # maps resources to urls datasources = {} # maps resources to their datasources prefix = api_prefix(self.config['URL_PREFIX'], self.config['API_VERSION']) # home page (API entry point) self.add_url_rule('%s/' % prefix, 'home', home_endpoint) for resource, settings in self.config['DOMAIN'].items(): resources[settings['url']] = resource urls[resource] = settings['url'] datasources[resource] = settings['datasource'] # resource endpoint url = '%s/<regex("%s"):url>/' % (prefix, settings['url']) self.add_url_rule(url, view_func=collections_endpoint, methods=settings['methods']) # item endpoint if settings['item_lookup']: item_url = '%s<regex("%s"):%s>/' % \ (url, settings['item_url'], settings['item_lookup_field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=settings['item_methods']) if 'PATCH' in settings['item_methods']: # support for POST with X-HTTM-Method-Override header # for clients not supporting PATCH. Also see # item_endpoint() in endpoints.py self.add_url_rule(item_url, view_func=item_endpoint, methods=['POST']) # also enable an alternative lookup/endpoint if allowed add_lookup = settings.get('additional_lookup') if add_lookup: item_url = '%s<regex("%s"):%s>/' % (url, add_lookup['url'], add_lookup['field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=['GET']) self.config['RESOURCES'] = resources self.config['URLS'] = urls self.config['SOURCES'] = datasources
def test_CORS_OPTIONS_item(self): prefix = api_prefix(self.app.config['URL_PREFIX'], self.app.config['API_VERSION']) url = '%s%s' % (prefix, self.item_id_url) methods = (self.domain[self.known_resource]['resource_methods'] + ['OPTIONS']) self.test_CORS_OPTIONS(url, methods) url = '%s%s/%s' % (prefix, self.known_resource_url, self.item_ref) methods = ['GET', 'OPTIONS']
def test_CORS_OPTIONS_resources(self): prefix = api_prefix(self.app.config['URL_PREFIX'], self.app.config['API_VERSION']) for resource, settings in self.app.config['DOMAIN'].items(): # resource endpoint url = '%s/%s/' % (prefix, settings['url']) methods = settings['resource_methods'] + ['OPTIONS'] self.test_CORS_OPTIONS(url, methods)
def test_CORS_OPTIONS_item(self): prefix = api_prefix( self.app.config["URL_PREFIX"], self.app.config["API_VERSION"] ) url = "%s%s" % (prefix, self.item_id_url) methods = self.domain[self.known_resource]["resource_methods"] + ["OPTIONS"] self.test_CORS_OPTIONS(url, methods) url = "%s%s/%s" % (prefix, self.known_resource_url, self.item_ref) methods = ["GET", "OPTIONS"]
def _add_url_rules(self): """ Builds the API url map. Methods are enabled for each mapped endpoint, as configured in the settings. .. versionchanged:: 0.0.3 Support for API_VERSION as an endpoint prefix. """ # helpers resources = dict() # maps urls to resources (DOMAIN keys) urls = dict() # maps resources to urls prefix = api_prefix(self.config['URL_PREFIX'], self.config['API_VERSION']) # home page (API entry point) self.add_url_rule('%s/' % prefix, 'home', home_endpoint) for resource, settings in self.config['DOMAIN'].items(): resources[settings['url']] = resource urls[resource] = settings['url'] # resource endpoint url = '/<regex("%s"):url>/' % settings['url'] url = '%s%s' % (prefix, url) self.add_url_rule(url, view_func=collections_endpoint, methods=settings['methods']) # item endpoint if settings['item_lookup'] is True: item_url = '%s<regex("%s"):%s>/' % \ (url, settings['item_url'], settings['item_lookup_field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=settings['item_methods']) if 'PATCH' in settings['item_methods']: # support for POST with X-HTTM-Method-Override header, # for clients not supporting PATCH. Also see # item_endpoint() in endpoints.py self.add_url_rule(item_url, view_func=item_endpoint, methods=['POST']) # also enable an alternative lookup/endpoint if allowed add_lookup = settings.get('additional_lookup') if add_lookup: item_url = '%s<regex("%s"):%s>/' % (url, add_lookup['url'], add_lookup['field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=['GET']) self.config['RESOURCES'] = resources self.config['URLS'] = urls self.config['URLS'] = urls
def _add_url_rules(self): """ Builds the API url map. Methods are enabled for each mapped endpoint, as configured in the settings. .. versionchanged:: 0.0.5 Support for Cross-Origin Resource Sharing. 'OPTIONS' method is explicitly routed to standard endpoints to allow for proper CORS processing. .. versionchanged:: 0.0.4 config.SOURCES. Maps resources to their datasources. .. versionchanged:: 0.0.3 Support for API_VERSION as an endpoint prefix. """ # helpers resources = {} # maps urls to resources (DOMAIN keys) urls = {} # maps resources to urls datasources = {} # maps resources to their datasources prefix = api_prefix(self.config["URL_PREFIX"], self.config["API_VERSION"]) # home page (API entry point) self.add_url_rule("%s/" % prefix, "home", view_func=home_endpoint, methods=["GET", "OPTIONS"]) for resource, settings in self.config["DOMAIN"].items(): resources[settings["url"]] = resource urls[resource] = settings["url"] datasources[resource] = settings["datasource"] # resource endpoint url = '%s/<regex("%s"):url>/' % (prefix, settings["url"]) self.add_url_rule(url, view_func=collections_endpoint, methods=settings["resource_methods"] + ["OPTIONS"]) # item endpoint if settings["item_lookup"]: item_url = '%s<regex("%s"):%s>/' % (url, settings["item_url"], settings["item_lookup_field"]) self.add_url_rule(item_url, view_func=item_endpoint, methods=settings["item_methods"] + ["OPTIONS"]) if "PATCH" in settings["item_methods"]: # support for POST with X-HTTM-Method-Override header # for clients not supporting PATCH. Also see # item_endpoint() in endpoints.py self.add_url_rule(item_url, view_func=item_endpoint, methods=["POST"]) # also enable an alternative lookup/endpoint if allowed add_lookup = settings.get("additional_lookup") if add_lookup: item_url = '%s<regex("%s"):%s>/' % (url, add_lookup["url"], add_lookup["field"]) self.add_url_rule(item_url, view_func=item_endpoint, methods=["GET"]) self.config["RESOURCES"] = resources self.config["URLS"] = urls self.config["SOURCES"] = datasources
def test_CORS_OPTIONS_resources(self): prefix = api_prefix(self.app.config['URL_PREFIX'], self.app.config['API_VERSION']) del(self.domain['peopleinvoices']) del(self.domain['internal_transactions']) for _, settings in self.app.config['DOMAIN'].items(): # resource endpoint url = '%s/%s/' % (prefix, settings['url']) methods = settings['resource_methods'] + ['OPTIONS'] self.test_CORS_OPTIONS(url, methods)
def test_CORS_OPTIONS_resources(self): prefix = api_prefix(self.app.config['URL_PREFIX'], self.app.config['API_VERSION']) del (self.domain['peopleinvoices']) del (self.domain['peoplesearches']) del (self.domain['internal_transactions']) for _, settings in self.app.config['DOMAIN'].items(): # resource endpoint url = '%s/%s/' % (prefix, settings['url']) methods = settings['resource_methods'] + ['OPTIONS'] self.test_CORS_OPTIONS(url, methods)
def test_CORS_OPTIONS_resources(self): prefix = api_prefix(self.app.config["URL_PREFIX"], self.app.config["API_VERSION"]) del (self.domain["peopleinvoices"]) del (self.domain["peoplerequiredinvoices"]) del (self.domain["peoplesearches"]) del (self.domain["internal_transactions"]) del (self.domain["child_products"]) for _, settings in self.app.config["DOMAIN"].items(): # resource endpoint url = "%s/%s/" % (prefix, settings["url"]) methods = settings["resource_methods"] + ["OPTIONS"] self.test_CORS_OPTIONS(url, methods)
def _add_url_rules(self): """ Builds the API url map. Methods are enabled for each mapped endpoint, as configured in the settings. .. versionchanged:: 0.0.5 Support for Cross-Origin Resource Sharing. 'OPTIONS' method is explicitly routed to standard endpoints to allow for proper CORS processing. .. versionchanged:: 0.0.4 config.SOURCES. Maps resources to their datasources. .. versionchanged:: 0.0.3 Support for API_VERSION as an endpoint prefix. """ # helpers resources = {} # maps urls to resources (DOMAIN keys) urls = {} # maps resources to urls datasources = {} # maps resources to their datasources prefix = api_prefix(self.config['URL_PREFIX'], self.config['API_VERSION']) # home page (API entry point) self.add_url_rule('%s/' % prefix, 'home', view_func=home_endpoint, methods=['GET', 'OPTIONS']) for resource, settings in self.config['DOMAIN'].items(): resources[settings['url']] = resource urls[resource] = settings['url'] datasources[resource] = settings['datasource'] # resource endpoint url = '%s/<regex("%s"):url>/' % (prefix, settings['url']) self.add_url_rule(url, view_func=collections_endpoint, methods=settings['resource_methods'] + ['OPTIONS']) # item endpoint if settings['item_lookup']: item_url = '%s<regex("%s"):%s>/' % \ (url, settings['item_url'], settings['item_lookup_field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=settings['item_methods'] + ['OPTIONS']) if 'PATCH' in settings['item_methods']: # support for POST with X-HTTM-Method-Override header # for clients not supporting PATCH. Also see # item_endpoint() in endpoints.py self.add_url_rule(item_url, view_func=item_endpoint, methods=['POST']) # also enable an alternative lookup/endpoint if allowed add_lookup = settings.get('additional_lookup') if add_lookup: item_url = '%s<regex("%s"):%s>/' % (url, add_lookup['url'], add_lookup['field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=['GET']) self.config['RESOURCES'] = resources self.config['URLS'] = urls self.config['SOURCES'] = datasources
def base_path(): return api_prefix()
# if not companies_cache.get(value): # companies_cache.rebuild() # if not companies_cache.get(value): # self._error(field, "companyId field does not exist: %s" % value) def _validate_type_hour(self, field, value): try: strptime(value, "%H:%M:%S") except ValueError: self._error( field, "Field %s is not valid: %s. Expected format: hh:mm:ss" % (field, value)) def _validate_type_month(self, field, value): try: strptime(value, "%m-%d") except ValueError: self._error( field, "Field %s is not valid: %s. Expected format: MM-DD" % (field, value)) app = Eve(validator=EmpoweringValidator, auth=EVETokenAuth) set_hooks(app) set_methods(app) set_docs(app) prefix = api_prefix(api_version=app.config['API_VERSION']) if __name__ == '__main__': app.run()
def _add_url_rules(self): """ Builds the API url map. Methods are enabled for each mapped endpoint, as configured in the settings. .. versionchanged:: 0.1.1 Simplified URL rules. Not using regexes anymore to return the endpoint URL to the endpoint function. This allows for nested endpoints to function properly. .. versionchanged:: 0.0.9 Handle the case of 'additional_lookup' field being an integer. .. versionchanged:: 0.0.5 Support for Cross-Origin Resource Sharing. 'OPTIONS' method is explicitly routed to standard endpoints to allow for proper CORS processing. .. versionchanged:: 0.0.4 config.SOURCES. Maps resources to their datasources. .. versionchanged:: 0.0.3 Support for API_VERSION as an endpoint prefix. """ # helpers resources = {} # maps urls to resources (DOMAIN keys) urls = {} # maps resources to urls datasources = {} # maps resources to their datasources prefix = api_prefix(self.config['URL_PREFIX'], self.config['API_VERSION']) # we choose not to care about trailing slashes at all. # Both '/resource/' and '/resource' will work, same with # '/resource/<id>/' and '/resource/<id>' self.url_map.strict_slashes = False # home page (API entry point) self.add_url_rule('%s/' % prefix, 'home', view_func=home_endpoint, methods=['GET', 'OPTIONS']) for resource, settings in self.config['DOMAIN'].items(): url = '%s/%s' % (prefix, settings['url']) resources[url] = resource urls[resource] = settings['url'] datasources[resource] = settings['datasource'] # resource endpoint self.add_url_rule(url, view_func=collections_endpoint, methods=settings['resource_methods'] + ['OPTIONS']) # item endpoint if settings['item_lookup']: item_url = '%s/<regex("%s"):%s>' % \ (url, settings['item_url'], settings['item_lookup_field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=settings['item_methods'] + ['OPTIONS']) if 'PATCH' in settings['item_methods']: # support for POST with X-HTTM-Method-Override header # for clients not supporting PATCH. Also see # item_endpoint() in endpoints.py self.add_url_rule(item_url, view_func=item_endpoint, methods=['POST']) # also enable an alternative lookup/endpoint if allowed lookup = settings.get('additional_lookup') if lookup: l_type = settings['schema'][lookup['field']]['type'] if l_type == 'integer': item_url = '%s/<int:%s>' % (url, lookup['field']) else: item_url = '%s/<regex("%s"):%s>' % (url, lookup['url'], lookup['field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=['GET', 'OPTIONS']) self.config['RESOURCES'] = resources self.config['URLS'] = urls self.config['SOURCES'] = datasources
def set_methods(app): for method in app.config['METHODS']: prefix = api_prefix(api_version=app.config['API_VERSION']) app.register_blueprint(method, url_prefix=prefix)
def _add_url_rules(self): """ Builds the API url map. Methods are enabled for each mapped endpoint, as configured in the settings. .. versionchanged:: 0.0.9 Handle the case of 'additional_lookup' field being an integer. .. versionchanged:: 0.0.5 Support for Cross-Origin Resource Sharing. 'OPTIONS' method is explicitly routed to standard endpoints to allow for proper CORS processing. .. versionchanged:: 0.0.4 config.SOURCES. Maps resources to their datasources. .. versionchanged:: 0.0.3 Support for API_VERSION as an endpoint prefix. """ # helpers resources = {} # maps urls to resources (DOMAIN keys) urls = {} # maps resources to urls datasources = {} # maps resources to their datasources prefix = api_prefix(self.config['URL_PREFIX'], self.config['API_VERSION']) # we choose not to care about trailing slashes at all. # Both '/resource/' and '/resource' will work, same with # '/resource/<id>/' and '/resource/<id>' self.url_map.strict_slashes = False # home page (API entry point) self.add_url_rule('%s/' % prefix, 'home', view_func=home_endpoint, methods=['GET', 'OPTIONS']) for resource, settings in self.config['DOMAIN'].items(): resources[settings['url']] = resource urls[resource] = settings['url'] datasources[resource] = settings['datasource'] # resource endpoint url = '%s/<regex("%s"):url>' % (prefix, settings['url']) self.add_url_rule(url, view_func=collections_endpoint, methods=settings['resource_methods'] + ['OPTIONS']) # item endpoint if settings['item_lookup']: item_url = '%s/<regex("%s"):%s>' % \ (url, settings['item_url'], settings['item_lookup_field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=settings['item_methods'] + ['OPTIONS']) if 'PATCH' in settings['item_methods']: # support for POST with X-HTTM-Method-Override header # for clients not supporting PATCH. Also see # item_endpoint() in endpoints.py self.add_url_rule(item_url, view_func=item_endpoint, methods=['POST']) # also enable an alternative lookup/endpoint if allowed lookup = settings.get('additional_lookup') if lookup: l_type = settings['schema'][lookup['field']]['type'] if l_type == 'integer': item_url = '%s/<int:%s>' % (url, lookup['field']) else: item_url = '%s/<regex("%s"):%s>' % (url, lookup['url'], lookup['field']) self.add_url_rule(item_url, view_func=item_endpoint, methods=['GET', 'OPTIONS']) self.config['RESOURCES'] = resources self.config['URLS'] = urls self.config['SOURCES'] = datasources