From af3fb6c6eb233af00229a908bab92afbf38bad0b Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Sun, 19 Jul 2020 20:38:05 -0300 Subject: Move a lot of things around (broken) --- ganarchy/cli/run_targets.py | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 ganarchy/cli/run_targets.py (limited to 'ganarchy/cli/run_targets.py') diff --git a/ganarchy/cli/run_targets.py b/ganarchy/cli/run_targets.py new file mode 100644 index 0000000..5bf48d9 --- /dev/null +++ b/ganarchy/cli/run_targets.py @@ -0,0 +1,111 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +"""This module contains the CLI Run Targets. +""" + +import click + +from ganarchy import cli +from ganarchy.templating import environment + +#@cli.main.command() +#@click.argument('out', required=True) +#def run(out): +# """Runs ganarchy standalone. +# +# This will run ganarchy so it regularly updates the output directory given by OUT. +# Additionally, it'll also search for the following hooks in its config dirs: +# +# - post_object_update_hook - executed after an object is updated. +# +# - post_update_cycle_hook - executed after all objects in an update cycle are updated.""" +# pass + +@ganarchy.command() +@click.option('--update/--no-update', default=True) +@click.argument('project', required=False) +def cron_target(update, project): + """Runs ganarchy as a cron target. + + "Deprecated". Useful if you want full control over how GAnarchy + generates the pages. + """ + #conf = None + ## reverse order is intentional + #for d in reversed(config_dirs): + # try: + # conf = Config(open(d + "/config.toml", 'r', encoding='utf-8', newline=''), conf) + # except (OSError, UnicodeDecodeError, qtoml.decoder.TOMLDecodeError): + # pass + #with open(config_home + "/config.toml", 'r', encoding='utf-8', newline='') as f: + # conf = Config(f, conf) + env = get_env() + if project == "config": + # render the config + # doesn't have access to a GAnarchy object. this is deliberate. + template = env.get_template('index.toml') + click.echo(template.render(config = conf)) + return + if project == "project-list": + # could be done with a template but eh w/e, this is probably better + for project in conf.projects.keys(): + click.echo(project) + return + # make sure the cache dir exists + os.makedirs(cache_home, exist_ok=True) + # make sure it is a git repo + subprocess.call(["git", "-C", cache_home, "init", "-q"]) + conn = sqlite3.connect(data_home + "/ganarchy.db") + instance = GAnarchy(conn, conf, list_projects=project in ["index", "config"]) + if project == "index": + # render the index + template = env.get_template('index.html') + click.echo(template.render(ganarchy = instance)) + return + if not instance.base_url or not project: + click.echo("No base URL or project commit specified", err=True) + return + entries = [] + generate_html = [] + c = conn.cursor() + p = Project(conn, project, list_repos=True) + results = p.update(update) + for (repo, count) in results: + if count is not None: + entries.append((repo.url, count, repo.hash, repo.branch, project)) + generate_html.append((repo.url, repo.message, count, repo.branch)) + # sort stuff twice because reasons + entries.sort(key=lambda x: x[1], reverse=True) + generate_html.sort(key=lambda x: x[2], reverse=True) + if update: + c.executemany('''INSERT INTO "repo_history" ("url", "count", "head_commit", "branch", "project") VALUES (?, ?, ?, ?, ?)''', entries) + conn.commit() + html_entries = [] + for (url, msg, count, branch) in generate_html: + history = c.execute('''SELECT "count" FROM "repo_history" WHERE "url" = ? AND "branch" IS ? AND "project" IS ? ORDER BY "entry" ASC''', (url, branch, project)).fetchall() + # TODO process history into SVG + html_entries.append((url, msg, "", branch)) + template = env.get_template('project.html') + click.echo(template.render(project_title = p.title, + project_desc = p.description, + project_body = p.commit_body, + project_commit = p.commit, + repos = html_entries, + base_url = instance.base_url, + # I don't think this thing supports deprecating the above? + project = p, + ganarchy = instance)) -- cgit 1.4.1