예제 #1
0
    def api_prefix(self):
        """ Prefix to API endpoints.

        .. versionadded:: 0.2
        """
        return api_prefix(self.config['URL_PREFIX'],
                          self.config['API_VERSION'])
예제 #2
0
파일: flaskapp.py 프로젝트: chronidev/eve
    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
예제 #3
0
파일: renders.py 프로젝트: hyacinthus/eve
    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']
예제 #4
0
    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']
예제 #5
0
    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)
예제 #6
0
    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"]
예제 #7
0
파일: flaskapp.py 프로젝트: marchon/eve
    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
예제 #8
0
파일: flaskapp.py 프로젝트: klyr/eve
    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
예제 #9
0
파일: renders.py 프로젝트: omixen/eve
    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)
예제 #10
0
    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)
예제 #11
0
    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)
예제 #12
0
    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
예제 #13
0
def base_path():
    return api_prefix()
예제 #14
0
    #     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()
예제 #15
0
    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
예제 #16
0
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)
예제 #17
0
파일: flaskapp.py 프로젝트: halfapple/eve
    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
예제 #18
0
def base_path():
    return api_prefix()