diff --git a/gradle-dependencies.svg b/gradle-dependencies.svg new file mode 100644 index 0000000..82f9ec8 --- /dev/null +++ b/gradle-dependencies.svg @@ -0,0 +1,629 @@ + + + + + + + + + +:copySource +1 +copySource + + + +:assemble +:assemble + + + +:assemble->:copySource + + + + + +:copyTextXml +2 +copyTextXml + + + +:assemble->:copyTextXml + + + + + +:copyWeb +6 +copyWeb + + + +:assemble->:copyWeb + + + + + +:copyWitnessStats +7 +copyWitnessStats + + + +:assemble->:copyWitnessStats + + + + + +:generateSVGs +12 +generateSVGs + + + +:assemble->:generateSVGs + + + + + +:jar +13 +jar + + + +:assemble->:jar + + + + + +:xar +29 +xar + + + +:assemble->:xar + + + + + +:macrogen:runMacrogenReporting +31 +runMacrogenReporting + + + +:assemble->:macrogen:runMacrogenReporting + + + + + +:src:main:xproc:assemble +38 +assemble + + + +:assemble->:src:main:xproc:assemble + + + + + +:prepareWeb +5 +prepareWeb + + + +:copyWeb->:prepareWeb + + + + + +:generateSVGs->:copyWeb + + + + + +:classes +10 +classes + + + +:generateSVGs->:classes + + + + + +:npmInstall +11 +npmInstall + + + +:generateSVGs->:npmInstall + + + + + +:jar->:classes + + + + + +:xar->:copyWeb + + + + + +:src:main:xproc:generateSearch +21 +generateSearch + + + +:xar->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:metadataHtml +22 +metadataHtml + + + +:xar->:src:main:xproc:metadataHtml + + + + + +:src:main:xproc:testimony +27 +testimony + + + +:xar->:src:main:xproc:testimony + + + + + +:src:main:xproc:bibliography +28 +bibliography + + + +:xar->:src:main:xproc:bibliography + + + + + +:macrogen:runMacrogenAnalysis +17 +runMacrogenAnalysis + + + +:macrogen:runMacrogenReporting->:macrogen:runMacrogenAnalysis + + + + + +:macrogen:installMacrogen +15 +installMacrogen + + + +:macrogen:runMacrogenReporting->:macrogen:installMacrogen + + + + + +:macrogen:prepareMacrogenOptions +16 +prepareMacrogenOptions + + + +:macrogen:runMacrogenReporting->:macrogen:prepareMacrogenOptions + + + + + +:src:main:xproc:bargraphData +30 +bargraphData + + + +:macrogen:runMacrogenReporting->:src:main:xproc:bargraphData + + + + + +:src:main:xproc:assemble->:src:main:xproc:metadataHtml + + + + + +:src:main:xproc:assemble->:src:main:xproc:testimony + + + + + +:src:main:xproc:assemble->:src:main:xproc:bibliography + + + + + +:src:main:xproc:readingTextExtras +26 +readingTextExtras + + + +:src:main:xproc:assemble->:src:main:xproc:readingTextExtras + + + + + +:src:main:xproc:generatePrint +25 +generatePrint + + + +:src:main:xproc:assemble->:src:main:xproc:generatePrint + + + + + +:src:main:xproc:assemble->:src:main:xproc:bargraphData + + + + + +:src:main:xproc:generateApp +32 +generateApp + + + +:src:main:xproc:assemble->:src:main:xproc:generateApp + + + + + +:src:main:xproc:independentTransforms +33 +independentTransforms + + + +:src:main:xproc:assemble->:src:main:xproc:independentTransforms + + + + + +:src:main:xproc:indexesRedirects +34 +indexesRedirects + + + +:src:main:xproc:assemble->:src:main:xproc:indexesRedirects + + + + + +:src:main:xproc:metadataJs +35 +metadataJs + + + +:src:main:xproc:assemble->:src:main:xproc:metadataJs + + + + + +:src:main:xproc:pagesJson +36 +pagesJson + + + +:src:main:xproc:assemble->:src:main:xproc:pagesJson + + + + + +:src:main:xproc:paraTable +37 +paraTable + + + +:src:main:xproc:assemble->:src:main:xproc:paraTable + + + + + +:npmSetup +4 +npmSetup + + + +:prepareWeb->:npmSetup + + + + + +:nodeSetup +3 +nodeSetup + + + +:npmSetup->:nodeSetup + + + + + +:compileJava +8 +compileJava + + + +:classes->:compileJava + + + + + +:processResources +9 +processResources + + + +:classes->:processResources + + + + + +:npmInstall->:npmSetup + + + + + +:src:main:xproc:generateSearch->:macrogen:runMacrogenAnalysis + + + + + +:src:main:xproc:readingText +20 +readingText + + + +:src:main:xproc:generateSearch->:src:main:xproc:readingText + + + + + +:src:main:xproc:metadataHtml->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:collectMetadata +19 +collectMetadata + + + +:src:main:xproc:testimony->:src:main:xproc:collectMetadata + + + + + +:src:main:xproc:bibliography->:src:main:xproc:metadataHtml + + + + + +:src:main:xproc:bibliography->:src:main:xproc:testimony + + + + + +:src:main:xproc:bibliography->:src:main:xproc:readingTextExtras + + + + + +:macrogen:runMacrogenAnalysis->:macrogen:installMacrogen + + + + + +:macrogen:runMacrogenAnalysis->:macrogen:prepareMacrogenOptions + + + + + +:src:main:xproc:readingText->:src:main:xproc:collectMetadata + + + + + +:macrogen:installMicromamba +14 +installMicromamba + + + +:macrogen:installMacrogen->:macrogen:installMicromamba + + + + + +:src:main:xproc:setupPaths +18 +setupPaths + + + +:src:main:xproc:collectMetadata->:src:main:xproc:setupPaths + + + + + +:src:main:xproc:readingTextExtras->:src:main:xproc:generatePrint + + + + + +:src:main:xproc:variantApp +24 +variantApp + + + +:src:main:xproc:generatePrint->:src:main:xproc:variantApp + + + + + +:src:main:xproc:emendedVersion +23 +emendedVersion + + + +:src:main:xproc:variantApp->:src:main:xproc:emendedVersion + + + + + +:src:main:xproc:emendedVersion->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:bargraphData->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:generateApp->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:independentTransforms->:src:main:xproc:setupPaths + + + + + +:src:main:xproc:indexesRedirects->:src:main:xproc:collectMetadata + + + + + +:src:main:xproc:metadataJs->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:metadataJs->:src:main:xproc:collectMetadata + + + + + +:src:main:xproc:pagesJson->:src:main:xproc:generateSearch + + + + + +:src:main:xproc:paraTable->:src:main:xproc:emendedVersion + + + + + diff --git a/utils/pyproject.toml b/utils/pyproject.toml index a9fdcda..7db2e37 100644 --- a/utils/pyproject.toml +++ b/utils/pyproject.toml @@ -5,20 +5,23 @@ description = "Utility scripts for the Faust Edition" authors = ["Thorsten Vitt "] [tool.poetry.dependencies] -python = "^3.9" +python = ">3.9,<4.0" requests = "^2.26.0" lxml = "^4.6.3" treetaggerwrapper = "^2.3" pandas = "^1.3.0" tqdm = "^4.61.2" ftfy = "^6.0.3" -scikit-image = "^0.18.2" +scikit-image = "^0.21.0" joblib = "^1.0.1" ipykernel = "^6.0.3" openpyxl = "^3.0.7" "ruamel.yaml" = "^0.17.10" Pillow = "^9.1.0" rich = "^12.4.1" +textdistance = {extras = ["needleman_wunsch"], version = "^4.5.0"} +typer = "^0.9.0" +pygraphviz = "^1.11" [tool.poetry.dev-dependencies] black = "^21.7b0" diff --git a/utils/visualize-task-deps.py b/utils/visualize-task-deps.py new file mode 100755 index 0000000..8d14be6 --- /dev/null +++ b/utils/visualize-task-deps.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +""" +Run `gradle tiJson assemble` to produce the taskinfo, then run this script to +generate the dependency graphs. +""" + +import json +from operator import itemgetter +from pathlib import Path +from typing import Annotated +import pygraphviz as pgv +import typer + +GROUP_COLORS={ + '': 'darkred', + 'xproc': 'darkblue', + 'macrogen': 'darkgreen' +} + +def is_relevant(dep: dict) -> bool: + if dep['type'].startswith('org.gradle.execution.plan'): + return False + return True + +def add_node(graph: pgv.AGraph, node: dict): + group = node['path'].split(':')[-2] + graph.add_node( + node['path'], + label='<{queuePosition}{name}>'.format_map(node), + group=group, + fontcolor=GROUP_COLORS.get(group, 'black') + ) + +def add_deps(graph: pgv.AGraph, node: dict): + for dep in sorted(node.get('dependencies', []), key=itemgetter('queuePosition')): + if is_relevant(dep): + if not dep['path'] in graph: + add_node(graph, dep) + graph.add_edge(node['path'], dep['path']) + add_deps(graph, dep) + + +def main(input: Annotated[Path, typer.Argument(help="JSON file generated from gradle tiJson ")] = Path("../build/taskinfo/taskinfo-assemble.json"), + output: Annotated[Path, typer.Argument(help="Output .dot file")] = Path('../build/gradle-dependencies.dot'), + pdf: bool = False, + svg: bool = False): + with input.open() as f: + deptree = json.load(f) + graph = pgv.AGraph(directed=True, rankdir="RL", ordering="out", ranksep="0.2", page="11.7 8.3") + graph.node_attr.update(shape='plain') + graph.edge_attr.update(color='gray') + add_deps(graph, deptree) + graph.write(output) + if pdf: + graph.draw(output.with_suffix('.pdf'), prog='dot') + if svg: + graph.draw(output.with_suffix('.svg'), prog='dot') + + +if __name__ == "__main__": + typer.run(main)