Skip to content
This repository has been archived by the owner on Jul 31, 2023. It is now read-only.

Commit

Permalink
Reworked DivioDocsEntry into Repo
Browse files Browse the repository at this point in the history
  • Loading branch information
Denperidge committed May 9, 2023
1 parent 6a86bf1 commit e155d91
Show file tree
Hide file tree
Showing 9 changed files with 249 additions and 223 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "divio_docs_gen"
version = "0.1.0"
version = "0.2.0"
authors = [
{ name="Denperidge", email="[email protected]" },
]
Expand Down
30 changes: 15 additions & 15 deletions src/divio_docs_gen/Args.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
from os import getcwd, path
from argparse import ArgumentParser

from .Repo import Repo

"""Code to handle configuration, through docs.conf or args"""

section_keys = ["tutorials", "howtos", "explanations", "references"]
Expand Down Expand Up @@ -172,34 +170,36 @@ def get_value(section_id, value_id, default):

if get_cli_arg_value("repos"):
for repo_arg in get_cli_arg_value("repos"):
repo = Repo(repo_arg[0])
repo_config = dict()
repo_config.url = repo_arg[0]
for arg in repo_arg[1:]:
key, value = arg.split("=", 1)
key = key.lower()
if "ignore" in key:
repo.files_to_ignore += value.split("//")
repo_config["files_to_ignore"] = value.split("//")
elif "move" in key:
repo.files_to_move += value.split("//")
repo_config["files_to_move"] = value.split("//")

args.repos.append(repo)
conf[repo["url"]] = repo
args.repos.append(repo_config)
conf[repo_config["url"]] = repo_config

if use_conf:
all_conf_sections = conf.sections()
for conf_section_id in all_conf_sections:
if conf_section_id in conf_sections.values(): continue

conf_section = conf[conf_section_id]
repo_data = dict(conf_section)
repo = Repo(repo_data["url"])
raw_data = dict(conf_section)
repo_config = dict()
repo_config["url"] = raw_data["url"]

if "ignore" in repo_data:
repo.files_to_ignore += repo_data["ignore"].split("//")
if "move" in repo_data:
repo.files_to_move += repo_data["move"].split("//")
if "ignore" in raw_data:
repo_config["files_to_ignore"] = raw_data["ignore"].split("//")
if "move" in raw_data:
repo_config["files_to_move"] = raw_data["move"].split("//")

if repo not in args.repos:
args.repos.append(repo)
if repo_config not in args.repos:
args.repos.append(repo_config)


if args.save_conf:
Expand Down
107 changes: 0 additions & 107 deletions src/divio_docs_gen/DivioDocsEntry.py

This file was deleted.

90 changes: 0 additions & 90 deletions src/divio_docs_gen/Repo.py

This file was deleted.

84 changes: 84 additions & 0 deletions src/divio_docs_gen/Repo/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Native imports
from pathlib import Path
from typing import List
# Package imports
from slugify import slugify
# Local imports
from .sections import _setup_sections_dict
from ..markdown_parser import split_sections_from_markdown
from ..write_to_disk import write_to_docs

"""Repo class: utilities to clone/pull the repoa nd access the files"""


class Repo():
def __init__(self, url: str, parse_docs_on_init=True, write_to_disk_on_init=False, files_to_move: List[str] = [], files_to_ignore: List[str] = []) -> None:
"""Constructs a Repo class instance. This applies configuration, clones/pulls the repo, and optionally parses & outputs the docs"""
self.url = url

self.files_to_move = files_to_move
self.files_to_ignore = files_to_ignore

self.gitpython = self.clone_or_pull_repo()

self.sections = _setup_sections_dict()

if parse_docs_on_init:
self.parse_docs()

if write_to_disk_on_init:
self.divio_to_disk()

if write_to_disk_on_init and not parse_docs_on_init:
print("write_to_disk is True but not parse_docs_on_init; output may be empty or incomplete")



"""GENERAL PROPERTIES"""
@property
def name(self) -> str:
return self.url.rsplit("/", maxsplit=1)[1].rsplit(".", maxsplit=1)[0]

@property
def slug(self) -> str:
return slugify(self.url)

"""CONFIGURATIONS"""
def check_ignore_file(self, filepath: str):
return self._file_in_exceptions(self.files_to_ignore, filepath)

def check_move_file(self, filepath: str):
return self._file_in_exceptions(self.files_to_move, filepath)

def _file_in_exceptions(self, exceptioned_files: list, filepath: str):
"""Check if an alternative action has to be taken for a file"""
try:
return next(filter(lambda exceptioned_file: exceptioned_file.rsplit("/", 1)[0] in filepath, exceptioned_files))
except StopIteration:
return False # the file is not part of the exception could not be found, return False


"""PARSE & OUTPUT"""
def _import_sections_from_markdown(self, input_path_or_string: str, output_filename="README.md"):
parsed_file = split_sections_from_markdown(input_path_or_string)
for section_id in parsed_file:
self.add_to_section(section_id, output_filename, parsed_file[section_id])

def parse_docs(self, write_to_disk=False):
for file in self.all_markdown_files:
path = Path(file)
self._import_sections_from_markdown(path.absolute(), path.name)

if write_to_disk:
self.divio_to_disk()

def divio_to_disk(self):
for section_id in self.sections:
section = self.get_section(section_id)

for filename in section:
write_to_docs(self.name, section_id, content=section[filename], filename=filename)

from .files import clone_or_pull_repo, exists_locally, local_dir, all_markdown_files, get_file, find_files, get_file_contents
from .sections import add_to_section, get_section

Loading

0 comments on commit e155d91

Please sign in to comment.