Default glob plugin

GlobConfig class

GlobConfig source


        class GlobConfig(pydantic.BaseModel):
            glob_patterns: Union[List[str], str] = ["**/*.md"]
            use_gitignore: bool = True

            @pydantic.validator("glob_patterns")
            def convert_to_list(cls, v):
                if not isinstance(v, list):
                    return v.split(",")
                return v

Config class

Config source


        class Config(pydantic.BaseModel):
            glob: GlobConfig = GlobConfig()

config_model function

config_model source


        def config_model(markata: "Markata") -> None:
            markata.config_models.append(Config)

glob function

glob source


        def glob(markata: "Markata") -> None:
            markata.files = list(
                flatten(
                    [
                        Path().glob(str(pattern))
                        for pattern in markata.config.glob.glob_patterns
                    ],
                ),
            )
            markata.content_directories = list({f.parent for f in markata.files})

            try:
                ignore = True
            except KeyError:
                ignore = True

            if ignore and (Path(".gitignore").exists() or Path(".markataignore").exists()):
                import pathspec

                lines = []

                if Path(".gitignore").exists():
                    lines.extend(Path(".gitignore").read_text().splitlines())

                if Path(".markataignore").exists():
                    lines.extend(Path(".markataignore").read_text().splitlines())

                key = markata.make_hash("glob", "spec", lines)
                spec = markata.precache.get(key)
                if spec is None:
                    spec = pathspec.PathSpec.from_lines("gitwildmatch", lines)
                    with markata.cache as cache:
                        cache.set(key, spec)

                @background.task
                def check_spec(file: str) -> bool:
                    key = markata.make_hash("glob", "check_spec", file)
                    check = markata.precache.get(key)
                    if check is not None:
                        return check

                    check = spec.match_file(str(file))
                    with markata.cache as cache:
                        cache.set(key, check)
                    return check

                file_checks = [(file, check_spec(str(file))) for file in markata.files]
                [check.result() for _, check in file_checks]
                markata.files = [file for file, check in file_checks if check]

convert_to_list method

convert_to_list source


        def convert_to_list(cls, v):
                if not isinstance(v, list):
                    return v.split(",")
                return v

check_spec function

check_spec source


        def check_spec(file: str) -> bool:
                    key = markata.make_hash("glob", "check_spec", file)
                    check = markata.precache.get(key)
                    if check is not None:
                        return check

                    check = spec.match_file(str(file))
                    with markata.cache as cache:
                        cache.set(key, check)
                    return check