Ejemplo n.º 1
0
    def content_options(self):
        requirements = set()
        if self.next_path_segments:
            format_segment = path_head(self.next_path_segments)
            for field_name in get_format_str_fields(format_segment):
                if field_name not in self.format_token_generators:
                    raise ValueError("Unknown format field name '%s' in format string '%s'" % (field_name, format_segment))

                requirements.update(self.format_token_generators[field_name].requirements)

        return requirements
Ejemplo n.º 2
0
 def _mk_sub_path(self, new_known_data: Dict[DataField, Any] = None, increment_path_segments=True, **kwargs):
     assert self.is_folder, "__mk_sub_path called on non-folder %s" % self
     args = attr.asdict(self, recurse=False)
     args["parent"] = self
     args["known_data"] = dict(self.known_data)
     if increment_path_segments:
         args.update(path_segments=self.path_segments + (path_head(self.next_path_segments),),
                     next_path_segments=path_tail(self.next_path_segments))
     else:
         args.update(path_segments=self.path_segments,
                     next_path_segments=self.next_path_segments)
     if new_known_data:
         args["known_data"].update(new_known_data)
     args.update(kwargs)
     return self.__class__(**args)
Ejemplo n.º 3
0
    async def resolve(self, rel_path) -> Optional['RealPath']:
        rel_path = normalize_path(rel_path)
        if rel_path == "":
            return self

        if os.name == 'nt':
            # on Windows, all file names will be converted to upper case
            eq = lambda x, y: x.upper() == y.upper()
        else:
            eq = lambda x, y: x == y

        resolved_real_file = None
        for content_file in await self.list_contents():
            if eq(rel_path, content_file.path):  # Exact Match
                resolved_real_file = content_file
                break
            elif eq(path_head(rel_path),
                    path_name(content_file.path)):  # Found Parent
                resolved_real_file = await content_file.resolve(
                    path_tail(rel_path))
                break
            else:  # Other File
                continue
        return resolved_real_file