def parse_raw(self) -> None:
        if isinstance(self.source, list) or (isinstance(self.source, Path)
                                             and self.source.is_dir()):
            self.current_source_path = Path()
            self.model_resolver.after_load_files = {
                self.base_path.joinpath(s.path).resolve().as_posix()
                for s in self.iter_source
            }

        for source in self.iter_source:
            if isinstance(self.source, ParseResult):
                path_parts = self.get_url_path_parts(self.source)
            else:
                path_parts = list(source.path.parts)
            if self.current_source_path is not None:
                self.current_source_path = source.path
            with self.model_resolver.current_base_path_context(
                    source.path.parent
            ), self.model_resolver.current_root_context(path_parts):
                self.raw_obj = load_yaml(source.text)
                if self.custom_class_name_generator:
                    obj_name = self.raw_obj.get('title', 'Model')
                else:
                    if self.class_name:
                        obj_name = self.class_name
                    else:
                        # backward compatible
                        obj_name = self.raw_obj.get('title', 'Model')
                        if not self.model_resolver.validate_name(obj_name):
                            obj_name = title_to_class_name(obj_name)
                    if not self.model_resolver.validate_name(obj_name):
                        raise InvalidClassNameError(obj_name)
                self._parse_file(self.raw_obj, obj_name, path_parts)

        self._resolve_unparsed_json_pointer()
    def parse_raw(self) -> None:
        if isinstance(self.source, list) or (isinstance(self.source, Path)
                                             and self.source.is_dir()):
            self.current_source_path = Path()
            self.model_resolver.after_load_files = {
                s.path.as_posix()
                for s in self.iter_source
            }

        for source in self.iter_source:
            path_parts = list(source.path.parts)
            if self.current_source_path is not None:
                self.current_source_path = source.path
            with self.model_resolver.current_root_context(path_parts):
                self.raw_obj = load_yaml(source.text)
                if self.class_name:
                    obj_name = self.class_name
                else:
                    # backward compatible
                    obj_name = self.raw_obj.get('title', 'Model')
                    if not self.model_resolver.validate_name(obj_name):
                        raise InvalidClassNameError(obj_name)
                self._parse_file(self.raw_obj, obj_name, path_parts)

        # resolve unparsed json pointer
        for source in self.iter_source:
            path_parts = list(source.path.parts)
            reserved_refs = self.reserved_refs.get(
                tuple(path_parts))  # type: ignore
            if not reserved_refs:
                continue
            if self.current_source_path is not None:
                self.current_source_path = source.path

            with self.model_resolver.current_root_context(path_parts):
                for reserved_ref in sorted(reserved_refs):
                    if self.model_resolver.add_ref(reserved_ref).loaded:
                        continue
                    file_path, model_path = reserved_ref.split('#', 1)
                    valid_path_parts = [p for p in model_path.split('/') if p]
                    if (len(valid_path_parts) == 1
                            and self.model_resolver.add_ref(
                                f'{file_path}#').loaded):  # pragma: no cover
                        continue
                    # for root model
                    self.raw_obj = load_yaml(source.text)
                    self.parse_json_pointer(self.raw_obj, reserved_ref,
                                            path_parts)
Пример #3
0
 def parse_raw(self) -> None:
     if isinstance(self.source, list) or (isinstance(self.source, Path)
                                          and self.source.is_dir()):
         self.current_source_path = Path()
         self.model_resolver.after_load_files = [
             str(s.path) for s in self.iter_source
         ]
     for source in self.iter_source:
         if self.current_source_path is not None:
             self.current_source_path = source.path
         path_parts = list(source.path.parts)
         self.model_resolver.set_current_root(path_parts)
         self.raw_obj = yaml.safe_load(source.text)
         if self.class_name:
             obj_name = self.class_name
         else:
             # backward compatible
             obj_name = self.raw_obj.get('title', 'Model')
             if not self.model_resolver.validate_name(obj_name):
                 raise InvalidClassNameError(obj_name)
         self._parse_file(self.raw_obj, obj_name, path_parts, path_parts)
Пример #4
0
    def parse_raw(self) -> None:
        if isinstance(self.source, list) or (isinstance(self.source, Path)
                                             and self.source.is_dir()):
            self.current_source_path = Path()
            self.model_resolver.after_load_files = [
                str(s.path) for s in self.iter_source
            ]
        for source in self.iter_source:
            if self.current_source_path is not None:
                self.current_source_path = source.path
            path_parts = list(source.path.parts)
            self.model_resolver.set_current_root(path_parts)
            self.raw_obj = yaml.safe_load(source.text)
            if self.class_name:
                obj_name = self.class_name
            else:
                # backward compatible
                obj_name = self.raw_obj.get('title', 'Model')
                if not self.model_resolver.validate_name(obj_name):
                    raise InvalidClassNameError(obj_name)

            obj_name = self.model_resolver.add(path_parts,
                                               obj_name,
                                               unique=False).name
            root_obj = JsonSchemaObject.parse_obj(self.raw_obj)
            with self.root_id_context(self.raw_obj):
                definitions = self.raw_obj.get('definitions', {})

                # parse $id before parsing $ref
                self.parse_id(root_obj, path_parts)
                for key, model in definitions.items():
                    obj = JsonSchemaObject.parse_obj(model)
                    self.parse_id(obj, [*path_parts, '#/definitions', key])

                self.parse_obj(obj_name, root_obj, path_parts)
                definitions = self.raw_obj.get('definitions', {})
                for key, model in definitions.items():
                    self.parse_raw_obj(key, model,
                                       [*path_parts, '#/definitions', key])