aboutsummaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rwxr-xr-xmain.py185
1 files changed, 8 insertions, 177 deletions
diff --git a/main.py b/main.py
index 361361a..c91fc1c 100755
--- a/main.py
+++ b/main.py
@@ -1,179 +1,10 @@
#!/usr/bin/env python3
import sys
-import os
-import subprocess
-import re
-import datetime
import argparse
from config import config
-import graphql_queries
-import journal
-
-def print_item(item):
- trimmmed_path = item["path"][:17]+"..." if len(item["path"]) > 20 else item["path"]
- print("| %6s | %20s | %44s |" % (item["id"], trimmmed_path, item["title"]) )
-
-
-def create(args):
- """
- Create a page with the given args.
-
- args is a dictionary with the following keys:
- path: the path to create a page with
- title: the title for the page
- content (optional): the content for the page. If not present, editor is opened
- """
- page = get_single_page(args["path"])
- if page is not None:
- print("Page already exists with path: %s" % args["path"])
- if input("Edit it? (y/n) ") == "y":
- edit(args)
- return
- title = args["title"]
- path = args["path"]
- if "content" not in args:
- content = open_editor("create", path, "")
- else:
- content = args["content"]
- response = graphql_queries.create_page(content, title, path)
- result = response["data"]["pages"]["create"]["responseResult"]
- if not result["succeeded"]:
- print("Error!", result["message"])
- sys.exit(1)
- print(result["message"])
-
-def get_tree(regex):
- response = graphql_queries.get_tree()
- regex = " ".join(regex)
- pages = []
- for item in response["data"]["pages"]["list"]:
- if not re.search(regex, item["path"]):
- continue
- pages.append(item)
- return pages
-
-def tree(args):
- """
- Finds pages based on a path search
-
- args is a dictionary with the following keys:
- regex: the regex to search paths with
- """
- for item in get_tree(args["regex"]):
- print_item(item)
-
-def get_single_page(path):
- """
- Gets the page from the wiki with the given path
- """
- if path.startswith("/"):
- path = path[1:]
- for item in graphql_queries.get_tree()["data"]["pages"]["list"]:
- if path == item["path"]:
- page_id = int(item["id"])
- response = graphql_queries.get_single_page(page_id)
- return response["data"]["pages"]["single"]
- return None
-
-def single(args):
- """
- View a page with the given path
-
- args is a dictionary with the following keys:
- path: the path of the page
- """
- page = get_single_page(args["path"])
- if page is None:
- print("No page with path: %s" % args["path"])
- sys.exit(1)
- if False: # not args["skip-header"]:
- print("-" * 80)
- print_item(page)
- print("-" * 80)
- print(page["content"])
-
-def move(args):
- """
- Move a page from one path to another
-
- args is a dictionary with the following keys:
- src_path: page of existing path
- dst_path: path page should be moved to
- """
- source = args["src_path"]
- dest = args["dst_path"]
- page = get_single_page(source)
- if page is None:
- print("Source page %s does not exist" % source)
- sys.exit(1)
- response = graphql_queries.move_page(page["id"], dest)
- result = response["data"]["pages"]["move"]["responseResult"]
- if not result["succeeded"]:
- print("Error!", result["message"])
- sys.exit(1)
- print(result["message"])
-
-def clean_filename(pathname):
- """
- Clean the path so that it can be used as a filename
- """
- pathname = str(pathname).strip().replace('/', '_')
- pathname = re.sub(r'\W', '', pathname)
- return pathname[:200]
-
-def open_editor(action, pathname, initial_body):
- """
- Open a page with the given pathname and intial_body in an editor, using
- action in the filename. Returns the content of the edited file.
- """
- if "VISUAL" in os.environ:
- editor = os.environ['VISUAL']
- else:
- editor = os.environ['EDITOR']
- filename = "/tmp/wikijscmd-"+action+"-"+clean_filename(pathname)+".md"
- if len(initial_body) > 0:
- with open(filename, "w") as f:
- f.write(initial_body)
- subprocess.run([editor, filename])
- with open(filename, "r") as f:
- new_body = f.read()
- os.remove(filename)
- return new_body
-
-def edit(args):
- """
- Edit a page
-
- args is a dictionary with the following keys:
- path: the path of the page to edit
- save (optional): include with any value to save without any prompt
- """
- page = get_single_page(args["path"])
- if page is None:
- print("No page with path: %s" % args["path"])
- if input("Create it? (y/n) ") == "y":
- title = input("Enter the title: ").strip()
- create({"path": args["path"], "title": title})
- return
- body = page["content"]
-
- # Open it in editor
- new_body = open_editor("edit", args["path"], body)
-
- # Prompt user to save it to the wiki
- print_item(page)
- print("-" * 80)
- print(new_body)
- print("-" * 80)
- if "save" in args or input("Save changes? (y/n) ") == "y":
- response = graphql_queries.edit_page(page["id"], new_body, page["title"], page["path"])
- result = response["data"]["pages"]["update"]["responseResult"]
- if not result["succeeded"]:
- print("Error!", result["message"])
- sys.exit(1)
- print(result["message"])
+from commands import create, edit, single, tree, today, move, fill_in_pages
def main():
parser = argparse.ArgumentParser("wikijscmd")
@@ -183,11 +14,11 @@ def main():
parser_create = subparsers.add_parser("create", help="create a page")
parser_create.add_argument("path", type=str, help="the path of the new page")
parser_create.add_argument("title", type=str, help="the title of the new page")
- parser_create.add_argument("content", nargs='*', type=str, help="optional page content")
+ parser_create.add_argument("content", nargs="?", type=str, help="optional page content")
parser_create.set_defaults(command=create)
parser_tree = subparsers.add_parser("tree", help="search in the page tree")
- parser_tree.add_argument("regex", nargs='*', type=str, help="optional regex to search paths with")
+ parser_tree.add_argument("regex", type=str, help="optional regex to search paths with")
parser_tree.set_defaults(command=tree)
parser_single = subparsers.add_parser("single", help="view a single page")
@@ -199,15 +30,15 @@ def main():
parser_edit.set_defaults(command=edit)
parser_today = subparsers.add_parser("today", help="create/edit the journal page for today")
- parser_today.set_defaults(command=journal.today)
+ parser_today.set_defaults(command=today)
parser_move = subparsers.add_parser("move", help="move a page")
- parser_move.add_argument("src_path", type=str, help="the path of the page to move")
- parser_move.add_argument("dst_path", type=str, help="the destination path")
+ parser_move.add_argument("source", type=str, help="the path of the page to move")
+ parser_move.add_argument("dest", type=str, help="the destination path")
parser_move.set_defaults(command=move)
parser_journal = subparsers.add_parser("journal", help="create journal pages")
- parser_journal.set_defaults(command=journal.fill_in_pages)
+ parser_journal.set_defaults(command=fill_in_pages)
args = vars(parser.parse_args())
callback = args["command"]
@@ -215,7 +46,7 @@ def main():
parser.print_help()
else:
del args["command"]
- callback(args)
+ callback(**args)
if __name__ == "__main__":
main()