Diff
from v0.3.1 to v0.3.2
Diffstat
CHANGELOG.rst | 115 +++++++++++++++++++++++++++++
Pipfile.lock | 175 +++++++++++++++++++++++++-------------------
README.rst | 35 +++++++-
TODO.txt | 3
contrib/clear_ids.py | 63 ++++++++++++++++
docs/source/index.rst | 10 +-
nncli/__init__.py | 2
nncli/cli.py | 4
nncli/gui.py | 5
nncli/notes_db.py | 15 ++-
pyproject.toml | 4
CHANGELOG.rst (created)
|
1 |
+Changelog |
|
2 |
+========= |
|
3 |
+ |
|
4 |
+All notable changes to this project will be documented in this file. |
|
5 |
+ |
|
6 |
+The format is based on `Keep a Changelog`_ , and this project adheres to |
|
7 |
+`Semantic Versioning`_. |
|
8 |
+ |
|
9 |
+Unreleased_ |
|
10 |
+----------- |
|
11 |
+ |
|
12 |
+Added |
|
13 |
+~~~~~ |
|
14 |
+ |
|
15 |
+- ``CHANGELOG.rst`` |
|
16 |
+ |
|
17 |
+- ``TODO.txt`` |
|
18 |
+ |
|
19 |
+- ``clear_ids.py`` contrib script |
|
20 |
+ |
|
21 |
+Changed |
|
22 |
+~~~~~~~ |
|
23 |
+ |
|
24 |
+- References to Github repo changed to point to git.danielmoch.com |
|
25 |
+ (Github is now a mirror only) |
|
26 |
+ |
|
27 |
+- Fixed exception in ``nncli sync`` |
|
28 |
+ |
|
29 |
+v0.3.1_ – 2018-10-30 |
|
30 |
+-------------------- |
|
31 |
+ |
|
32 |
+Added |
|
33 |
+~~~~~ |
|
34 |
+ |
|
35 |
+- Partial unit testing for ``nncli.py`` module |
|
36 |
+ |
|
37 |
+Changed |
|
38 |
+~~~~~~~ |
|
39 |
+ |
|
40 |
+- Refactored code (addressing pylint findings) |
|
41 |
+ |
|
42 |
+- Fixed bad exception handling in Python 3.4 |
|
43 |
+ |
|
44 |
+Removed |
|
45 |
+~~~~~~~ |
|
46 |
+ |
|
47 |
+v0.3.0_ – 2018-09-07 |
|
48 |
+-------------------- |
|
49 |
+ |
|
50 |
+Added |
|
51 |
+~~~~~ |
|
52 |
+ |
|
53 |
+- Documentation as PDF format |
|
54 |
+ |
|
55 |
+Changed |
|
56 |
+~~~~~~~ |
|
57 |
+ |
|
58 |
+- Numerous documentation corrections |
|
59 |
+ |
|
60 |
+v0.2.0_ – 2018-09-03 |
|
61 |
+-------------------- |
|
62 |
+ |
|
63 |
+Added |
|
64 |
+~~~~~ |
|
65 |
+ |
|
66 |
+- ``.travis.yml`` |
|
67 |
+ |
|
68 |
+- Pytest, tox, et all added to support automated testing |
|
69 |
+ |
|
70 |
+- Both tox and Travis testing back to Python 3.4 |
|
71 |
+ |
|
72 |
+v0.1.2_ – 2018-08-30 |
|
73 |
+-------------------- |
|
74 |
+ |
|
75 |
+Added |
|
76 |
+~~~~~ |
|
77 |
+ |
|
78 |
+- Support for ``--version`` flag |
|
79 |
+ |
|
80 |
+Changed |
|
81 |
+~~~~~~~ |
|
82 |
+ |
|
83 |
+- requirements.txt replaced with Pipfile{,.lock} |
|
84 |
+ |
|
85 |
+v0.1.1_ – 2018-08-07 |
|
86 |
+-------------------- |
|
87 |
+ |
|
88 |
+Added |
|
89 |
+~~~~~ |
|
90 |
+ |
|
91 |
+- README content included in PyPI |
|
92 |
+ |
|
93 |
+Changed |
|
94 |
+~~~~~~~ |
|
95 |
+ |
|
96 |
+- README content and formatting |
|
97 |
+ |
|
98 |
+- Fix ``nncli import`` command |
|
99 |
+ |
|
100 |
+v0.1.0 – 2018-07-31 |
|
101 |
+------------------- |
|
102 |
+ |
|
103 |
+Added |
|
104 |
+~~~~~ |
|
105 |
+ |
|
106 |
+- Hard fork of sncli |
|
107 |
+ |
|
108 |
+.. _Keep a Changelog: https://keepachangelog.com/en/1.0.0/ |
|
109 |
+.. _Semantic Versioning: https://semver.org/spec/v2.0.0.html |
|
110 |
+.. _Unreleased: https://git.danielmoch.com/nncli.git/diff/?id=master&id2=v0.3.1 |
|
111 |
+.. _v0.3.1: https://git.danielmoch.com/nncli.git/diff/?id=v0.3.1&id2=v0.3.0 |
|
112 |
+.. _v0.3.0: https://git.danielmoch.com/nncli.git/diff/?id=v0.3.0&id2=v0.2.0 |
|
113 |
+.. _v0.2.0: https://git.danielmoch.com/nncli.git/diff/?id=v0.2.0&id2=v0.1.2 |
|
114 |
+.. _v0.1.2: https://git.danielmoch.com/nncli.git/diff/?id=v0.1.2&id2=v0.1.1 |
|
115 |
+.. _v0.1.1: https://git.danielmoch.com/nncli.git/diff/?id=v0.1.1&id2=v0.1.0 |
Pipfile.lock
53 |
53 |
}, |
54 |
54 |
"requests": { |
55 |
55 |
"hashes": [ |
56 |
|
- "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", |
57 |
|
- "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" |
|
56 |
+ "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54", |
|
57 |
+ "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263" |
58 |
58 |
], |
59 |
59 |
"index": "pypi", |
60 |
|
- "version": "==2.20.0" |
|
60 |
+ "version": "==2.20.1" |
61 |
61 |
}, |
62 |
62 |
"urllib3": { |
63 |
63 |
"hashes": [ |
64 |
|
- "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", |
65 |
|
- "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" |
|
64 |
+ "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", |
|
65 |
+ "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" |
66 |
66 |
], |
67 |
|
- "version": "==1.24" |
|
67 |
+ "version": "==1.24.1" |
68 |
68 |
}, |
69 |
69 |
"urwid": { |
70 |
70 |
"hashes": [ |
|
|
. . . |
84 |
84 |
}, |
85 |
85 |
"astroid": { |
86 |
86 |
"hashes": [ |
87 |
|
- "sha256:292fa429e69d60e4161e7612cb7cc8fa3609e2e309f80c224d93a76d5e7b58be", |
88 |
|
- "sha256:c7013d119ec95eb626f7a2011f0b63d0c9a095df9ad06d8507b37084eada1a8d" |
|
87 |
+ "sha256:35b032003d6a863f5dcd7ec11abd5cd5893428beaa31ab164982403bcb311f22", |
|
88 |
+ "sha256:6a5d668d7dc69110de01cdf7aeec69a679ef486862a0850cc0fd5571505b6b7e" |
89 |
89 |
], |
90 |
|
- "version": "==2.0.4" |
|
90 |
+ "version": "==2.1.0" |
91 |
91 |
}, |
92 |
92 |
"atomicwrites": { |
93 |
93 |
"hashes": [ |
|
|
. . . |
126 |
126 |
}, |
127 |
127 |
"coverage": { |
128 |
128 |
"hashes": [ |
129 |
|
- "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", |
130 |
|
- "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", |
131 |
|
- "sha256:0bf8cbbd71adfff0ef1f3a1531e6402d13b7b01ac50a79c97ca15f030dba6306", |
132 |
|
- "sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95", |
133 |
|
- "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", |
134 |
|
- "sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd", |
135 |
|
- "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", |
136 |
|
- "sha256:2a5b73210bad5279ddb558d9a2bfedc7f4bf6ad7f3c988641d83c40293deaec1", |
137 |
|
- "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", |
138 |
|
- "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", |
139 |
|
- "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", |
140 |
|
- "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", |
141 |
|
- "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", |
142 |
|
- "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", |
143 |
|
- "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", |
144 |
|
- "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", |
145 |
|
- "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", |
146 |
|
- "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", |
147 |
|
- "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", |
148 |
|
- "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", |
149 |
|
- "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", |
150 |
|
- "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", |
151 |
|
- "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", |
152 |
|
- "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", |
153 |
|
- "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", |
154 |
|
- "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", |
155 |
|
- "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", |
156 |
|
- "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", |
157 |
|
- "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", |
158 |
|
- "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", |
159 |
|
- "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", |
160 |
|
- "sha256:f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e", |
161 |
|
- "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80" |
|
129 |
+ "sha256:09e47c529ff77bf042ecfe858fb55c3e3eb97aac2c87f0349ab5a7efd6b3939f", |
|
130 |
+ "sha256:0a1f9b0eb3aa15c990c328535655847b3420231af299386cfe5efc98f9c250fe", |
|
131 |
+ "sha256:0cc941b37b8c2ececfed341444a456912e740ecf515d560de58b9a76562d966d", |
|
132 |
+ "sha256:10e8af18d1315de936d67775d3a814cc81d0747a1a0312d84e27ae5610e313b0", |
|
133 |
+ "sha256:1b4276550b86caa60606bd3572b52769860a81a70754a54acc8ba789ce74d607", |
|
134 |
+ "sha256:1e8a2627c48266c7b813975335cfdea58c706fe36f607c97d9392e61502dc79d", |
|
135 |
+ "sha256:2b224052bfd801beb7478b03e8a66f3f25ea56ea488922e98903914ac9ac930b", |
|
136 |
+ "sha256:447c450a093766744ab53bf1e7063ec82866f27bcb4f4c907da25ad293bba7e3", |
|
137 |
+ "sha256:46101fc20c6f6568561cdd15a54018bb42980954b79aa46da8ae6f008066a30e", |
|
138 |
+ "sha256:4710dc676bb4b779c4361b54eb308bc84d64a2fa3d78e5f7228921eccce5d815", |
|
139 |
+ "sha256:510986f9a280cd05189b42eee2b69fecdf5bf9651d4cd315ea21d24a964a3c36", |
|
140 |
+ "sha256:5535dda5739257effef56e49a1c51c71f1d37a6e5607bb25a5eee507c59580d1", |
|
141 |
+ "sha256:5a7524042014642b39b1fcae85fb37556c200e64ec90824ae9ecf7b667ccfc14", |
|
142 |
+ "sha256:5f55028169ef85e1fa8e4b8b1b91c0b3b0fa3297c4fb22990d46ff01d22c2d6c", |
|
143 |
+ "sha256:6694d5573e7790a0e8d3d177d7a416ca5f5c150742ee703f3c18df76260de794", |
|
144 |
+ "sha256:6831e1ac20ac52634da606b658b0b2712d26984999c9d93f0c6e59fe62ca741b", |
|
145 |
+ "sha256:77f0d9fa5e10d03aa4528436e33423bfa3718b86c646615f04616294c935f840", |
|
146 |
+ "sha256:828ad813c7cdc2e71dcf141912c685bfe4b548c0e6d9540db6418b807c345ddd", |
|
147 |
+ "sha256:85a06c61598b14b015d4df233d249cd5abfa61084ef5b9f64a48e997fd829a82", |
|
148 |
+ "sha256:8cb4febad0f0b26c6f62e1628f2053954ad2c555d67660f28dfb1b0496711952", |
|
149 |
+ "sha256:a5c58664b23b248b16b96253880b2868fb34358911400a7ba39d7f6399935389", |
|
150 |
+ "sha256:aaa0f296e503cda4bc07566f592cd7a28779d433f3a23c48082af425d6d5a78f", |
|
151 |
+ "sha256:ab235d9fe64833f12d1334d29b558aacedfbca2356dfb9691f2d0d38a8a7bfb4", |
|
152 |
+ "sha256:b3b0c8f660fae65eac74fbf003f3103769b90012ae7a460863010539bb7a80da", |
|
153 |
+ "sha256:bab8e6d510d2ea0f1d14f12642e3f35cefa47a9b2e4c7cea1852b52bc9c49647", |
|
154 |
+ "sha256:c45297bbdbc8bb79b02cf41417d63352b70bcb76f1bbb1ee7d47b3e89e42f95d", |
|
155 |
+ "sha256:d19bca47c8a01b92640c614a9147b081a1974f69168ecd494687c827109e8f42", |
|
156 |
+ "sha256:d64b4340a0c488a9e79b66ec9f9d77d02b99b772c8b8afd46c1294c1d39ca478", |
|
157 |
+ "sha256:da969da069a82bbb5300b59161d8d7c8d423bc4ccd3b410a9b4d8932aeefc14b", |
|
158 |
+ "sha256:ed02c7539705696ecb7dc9d476d861f3904a8d2b7e894bd418994920935d36bb", |
|
159 |
+ "sha256:ee5b8abc35b549012e03a7b1e86c09491457dba6c94112a2482b18589cc2bdb9" |
162 |
160 |
], |
163 |
|
- "version": "==4.5.1" |
|
161 |
+ "version": "==4.5.2" |
164 |
162 |
}, |
165 |
163 |
"docutils": { |
166 |
164 |
"hashes": [ |
|
|
. . . |
172 |
170 |
}, |
173 |
171 |
"filelock": { |
174 |
172 |
"hashes": [ |
175 |
|
- "sha256:86fe6af56ae08ebc9c66d54ba3398c35b98916d0862d782b276a65816ff39392", |
176 |
|
- "sha256:97694f181bdf58f213cca0a7cb556dc7bf90e2f8eb9aa3151260adac56701afb" |
|
173 |
+ "sha256:b8d5ca5ca1c815e1574aee746650ea7301de63d87935b3463d26368b76e31633", |
|
174 |
+ "sha256:d610c1bb404daf85976d7a82eb2ada120f04671007266b708606565dd03b5be6" |
177 |
175 |
], |
178 |
|
- "version": "==3.0.9" |
|
176 |
+ "version": "==3.0.10" |
179 |
177 |
}, |
180 |
178 |
"flit": { |
181 |
179 |
"hashes": [ |
|
|
. . . |
250 |
248 |
}, |
251 |
249 |
"markupsafe": { |
252 |
250 |
"hashes": [ |
253 |
|
- "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" |
|
251 |
+ "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432", |
|
252 |
+ "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b", |
|
253 |
+ "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9", |
|
254 |
+ "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af", |
|
255 |
+ "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834", |
|
256 |
+ "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd", |
|
257 |
+ "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d", |
|
258 |
+ "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7", |
|
259 |
+ "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b", |
|
260 |
+ "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3", |
|
261 |
+ "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c", |
|
262 |
+ "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2", |
|
263 |
+ "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7", |
|
264 |
+ "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36", |
|
265 |
+ "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1", |
|
266 |
+ "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e", |
|
267 |
+ "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1", |
|
268 |
+ "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c", |
|
269 |
+ "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856", |
|
270 |
+ "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550", |
|
271 |
+ "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492", |
|
272 |
+ "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672", |
|
273 |
+ "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401", |
|
274 |
+ "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6", |
|
275 |
+ "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6", |
|
276 |
+ "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c", |
|
277 |
+ "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd", |
|
278 |
+ "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1" |
254 |
279 |
], |
255 |
|
- "version": "==1.0" |
|
280 |
+ "version": "==1.1.0" |
256 |
281 |
}, |
257 |
282 |
"mccabe": { |
258 |
283 |
"hashes": [ |
|
|
. . . |
295 |
320 |
}, |
296 |
321 |
"pbr": { |
297 |
322 |
"hashes": [ |
298 |
|
- "sha256:8fc938b1123902f5610b06756a31b1e6febf0d105ae393695b0c9d4244ed2910", |
299 |
|
- "sha256:f20ec0abbf132471b68963bb34d9c78e603a5cf9e24473f14358e66551d47475" |
|
323 |
+ "sha256:f59d71442f9ece3dffc17bc36575768e1ee9967756e6b6535f0ee1f0054c3d68", |
|
324 |
+ "sha256:f6d5b23f226a2ba58e14e49aa3b1bfaf814d0199144b95d78458212444de1387" |
300 |
325 |
], |
301 |
|
- "version": "==5.1.0" |
|
326 |
+ "version": "==5.1.1" |
302 |
327 |
}, |
303 |
328 |
"pluggy": { |
304 |
329 |
"hashes": [ |
|
|
. . . |
323 |
348 |
}, |
324 |
349 |
"pygments": { |
325 |
350 |
"hashes": [ |
326 |
|
- "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", |
327 |
|
- "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" |
|
351 |
+ "sha256:6301ecb0997a52d2d31385e62d0a4a4cf18d2f2da7054a5ddad5c366cd39cee7", |
|
352 |
+ "sha256:82666aac15622bd7bb685a4ee7f6625dd716da3ef7473620c192c0168aae64fc" |
328 |
353 |
], |
329 |
|
- "version": "==2.2.0" |
|
354 |
+ "version": "==2.3.0" |
330 |
355 |
}, |
331 |
356 |
"pylint": { |
332 |
357 |
"hashes": [ |
333 |
|
- "sha256:1d6d3622c94b4887115fe5204982eee66fdd8a951cf98635ee5caee6ec98c3ec", |
334 |
|
- "sha256:31142f764d2a7cd41df5196f9933b12b7ee55e73ef12204b648ad7e556c119fb" |
|
358 |
+ "sha256:689de29ae747642ab230c6d37be2b969bf75663176658851f456619aacf27492", |
|
359 |
+ "sha256:771467c434d0d9f081741fec1d64dfb011ed26e65e12a28fe06ca2f61c4d556c" |
335 |
360 |
], |
336 |
361 |
"index": "pypi", |
337 |
|
- "version": "==2.1.1" |
|
362 |
+ "version": "==2.2.2" |
338 |
363 |
}, |
339 |
364 |
"pyparsing": { |
340 |
365 |
"hashes": [ |
341 |
|
- "sha256:bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a", |
342 |
|
- "sha256:d29593d8ebe7b57d6967b62494f8c72b03ac0262b1eed63826c6f788b3606401" |
|
366 |
+ "sha256:40856e74d4987de5d01761a22d1621ae1c7f8774585acae358aa5c5936c6c90b", |
|
367 |
+ "sha256:f353aab21fd474459d97b709e527b5571314ee5f067441dc9f88e33eecd96592" |
343 |
368 |
], |
344 |
|
- "version": "==2.2.2" |
|
369 |
+ "version": "==2.3.0" |
345 |
370 |
}, |
346 |
371 |
"pytest": { |
347 |
372 |
"hashes": [ |
348 |
|
- "sha256:a9e5e8d7ab9d5b0747f37740276eb362e6a76275d76cebbb52c6049d93b475db", |
349 |
|
- "sha256:bf47e8ed20d03764f963f0070ff1c8fda6e2671fc5dd562a4d3b7148ad60f5ca" |
|
373 |
+ "sha256:1d131cc532be0023ef8ae265e2a779938d0619bb6c2510f52987ffcba7fa1ee4", |
|
374 |
+ "sha256:ca4761407f1acc85ffd1609f464ca20bb71a767803505bd4127d0e45c5a50e23" |
350 |
375 |
], |
351 |
376 |
"index": "pypi", |
352 |
|
- "version": "==3.9.3" |
|
377 |
+ "version": "==4.0.1" |
353 |
378 |
}, |
354 |
379 |
"pytest-cov": { |
355 |
380 |
"hashes": [ |
|
|
. . . |
382 |
407 |
}, |
383 |
408 |
"requests": { |
384 |
409 |
"hashes": [ |
385 |
|
- "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", |
386 |
|
- "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" |
|
410 |
+ "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54", |
|
411 |
+ "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263" |
387 |
412 |
], |
388 |
413 |
"index": "pypi", |
389 |
|
- "version": "==2.20.0" |
|
414 |
+ "version": "==2.20.1" |
390 |
415 |
}, |
391 |
416 |
"scandir": { |
392 |
417 |
"hashes": [ |
|
|
. . . |
422 |
447 |
}, |
423 |
448 |
"sphinx": { |
424 |
449 |
"hashes": [ |
425 |
|
- "sha256:652eb8c566f18823a022bb4b6dbc868d366df332a11a0226b5bc3a798a479f17", |
426 |
|
- "sha256:d222626d8356de702431e813a05c68a35967e3d66c6cd1c2c89539bb179a7464" |
|
450 |
+ "sha256:120732cbddb1b2364471c3d9f8bfd4b0c5b550862f99a65736c77f970b142aea", |
|
451 |
+ "sha256:b348790776490894e0424101af9c8413f2a86831524bd55c5f379d3e3e12ca64" |
427 |
452 |
], |
428 |
453 |
"index": "pypi", |
429 |
|
- "version": "==1.8.1" |
|
454 |
+ "version": "==1.8.2" |
430 |
455 |
}, |
431 |
456 |
"sphinxcontrib-websupport": { |
432 |
457 |
"hashes": [ |
|
|
. . . |
452 |
477 |
}, |
453 |
478 |
"urllib3": { |
454 |
479 |
"hashes": [ |
455 |
|
- "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", |
456 |
|
- "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" |
|
480 |
+ "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", |
|
481 |
+ "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" |
457 |
482 |
], |
458 |
|
- "version": "==1.24" |
|
483 |
+ "version": "==1.24.1" |
459 |
484 |
}, |
460 |
485 |
"urwid": { |
461 |
486 |
"hashes": [ |
|
|
. . . |
466 |
491 |
}, |
467 |
492 |
"virtualenv": { |
468 |
493 |
"hashes": [ |
469 |
|
- "sha256:2ce32cd126117ce2c539f0134eb89de91a8413a29baac49cbab3eb50e2026669", |
470 |
|
- "sha256:ca07b4c0b54e14a91af9f34d0919790b016923d157afda5efdde55c96718f752" |
|
494 |
+ "sha256:686176c23a538ecc56d27ed9d5217abd34644823d6391cbeb232f42bf722baad", |
|
495 |
+ "sha256:f899fafcd92e1150f40c8215328be38ff24b519cd95357fa6e78e006c7638208" |
471 |
496 |
], |
472 |
|
- "version": "==16.0.0" |
|
497 |
+ "version": "==16.1.0" |
473 |
498 |
}, |
474 |
499 |
"vulture": { |
475 |
500 |
"hashes": [ |
README.rst
8 |
8 |
**offline** *mode*. All changes are saved to a local cache on disk and |
9 |
9 |
automatically sync'ed when nncli is brought online. |
10 |
10 |
|
11 |
|
-More detailed documentation can be found in the docs. |
|
11 |
+More detailed documentation can be found at the homepage_. |
12 |
12 |
|
13 |
13 |
Requirements |
14 |
14 |
------------ |
|
|
. . . |
33 |
33 |
- If you don't already have it, install Flit_: ``pip3 install flit`` |
34 |
34 |
|
35 |
35 |
- Clone this repository to your hard disk: ``git clone |
36 |
|
- https://github.com/djmoch/nncli.git`` |
|
36 |
+ https://git.danielmoch.com/nncli.git`` |
37 |
37 |
|
38 |
38 |
- Install nncli: ``flit install --deps production`` |
39 |
39 |
|
|
|
. . . |
104 |
104 |
|
105 |
105 |
- view and edit note category |
106 |
106 |
|
|
107 |
+Contributing |
|
108 |
+------------ |
|
109 |
+ |
|
110 |
+Pull requests are welcome, preferably via emailed output of ``git |
|
111 |
+request-pull`` sent to the maintainer (see here_ for more information). |
|
112 |
+Bug reports should also be directed to the maintainer via email. |
|
113 |
+ |
|
114 |
+Releases |
|
115 |
+-------- |
|
116 |
+ |
|
117 |
+Release tags will always be signed with the maintainer's `PGP key`_ |
|
118 |
+(also available on any public keyserver_). PGP-signed versions of |
|
119 |
+release tarballs and pre-built wheel_ packages are available on PyPI_, |
|
120 |
+with the signature files living alongside the corresponding artifact |
|
121 |
+(simply append an ``.asc`` extension). Because the maintainers of PyPI |
|
122 |
+do not consider PGP signatures to be a user-facing feature, the |
|
123 |
+extension must be added manually in your browser's URL bar in order to |
|
124 |
+download the signature files. |
|
125 |
+ |
107 |
126 |
Acknowledgements |
108 |
127 |
---------------- |
109 |
128 |
|
110 |
|
-nncli is a fork of sncli_ by Eric Davis. This application further pulls in |
111 |
|
-and uses modified versions of the simplenote.py_ module by Daniel Schauenberg and |
112 |
|
-the notes_db.py module from nvpy_ by Charl P. Botha. |
|
129 |
+nncli is a fork of sncli_ by Eric Davis. This application further pulls |
|
130 |
+in and uses modified versions of the simplenote.py_ module by Daniel |
|
131 |
+Schauenberg and the notes_db.py module from nvpy_ by Charl P. Botha. |
113 |
132 |
|
|
133 |
+.. _homepage: https://nncli.org |
114 |
134 |
.. _sncli: https://github.com/insanum/sncli |
115 |
135 |
.. _Python 3: http://python.org |
116 |
136 |
.. _Urwid: http://urwid.org |
|
|
. . . |
118 |
138 |
.. _simplenote.py: https://github.com/mrtazz/simplenote.py |
119 |
139 |
.. _nvpy: https://github.com/cpbotha/nvpy |
120 |
140 |
.. _Flit: https://flit.readthedocs.io |
|
141 |
+.. _here: https://www.git-scm.com/docs/git-request-pull |
|
142 |
+.. _PGP key: https://www.danielmoch.com/static/gpg.asc |
|
143 |
+.. _wheel: https://pythonwheels.com/ |
|
144 |
+.. _PyPI: https://pypi.org/project/nncli/ |
|
145 |
+.. _keyserver: https://pgp.mit.edu/pks/lookup?op=get&search=0x323C9F1784BDDD43 |
TODO.txt (created)
|
1 |
+- Create a proper groff manual |
|
2 |
+- Address duplicate code (pylint finding) |
|
3 |
+- Target 80% unit test coverage |
contrib/clear_ids.py (created)
|
1 |
+# |
|
2 |
+# The MIT License (MIT) |
|
3 |
+# |
|
4 |
+# Copyright (c) 2018 Daniel Moch |
|
5 |
+# |
|
6 |
+# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
7 |
+# of this software and associated documentation files (the "Software"), to deal |
|
8 |
+# in the Software without restriction, including without limitation the rights |
|
9 |
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|
10 |
+# copies of the Software, and to permit persons to whom the Software is |
|
11 |
+# furnished to do so, subject to the following conditions: |
|
12 |
+# |
|
13 |
+# The above copyright notice and this permission notice shall be included in all |
|
14 |
+# copies or substantial portions of the Software. |
|
15 |
+# |
|
16 |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
17 |
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
18 |
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
19 |
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
20 |
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|
21 |
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|
22 |
+# SOFTWARE. |
|
23 |
+# |
|
24 |
+""" |
|
25 |
+clear_ids.py |
|
26 |
+ |
|
27 |
+Remove ID's from all local notes. Use this script to force a full |
|
28 |
+re-upload to NextCloud. |
|
29 |
+""" |
|
30 |
+import json |
|
31 |
+import os |
|
32 |
+import sys |
|
33 |
+ |
|
34 |
+def clear_ids(sndb_path): |
|
35 |
+ sndb_path = os.path.expanduser(sndb_path) |
|
36 |
+ if not os.path.isdir(sndb_path): |
|
37 |
+ usage("Provided sndb_path does not exist or is not a directory") |
|
38 |
+ |
|
39 |
+ for filename in os.listdir(sndb_path): |
|
40 |
+ if filename.endswith('.json'): |
|
41 |
+ with open(os.path.join(sndb_path, filename), 'r') as notefile: |
|
42 |
+ note = json.load(notefile) |
|
43 |
+ del note['id'] |
|
44 |
+ with open(os.path.join(sndb_path, filename), 'w') as notefile: |
|
45 |
+ json.dump(note, notefile) |
|
46 |
+ |
|
47 |
+def usage(message=None): |
|
48 |
+ if message is not None: |
|
49 |
+ print("ERROR: " + message) |
|
50 |
+ |
|
51 |
+ print(""" |
|
52 |
+Usage: |
|
53 |
+ python3 clear_ids.py sndb_path |
|
54 |
+ |
|
55 |
+ sndb_path - sncli notes database path |
|
56 |
+""") |
|
57 |
+ exit(1) |
|
58 |
+ |
|
59 |
+if __name__ == '__main__': |
|
60 |
+ if len(sys.argv) != 2: |
|
61 |
+ usage("Wrong number of arguments") |
|
62 |
+ |
|
63 |
+ clear_ids(sys.argv[1]) |
docs/source/index.rst
10 |
10 |
|
11 |
11 |
.. image:: https://img.shields.io/pypi/l/nncli.svg |
12 |
12 |
:alt: PyPI - License |
13 |
|
- .. image:: https://img.shields.io/travis/com/djmoch/nncli.svg |
14 |
|
- :alt: Travis (.com) |
15 |
|
- :target: https://travis-ci.com/djmoch/nncli |
|
13 |
+ :target: https://git.danielmoch.com/nncli.git/tree/LICENSE |
|
14 |
+ .. image:: https://builds.danielmoch.com/badges/nncli.svg |
|
15 |
+ :alt: Daniel Moch CI |
|
16 |
+ :target: https://builds.danielmoch.com/#/builders/nncli |
16 |
17 |
.. image:: https://img.shields.io/pypi/v/nncli.svg |
17 |
18 |
:alt: PyPI |
18 |
19 |
:target: https://pypi.org/project/nncli |
19 |
|
- .. image:: https://img.shields.io/coveralls/github/djmoch/nncli.svg |
20 |
|
- :alt: Coveralls github |
21 |
|
- :target: https://coveralls.io/github/djmoch/nncli |
22 |
20 |
.. image:: https://img.shields.io/readthedocs/nncli.svg |
23 |
21 |
:alt: Read the Docs |
24 |
22 |
:target: https://nncli.readthedocs.io |
nncli/__init__.py
1 |
1 |
# -*- coding: utf-8 -*- |
2 |
2 |
"""NextCloud Notes Command Line Interface""" |
3 |
3 |
|
4 |
|
-__version__ = '0.3.1' |
|
4 |
+__version__ = '0.3.2' |
nncli/cli.py
5 |
5 |
from . import __version__ |
6 |
6 |
from .nncli import Nncli |
7 |
7 |
|
|
8 |
+# pylint: disable=unnecessary-pass |
|
9 |
+ |
8 |
10 |
class StdinFlag(click.ParamType): |
9 |
11 |
"""StdinFlag Click Parameter Type""" |
10 |
12 |
name = "stdin_flag" |
|
|
. . . |
227 |
229 |
if ctx.invoked_subcommand is None: |
228 |
230 |
ctx.obj.gui(key) |
229 |
231 |
elif not nosync: |
230 |
|
- ctx.obj.sync_notes() |
|
232 |
+ ctx.obj.ndb.sync_notes() |
231 |
233 |
|
232 |
234 |
main.add_command(create) |
233 |
235 |
main.add_command(edit) |
nncli/gui.py
182 |
182 |
handle_mouse=False) |
183 |
183 |
|
184 |
184 |
self.nncli_loop.set_alarm_in(0, self._gui_init_view, \ |
185 |
|
- True if key else False) |
|
185 |
+ bool(key)) |
186 |
186 |
|
187 |
187 |
def run(self): |
188 |
188 |
"""Run the GUI""" |
|
|
. . . |
316 |
316 |
self._gui_body_focus() |
317 |
317 |
self.master_frame.keypress = self._gui_frame_keypress |
318 |
318 |
args[0](args[1], |
319 |
|
- True if yes_no in ['YES', 'Yes', 'yes', 'Y', 'y'] \ |
320 |
|
- else False |
|
319 |
+ yes_no in ['YES', 'Yes', 'yes', 'Y', 'y'] |
321 |
320 |
) |
322 |
321 |
|
323 |
322 |
def _gui_search_input(self, args, search_string): |
nncli/notes_db.py
14 |
14 |
|
15 |
15 |
# pylint: disable=too-many-instance-attributes, too-many-locals |
16 |
16 |
# pylint: disable=too-many-branches, too-many-statements |
|
17 |
+# pylint: disable=unnecessary-pass |
17 |
18 |
class ReadError(RuntimeError): |
18 |
19 |
"""Exception thrown on a read error""" |
19 |
20 |
pass |
|
|
. . . |
430 |
431 |
# record that we saved this to disc. |
431 |
432 |
note['savedate'] = int(time.time()) |
432 |
433 |
|
433 |
|
- def _sync_notes(self, server_sync=True, full_sync=True): |
|
434 |
+ def sync_notes(self, server_sync=True, full_sync=True): |
434 |
435 |
"""Perform a full bi-directional sync with server. |
435 |
436 |
|
436 |
437 |
Psuedo-code algorithm for syncing: |
|
|
. . . |
631 |
632 |
|
632 |
633 |
# sync done, now write changes to db_path |
633 |
634 |
|
634 |
|
- for k in list(local_updates.keys()): |
|
635 |
+ for key in list(local_updates.keys()): |
635 |
636 |
try: |
636 |
|
- self._helper_save_note(k, self.notes[k]) |
|
637 |
+ self._helper_save_note(key, self.notes[key]) |
637 |
638 |
except WriteError as ex: |
638 |
639 |
raise WriteError(str(ex)) |
639 |
640 |
self.log("Saved note to disk (key={0})".format(key)) |
640 |
641 |
|
641 |
|
- for k in list(local_deletes.keys()): |
642 |
|
- fnote = self._helper_key_to_fname(k) |
|
642 |
+ for key in list(local_deletes.keys()): |
|
643 |
+ fnote = self._helper_key_to_fname(key) |
643 |
644 |
if os.path.exists(fnote): |
644 |
645 |
os.unlink(fnote) |
645 |
646 |
self.log("Deleted note from disk (key={0})".format(key)) |
|
|
. . . |
685 |
686 |
def sync_now(self, do_server_sync=True): |
686 |
687 |
"""Sync the notes to the server""" |
687 |
688 |
self.sync_lock.acquire() |
688 |
|
- self._sync_notes(server_sync=do_server_sync, |
689 |
|
- full_sync=True if not self.last_sync else False) |
|
689 |
+ self.sync_notes(server_sync=do_server_sync, |
|
690 |
+ full_sync=not bool(self.last_sync)) |
690 |
691 |
self.sync_lock.release() |
691 |
692 |
|
692 |
693 |
def sync_worker(self, do_server_sync): |
pyproject.toml
6 |
6 |
module = "nncli" |
7 |
7 |
author = "Daniel Moch" |
8 |
8 |
author-email = "daniel@danielmoch.com" |
9 |
|
-home-page = "https://github.com/djmoch/nncli" |
|
9 |
+home-page = "https://nncli.org" |
10 |
10 |
description-file = "README.rst" |
11 |
11 |
requires = ["urwid", "requests", "appdirs", "click"] |
12 |
12 |
classifiers = ["License :: OSI Approved :: MIT License", |
|
|
. . . |
18 |
18 |
requires-python = ">=3" |
19 |
19 |
|
20 |
20 |
[tool.flit.metadata.urls] |
21 |
|
-Documentation = "https://nncli.readthedocs.io/en/latest" |
|
21 |
+"Source Code" = "https://git.danielmoch.com" |
22 |
22 |
|
23 |
23 |
[tool.flit.metadata.requires-extra] |
24 |
24 |
dev = ["pipenv"] |