diff options
Diffstat (limited to 'pnote/tools')
| -rw-r--r-- | pnote/tools/__init__.py | 3 | ||||
| -rw-r--r-- | pnote/tools/admin.py | 48 | ||||
| -rw-r--r-- | pnote/tools/search.py | 79 | ||||
| -rw-r--r-- | pnote/tools/tag.py | 33 | ||||
| -rw-r--r-- | pnote/tools/tool.py | 8 |
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 |
