Пример #1
0
    def test_check_for_versions_intersection_negative(self):
        func_list = [
            versioned_method.VersionedMethod(
                'foo', (api_version.APIVersionRequest('2.1')),
                api_version.APIVersionRequest('2.4'), None),
            versioned_method.VersionedMethod(
                'foo', (api_version.APIVersionRequest('2.11')),
                (api_version.APIVersionRequest('3.1')), None),
            versioned_method.VersionedMethod(
                'foo', (api_version.APIVersionRequest('2.8')),
                api_version.APIVersionRequest('2.9'), None),
        ]

        result = (wsgi.Controller.check_for_versions_intersection(
            func_list=func_list))
        self.assertFalse(result)

        func_list = [
            versioned_method.VersionedMethod(
                'foo', (api_version.APIVersionRequest('2.12')),
                api_version.APIVersionRequest('2.14'), None),
            versioned_method.VersionedMethod(
                'foo', (api_version.APIVersionRequest('3.0')),
                api_version.APIVersionRequest('3.4'), None)
        ]

        result = (wsgi.Controller.check_for_versions_intersection(
            func_list=func_list))
        self.assertFalse(result)
Пример #2
0
        def decorator(f):
            obj_min_ver = api_version.APIVersionRequest(min_ver)
            if max_ver:
                obj_max_ver = api_version.APIVersionRequest(max_ver)
            else:
                obj_max_ver = api_version.APIVersionRequest()

            # Add to list of versioned methods registered
            func_name = f.__name__
            new_func = versioned_method.VersionedMethod(
                func_name, obj_min_ver, obj_max_ver, f)

            func_dict = getattr(cls, VER_METHOD_ATTR, {})
            if not func_dict:
                setattr(cls, VER_METHOD_ATTR, func_dict)

            func_list = func_dict.get(func_name, [])
            if not func_list:
                func_dict[func_name] = func_list
            func_list.append(new_func)
            # Ensure the list is sorted by minimum version (reversed)
            # so later when we work through the list in order we find
            # the method which has the latest version which supports
            # the version requested.
            is_intersect = Controller.check_for_versions_intersection(
                func_list)

            if is_intersect:
                raise exception.ApiVersionsIntersect(
                    name=new_func.name,
                    min_ver=new_func.start_version,
                    max_ver=new_func.end_version,
                )

            func_list.sort(key=lambda f: f.start_version, reverse=True)

            return f