Exemple #1
0
    def __init__(self, path, spec, api, loader=None):
        self.path = os.path.abspath(path)

        self.spec = spec
        enforce(all(a in self.spec.features for a in api), 'Unknown API', ValueError)
        self.api = api
        self.loader = loader
        if self.loader is None:
            self.loader = NullLoader
Exemple #2
0
    def __init__(self, path, spec, api, loader=None):
        self.path = os.path.abspath(path)

        self.spec = spec
        enforce(all(a in self.spec.features for a in api), 'Unknown API', ValueError)
        self.api = api
        self.loader = loader
        if self.loader is None:
            self.loader = NullLoader
Exemple #3
0
    def generate(self, extension_names=None):
        features = list()
        for api, version in self.api.items():
            features.extend(self.spec.features[api])

            if version is None:
                version = self.api[api] = list(self.spec.features[api].keys())[-1]
            enforce(version in self.spec.features[api],
                    'Unknown version', ValueError)

        if extension_names is None:
            extension_names = list(chain.from_iterable(self.spec.extensions[a]
                                                       for a in self.api))

        e = list(chain.from_iterable(self.spec.extensions[a] for a in self.api))
        for ext in extension_names:
            enforce(ext in e, 'Invalid extension "{}"'.format(ext), ValueError)

        types = [t for t in self.spec.types if t.api is None or t.api in self.api]
        self.generate_types(types)

        f = list()
        for api, version in self.api.items():
            f.extend([value for key, value in self.spec.features[api].items()
                        if key <= version])
        enums, functions = merge(f)
        self.generate_features(f)

        extensions = list()
        for api in self.api:
            extensions.extend(self.spec.extensions[api][ext]
                              for ext in extension_names if ext
                              in self.spec.extensions[api])
        self.generate_extensions(extensions, enums, functions)

        fs = defaultdict(list)
        es = defaultdict(list)
        for api, version in self.api.items():
            fs[api].extend([value for key, value in self.spec.features[api].items()
                        if key <= version])
            es[api].extend(self.spec.extensions[api][ext]
                           for ext in extension_names if ext
                           in self.spec.extensions[api])
        self.generate_loader(fs, es)
Exemple #4
0
    def generate(self, extension_names=None):
        features = list()
        for api, version in self.api.iteritems():
            features.extend(self.spec.features[api])

            if version is None:
                version = self.api[api] = self.spec.features[api].keys()[-1]
            enforce(version in self.spec.features[api],
                    'Unknown version', ValueError)

        if extension_names is None:
            extension_names = list(chain.from_iterable(self.spec.extensions[a]
                                                       for a in self.api))

        e = chain.from_iterable(self.spec.extensions[a] for a in self.api)
        for ext in extension_names:
            enforce(ext in e, 'Invalid extension "{}"'.format(ext), ValueError)

        types = [t for t in self.spec.types if t.api is None or t.api in self.api]
        self.generate_types(types)

        f = list()
        for api, version in self.api.iteritems():
            f.extend([value for key, value in self.spec.features[api].items()
                        if key <= version])
        enums, functions = merge(f)
        self.generate_features(f)

        extensions = list()
        for api in self.api:
            extensions.extend(self.spec.extensions[api][ext]
                              for ext in extension_names if ext
                              in self.spec.extensions[api])
        self.generate_extensions(extensions, enums, functions)

        fs = defaultdict(list)
        es = defaultdict(list)
        for api, version in self.api.iteritems():
            fs[api].extend([value for key, value in self.spec.features[api].items()
                        if key <= version])
            es[api].extend(self.spec.extensions[api].values())
        self.generate_loader(fs, es)