summaryrefslogtreecommitdiff
path: root/pnote/tools
diff options
context:
space:
mode:
Diffstat (limited to 'pnote/tools')
-rw-r--r--pnote/tools/__init__.py3
-rw-r--r--pnote/tools/admin.py48
-rw-r--r--pnote/tools/search.py79
-rw-r--r--pnote/tools/tag.py33
-rw-r--r--pnote/tools/tool.py8
5 files changed, 171 insertions, 0 deletions
diff --git a/pnote/tools/__init__.py b/pnote/tools/__init__.py
new file mode 100644
index 0000000..20a6981
--- /dev/null
+++ b/pnote/tools/__init__.py
@@ -0,0 +1,3 @@
+from pnote.tools.search import *
+from pnote.tools.tag import *
+from pnote.tools.admin import *
diff --git a/pnote/tools/admin.py b/pnote/tools/admin.py
new file mode 100644
index 0000000..f3e03d5
--- /dev/null
+++ b/pnote/tools/admin.py
@@ -0,0 +1,48 @@
+from pnote.tools.tool import Tool
+import argparse
+from datetime import datetime
+
+class ToolAdmin(Tool):
+
+ def add_parser(self,subparsers):
+ self.p = subparsers.add_parser("admin", description="Manage your notes tags")
+ self.p.add_argument("--fix-dry", help="fix new and deleted note files (DRY RUN)", action='store_true')
+ self.p.add_argument("--fix", help="fix new and delete note files", action='store_true')
+ self.p.add_argument("--import", help="Import file(s) to notes", nargs="+", dest="imports")
+ self.p.add_argument("--timestamp", help="Timestamp to use for file(s) import")
+ self.p.add_argument("--file-infos", help="Get note file(s) infos", action='store_true')
+ self.p.add_argument("--subpath", help="")
+ self.p.add_argument("-s", "--subpaths", help="Subpath to use for file(s) infos", nargs="+")
+
+ def run(self, project, args):
+ if args.fix_dry:
+ project.fix(True)
+ elif args.fix:
+ project.fix(False)
+ elif args.imports:
+ if args.timestamp:
+ for f in args.imports:
+ project.addfile(f,int(args.timestamp))
+ else:
+ for f in args.imports:
+ project.addfile(f)
+ elif args.file_infos:
+ if args.subpaths:
+ subpaths=args.subpaths
+ else:
+ subpaths=project.find(None)
+ first=True
+ for subpath in subpaths:
+ if not first:
+ print()
+ print("=> "+subpath)
+ ts_created=project.getfileinfo(subpath,"created")
+ ts_added=project.getfileinfo(subpath,"added")
+ print("Created on: "+str(datetime.fromtimestamp(int(ts_created))))
+ print("Added on: "+str(datetime.fromtimestamp(int(ts_added))))
+ print("Added with host: "+str(project.getfileinfo(subpath,"hostname")))
+ print("Added host infos: "+str(project.getfileinfo(subpath,"platform")))
+ print("Tags: "+str(project.listtags(subpath)))
+ first=False
+ else:
+ self.p.print_help()
diff --git a/pnote/tools/search.py b/pnote/tools/search.py
new file mode 100644
index 0000000..298010b
--- /dev/null
+++ b/pnote/tools/search.py
@@ -0,0 +1,79 @@
+from pnote.tools.tool import Tool
+import argparse
+
+class ToolSearch(Tool):
+
+ def add_parser(self,subparsers):
+ p = subparsers.add_parser("search", description="Perform search operation on your notes")
+ p.add_argument("-g", "--grep", help="Grep an expression")
+ p.add_argument("-n", "--name", help="Search for a note path")
+ p.add_argument("-i", "--ignore-case", help="Ignore case during search", action='store_true')
+ p.add_argument("-t", "--tag", help="Search for a note with a tag")
+ p.add_argument("-c", "--content-only", help="Show content only", action='store_true')
+ p.add_argument("-s", "--subpath-only", help="Show file subpath only", action='store_true')
+ p.add_argument("--last-created", help="Get last n created note files")
+ p.add_argument("--last-added", help="Get last n added note files")
+
+ def catsubpath(self,project,subpath):
+ with open(project.getpath(subpath),"r") as fp:
+ for line in fp:
+ print(line,end="")
+
+ def catsubpaths(self, project, subpaths, content_only=False, subpath_only=False):
+ first=True
+ for subpath in subpaths:
+ if subpath_only:
+ print(subpath)
+ continue
+ if not content_only:
+ if not first:
+ print()
+ print("=> "+subpath)
+ self.catsubpath(project,subpath)
+ first=False
+
+ def run(self, project, args):
+ ignore_case=True if args.ignore_case else False
+ content_only=True if args.content_only else False
+ subpath_only=True if args.subpath_only else False
+
+ if content_only and subpath_only:
+ print("content and file-path options cannot be used at the same time")
+ exit(1)
+ if args.grep:
+ first=True
+ for entry in project.grep(args.grep, ignore_case):
+ subpath=entry[0]
+ if subpath_only:
+ print(subpath)
+ continue
+ if not content_only:
+ if not first:
+ print()
+ print("=> "+subpath)
+ for line in entry[1]:
+ ln=line[0]
+ content=line[1]
+ if content_only:
+ print(content)
+ else:
+ print("L{}: {}".format(ln,content))
+ first=False
+
+ elif args.tag:
+ self.catsubpaths(project, project.searchtag(args.tag),content_only,subpath_only)
+
+ elif args.last_created:
+ subpaths=project.listlastcreated()
+ self.catsubpaths(project, subpaths[-abs(int(args.last_created)):],content_only,subpath_only)
+
+ elif args.last_added:
+ subpaths=project.listlastadded()
+ self.catsubpaths(project, subpaths[-abs(int(args.last_added)):],content_only,subpath_only)
+
+ else:
+ if args.name:
+ self.catsubpaths(project, project.find(args.name,ignore_case),content_only,subpath_only)
+ else:
+ self.catsubpaths(project, project.find(None),content_only,subpath_only)
+
diff --git a/pnote/tools/tag.py b/pnote/tools/tag.py
new file mode 100644
index 0000000..e45b8c8
--- /dev/null
+++ b/pnote/tools/tag.py
@@ -0,0 +1,33 @@
+from pnote.tools.tool import Tool
+import argparse
+
+class ToolTag(Tool):
+
+ def add_parser(self,subparsers):
+ p = subparsers.add_parser("tag", description="Manage your notes tags")
+ p.add_argument("-s", "--subpaths", help="Subpaths to edit", nargs="+")
+ p.add_argument("-a", "--add", help="Add tags to notes", nargs="+")
+ p.add_argument("-d", "--delete", help="Delete tags from notes", nargs="+")
+ p.add_argument('-l', '--last-edited', help="Tag last edited file", action="store_true")
+
+ def run(self, project, args):
+ if args.subpaths:
+ if args.add:
+ project.addtags(args.subpaths,args.add)
+ elif args.delete:
+ project.deletetags(args.subpaths,args.delete)
+ else:
+ for subpath in args.subpaths:
+ for tag in project.listtags(subpath):
+ print(tag)
+ else:
+ if args.delete:
+ project.obliteratetags(args.delete)
+ elif args.add:
+ if args.last_edited:
+ project.addtagslastedited(args.add)
+ else:
+ project.addtagstoday(args.add)
+ else:
+ for tag in project.listtags():
+ print(tag)
diff --git a/pnote/tools/tool.py b/pnote/tools/tool.py
new file mode 100644
index 0000000..5aa7901
--- /dev/null
+++ b/pnote/tools/tool.py
@@ -0,0 +1,8 @@
+
+class Tool:
+
+ def add_parser(self,subparsers):
+ pass
+
+ def run(self, project, args):
+ pass