forked from catch/python-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.py
133 lines (103 loc) · 3.36 KB
/
cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @author NilsHamerlinck
#
# CLI to consult or manage Catch.com notes from your shell
#
# Uses Catch.com API v3
#
# Use this to export all your notes :
# $ curl -u username:password -X GET "https://api.catch.com/v3/streams/sync?full=true&limit=0" > export_v3.json
#
# Tags must be escaped:
# $ python cli.py search \#work
import codecs, locale, os, sys
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
#sys.stderr = codecs.getwriter('utf-8')(sys.stderr)
import simplejson as json
from datetime import datetime
DEFAULT_EXPORT_FILE = '../../data/export_v3.json'
DEBUG = False
VERBOSE = True
import catchapi
def change_stream_v3(tag, stream_id, username, password):
api = catchapi.CatchSession()
ok = 0
fail = 0
f = json.load(open(DEFAULT_EXPORT_FILE))
for note in f["result"]["objects"]:
if tag in note["tags"] and "default" in note["streams"]:
if VERBOSE:
print "moving %s to %s:" % (note["id"], stream_id),
if DEBUG:
continue
if api.move_note(note, stream_id, username, password):
ok += 1
if VERBOSE:
print "OK"
else:
fail += 1
if VERBOSE:
print "FAIL"
print "Done (ok: %d, fail: %d)" % (ok, fail)
def search(terms):
s = ' '.join(terms)
f = json.load(open(DEFAULT_EXPORT_FILE))
print 'Looking for "%s" in %d notes' % (s, f["result"]["count"])
print '-------------------------'
for note in f["result"]["objects"]:
if note["text"] and s in note["text"]:
d = datetime.strptime(note["modified_at"], '%Y-%m-%dT%H:%M:%S.%fZ').strftime('%Y/%m/%d %H:%M:%S')
print '%s (%s):' % (d, note["id"])
print note["text"]
print '--'
def main():
global DEBUG
global VERBOSE
import sys
from optparse import OptionParser
usage="""
%prog [ options ]
Examples:
$ python cli.py search toto
Search for notes containing toto
$ python clip.py move tag 1234 --username=username
To move notes tagged #toto from "default" to the stream whose id is 1234
"""[1:-3]
parser = OptionParser(usage=usage)
parser.add_option('--debug',
help='ne rien faire vraiment',
default=DEBUG,
action='store_true',
dest='debug')
parser.add_option('--verbose',
help='verbose',
default=VERBOSE,
action='store_true',
dest='verbose')
parser.add_option('--username',
help='username',
default=None,
action='store',
dest='username')
options, args = parser.parse_args()
DEBUG = options.debug
VERBOSE = options.verbose
if len(args) > 0:
if args[0] == 'move':
if not options.username:
print usage
return -1
from getpass import getpass
password = getpass()
change_stream_v3(args[1], args[2], options.username, password)
elif args[0] == 'search':
return search(args[1:])
else:
print usage
else:
print usage
return 0
if __name__ == '__main__':
sys.exit(main())