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"]