diff options
-rw-r--r-- | CHANGELOG.rst | 115 | ||||
-rw-r--r-- | Pipfile.lock | 177 | ||||
-rw-r--r-- | README.rst | 35 | ||||
-rw-r--r-- | TODO.txt | 3 | ||||
-rw-r--r-- | contrib/clear_ids.py | 63 | ||||
-rw-r--r-- | docs/source/index.rst | 10 | ||||
-rw-r--r-- | nncli/__init__.py | 2 | ||||
-rw-r--r-- | nncli/cli.py | 4 | ||||
-rw-r--r-- | nncli/gui.py | 5 | ||||
-rw-r--r-- | nncli/notes_db.py | 15 | ||||
-rw-r--r-- | pyproject.toml | 4 |
11 files changed, 332 insertions, 101 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst new file mode 100644 index 0000000..eaba6e5 --- /dev/null +++ b/CHANGELOG.rst @@ -0,0 +1,115 @@ +Changelog +========= + +All notable changes to this project will be documented in this file. + +The format is based on `Keep a Changelog`_ , and this project adheres to +`Semantic Versioning`_. + +Unreleased_ +----------- + +Added +~~~~~ + +- ``CHANGELOG.rst`` + +- ``TODO.txt`` + +- ``clear_ids.py`` contrib script + +Changed +~~~~~~~ + +- References to Github repo changed to point to git.danielmoch.com + (Github is now a mirror only) + +- Fixed exception in ``nncli sync`` + +v0.3.1_ – 2018-10-30 +-------------------- + +Added +~~~~~ + +- Partial unit testing for ``nncli.py`` module + +Changed +~~~~~~~ + +- Refactored code (addressing pylint findings) + +- Fixed bad exception handling in Python 3.4 + +Removed +~~~~~~~ + +v0.3.0_ – 2018-09-07 +-------------------- + +Added +~~~~~ + +- Documentation as PDF format + +Changed +~~~~~~~ + +- Numerous documentation corrections + +v0.2.0_ – 2018-09-03 +-------------------- + +Added +~~~~~ + +- ``.travis.yml`` + +- Pytest, tox, et all added to support automated testing + +- Both tox and Travis testing back to Python 3.4 + +v0.1.2_ – 2018-08-30 +-------------------- + +Added +~~~~~ + +- Support for ``--version`` flag + +Changed +~~~~~~~ + +- requirements.txt replaced with Pipfile{,.lock} + +v0.1.1_ – 2018-08-07 +-------------------- + +Added +~~~~~ + +- README content included in PyPI + +Changed +~~~~~~~ + +- README content and formatting + +- Fix ``nncli import`` command + +v0.1.0 – 2018-07-31 +------------------- + +Added +~~~~~ + +- Hard fork of sncli + +.. _Keep a Changelog: https://keepachangelog.com/en/1.0.0/ +.. _Semantic Versioning: https://semver.org/spec/v2.0.0.html +.. _Unreleased: https://git.danielmoch.com/nncli.git/diff/?id=master&id2=v0.3.1 +.. _v0.3.1: https://git.danielmoch.com/nncli.git/diff/?id=v0.3.1&id2=v0.3.0 +.. _v0.3.0: https://git.danielmoch.com/nncli.git/diff/?id=v0.3.0&id2=v0.2.0 +.. _v0.2.0: https://git.danielmoch.com/nncli.git/diff/?id=v0.2.0&id2=v0.1.2 +.. _v0.1.2: https://git.danielmoch.com/nncli.git/diff/?id=v0.1.2&id2=v0.1.1 +.. _v0.1.1: https://git.danielmoch.com/nncli.git/diff/?id=v0.1.1&id2=v0.1.0 diff --git a/Pipfile.lock b/Pipfile.lock index 8f2008b..3e589e4 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -53,18 +53,18 @@ }, "requests": { "hashes": [ - "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", - "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" + "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54", + "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263" ], "index": "pypi", - "version": "==2.20.0" + "version": "==2.20.1" }, "urllib3": { "hashes": [ - "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", - "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" ], - "version": "==1.24" + "version": "==1.24.1" }, "urwid": { "hashes": [ @@ -84,10 +84,10 @@ }, "astroid": { "hashes": [ - "sha256:292fa429e69d60e4161e7612cb7cc8fa3609e2e309f80c224d93a76d5e7b58be", - "sha256:c7013d119ec95eb626f7a2011f0b63d0c9a095df9ad06d8507b37084eada1a8d" + "sha256:35b032003d6a863f5dcd7ec11abd5cd5893428beaa31ab164982403bcb311f22", + "sha256:6a5d668d7dc69110de01cdf7aeec69a679ef486862a0850cc0fd5571505b6b7e" ], - "version": "==2.0.4" + "version": "==2.1.0" }, "atomicwrites": { "hashes": [ @@ -126,41 +126,39 @@ }, "coverage": { "hashes": [ - "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", - "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", - "sha256:0bf8cbbd71adfff0ef1f3a1531e6402d13b7b01ac50a79c97ca15f030dba6306", - "sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95", - "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", - "sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd", - "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", - "sha256:2a5b73210bad5279ddb558d9a2bfedc7f4bf6ad7f3c988641d83c40293deaec1", - "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", - "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", - "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", - "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", - "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", - "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", - "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", - "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", - "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", - "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", - "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", - "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", - "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", - "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", - "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", - "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", - "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", - "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", - "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", - "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", - "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", - "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", - "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", - "sha256:f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e", - "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80" - ], - "version": "==4.5.1" + "sha256:09e47c529ff77bf042ecfe858fb55c3e3eb97aac2c87f0349ab5a7efd6b3939f", + "sha256:0a1f9b0eb3aa15c990c328535655847b3420231af299386cfe5efc98f9c250fe", + "sha256:0cc941b37b8c2ececfed341444a456912e740ecf515d560de58b9a76562d966d", + "sha256:10e8af18d1315de936d67775d3a814cc81d0747a1a0312d84e27ae5610e313b0", + "sha256:1b4276550b86caa60606bd3572b52769860a81a70754a54acc8ba789ce74d607", + "sha256:1e8a2627c48266c7b813975335cfdea58c706fe36f607c97d9392e61502dc79d", + "sha256:2b224052bfd801beb7478b03e8a66f3f25ea56ea488922e98903914ac9ac930b", + "sha256:447c450a093766744ab53bf1e7063ec82866f27bcb4f4c907da25ad293bba7e3", + "sha256:46101fc20c6f6568561cdd15a54018bb42980954b79aa46da8ae6f008066a30e", + "sha256:4710dc676bb4b779c4361b54eb308bc84d64a2fa3d78e5f7228921eccce5d815", + "sha256:510986f9a280cd05189b42eee2b69fecdf5bf9651d4cd315ea21d24a964a3c36", + "sha256:5535dda5739257effef56e49a1c51c71f1d37a6e5607bb25a5eee507c59580d1", + "sha256:5a7524042014642b39b1fcae85fb37556c200e64ec90824ae9ecf7b667ccfc14", + "sha256:5f55028169ef85e1fa8e4b8b1b91c0b3b0fa3297c4fb22990d46ff01d22c2d6c", + "sha256:6694d5573e7790a0e8d3d177d7a416ca5f5c150742ee703f3c18df76260de794", + "sha256:6831e1ac20ac52634da606b658b0b2712d26984999c9d93f0c6e59fe62ca741b", + "sha256:77f0d9fa5e10d03aa4528436e33423bfa3718b86c646615f04616294c935f840", + "sha256:828ad813c7cdc2e71dcf141912c685bfe4b548c0e6d9540db6418b807c345ddd", + "sha256:85a06c61598b14b015d4df233d249cd5abfa61084ef5b9f64a48e997fd829a82", + "sha256:8cb4febad0f0b26c6f62e1628f2053954ad2c555d67660f28dfb1b0496711952", + "sha256:a5c58664b23b248b16b96253880b2868fb34358911400a7ba39d7f6399935389", + "sha256:aaa0f296e503cda4bc07566f592cd7a28779d433f3a23c48082af425d6d5a78f", + "sha256:ab235d9fe64833f12d1334d29b558aacedfbca2356dfb9691f2d0d38a8a7bfb4", + "sha256:b3b0c8f660fae65eac74fbf003f3103769b90012ae7a460863010539bb7a80da", + "sha256:bab8e6d510d2ea0f1d14f12642e3f35cefa47a9b2e4c7cea1852b52bc9c49647", + "sha256:c45297bbdbc8bb79b02cf41417d63352b70bcb76f1bbb1ee7d47b3e89e42f95d", + "sha256:d19bca47c8a01b92640c614a9147b081a1974f69168ecd494687c827109e8f42", + "sha256:d64b4340a0c488a9e79b66ec9f9d77d02b99b772c8b8afd46c1294c1d39ca478", + "sha256:da969da069a82bbb5300b59161d8d7c8d423bc4ccd3b410a9b4d8932aeefc14b", + "sha256:ed02c7539705696ecb7dc9d476d861f3904a8d2b7e894bd418994920935d36bb", + "sha256:ee5b8abc35b549012e03a7b1e86c09491457dba6c94112a2482b18589cc2bdb9" + ], + "version": "==4.5.2" }, "docutils": { "hashes": [ @@ -172,10 +170,10 @@ }, "filelock": { "hashes": [ - "sha256:86fe6af56ae08ebc9c66d54ba3398c35b98916d0862d782b276a65816ff39392", - "sha256:97694f181bdf58f213cca0a7cb556dc7bf90e2f8eb9aa3151260adac56701afb" + "sha256:b8d5ca5ca1c815e1574aee746650ea7301de63d87935b3463d26368b76e31633", + "sha256:d610c1bb404daf85976d7a82eb2ada120f04671007266b708606565dd03b5be6" ], - "version": "==3.0.9" + "version": "==3.0.10" }, "flit": { "hashes": [ @@ -250,9 +248,36 @@ }, "markupsafe": { "hashes": [ - "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" + "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432", + "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b", + "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9", + "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af", + "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834", + "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd", + "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d", + "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7", + "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b", + "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3", + "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c", + "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2", + "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7", + "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36", + "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1", + "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e", + "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1", + "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c", + "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856", + "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550", + "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492", + "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672", + "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401", + "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6", + "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6", + "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c", + "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd", + "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1" ], - "version": "==1.0" + "version": "==1.1.0" }, "mccabe": { "hashes": [ @@ -295,10 +320,10 @@ }, "pbr": { "hashes": [ - "sha256:8fc938b1123902f5610b06756a31b1e6febf0d105ae393695b0c9d4244ed2910", - "sha256:f20ec0abbf132471b68963bb34d9c78e603a5cf9e24473f14358e66551d47475" + "sha256:f59d71442f9ece3dffc17bc36575768e1ee9967756e6b6535f0ee1f0054c3d68", + "sha256:f6d5b23f226a2ba58e14e49aa3b1bfaf814d0199144b95d78458212444de1387" ], - "version": "==5.1.0" + "version": "==5.1.1" }, "pluggy": { "hashes": [ @@ -323,33 +348,33 @@ }, "pygments": { "hashes": [ - "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", - "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" + "sha256:6301ecb0997a52d2d31385e62d0a4a4cf18d2f2da7054a5ddad5c366cd39cee7", + "sha256:82666aac15622bd7bb685a4ee7f6625dd716da3ef7473620c192c0168aae64fc" ], - "version": "==2.2.0" + "version": "==2.3.0" }, "pylint": { "hashes": [ - "sha256:1d6d3622c94b4887115fe5204982eee66fdd8a951cf98635ee5caee6ec98c3ec", - "sha256:31142f764d2a7cd41df5196f9933b12b7ee55e73ef12204b648ad7e556c119fb" + "sha256:689de29ae747642ab230c6d37be2b969bf75663176658851f456619aacf27492", + "sha256:771467c434d0d9f081741fec1d64dfb011ed26e65e12a28fe06ca2f61c4d556c" ], "index": "pypi", - "version": "==2.1.1" + "version": "==2.2.2" }, "pyparsing": { "hashes": [ - "sha256:bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a", - "sha256:d29593d8ebe7b57d6967b62494f8c72b03ac0262b1eed63826c6f788b3606401" + "sha256:40856e74d4987de5d01761a22d1621ae1c7f8774585acae358aa5c5936c6c90b", + "sha256:f353aab21fd474459d97b709e527b5571314ee5f067441dc9f88e33eecd96592" ], - "version": "==2.2.2" + "version": "==2.3.0" }, "pytest": { "hashes": [ - "sha256:a9e5e8d7ab9d5b0747f37740276eb362e6a76275d76cebbb52c6049d93b475db", - "sha256:bf47e8ed20d03764f963f0070ff1c8fda6e2671fc5dd562a4d3b7148ad60f5ca" + "sha256:1d131cc532be0023ef8ae265e2a779938d0619bb6c2510f52987ffcba7fa1ee4", + "sha256:ca4761407f1acc85ffd1609f464ca20bb71a767803505bd4127d0e45c5a50e23" ], "index": "pypi", - "version": "==3.9.3" + "version": "==4.0.1" }, "pytest-cov": { "hashes": [ @@ -382,11 +407,11 @@ }, "requests": { "hashes": [ - "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", - "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" + "sha256:65b3a120e4329e33c9889db89c80976c5272f56ea92d3e74da8a463992e3ff54", + "sha256:ea881206e59f41dbd0bd445437d792e43906703fff75ca8ff43ccdb11f33f263" ], "index": "pypi", - "version": "==2.20.0" + "version": "==2.20.1" }, "scandir": { "hashes": [ @@ -422,11 +447,11 @@ }, "sphinx": { "hashes": [ - "sha256:652eb8c566f18823a022bb4b6dbc868d366df332a11a0226b5bc3a798a479f17", - "sha256:d222626d8356de702431e813a05c68a35967e3d66c6cd1c2c89539bb179a7464" + "sha256:120732cbddb1b2364471c3d9f8bfd4b0c5b550862f99a65736c77f970b142aea", + "sha256:b348790776490894e0424101af9c8413f2a86831524bd55c5f379d3e3e12ca64" ], "index": "pypi", - "version": "==1.8.1" + "version": "==1.8.2" }, "sphinxcontrib-websupport": { "hashes": [ @@ -452,10 +477,10 @@ }, "urllib3": { "hashes": [ - "sha256:41c3db2fc01e5b907288010dec72f9d0a74e37d6994e6eb56849f59fea2265ae", - "sha256:8819bba37a02d143296a4d032373c4dd4aca11f6d4c9973335ca75f9c8475f59" + "sha256:61bf29cada3fc2fbefad4fdf059ea4bd1b4a86d2b6d15e1c7c0b582b9752fe39", + "sha256:de9529817c93f27c8ccbfead6985011db27bd0ddfcdb2d86f3f663385c6a9c22" ], - "version": "==1.24" + "version": "==1.24.1" }, "urwid": { "hashes": [ @@ -466,10 +491,10 @@ }, "virtualenv": { "hashes": [ - "sha256:2ce32cd126117ce2c539f0134eb89de91a8413a29baac49cbab3eb50e2026669", - "sha256:ca07b4c0b54e14a91af9f34d0919790b016923d157afda5efdde55c96718f752" + "sha256:686176c23a538ecc56d27ed9d5217abd34644823d6391cbeb232f42bf722baad", + "sha256:f899fafcd92e1150f40c8215328be38ff24b519cd95357fa6e78e006c7638208" ], - "version": "==16.0.0" + "version": "==16.1.0" }, "vulture": { "hashes": [ @@ -8,7 +8,7 @@ Notes can be viewed/created/edited in *both an* **online** *and* **offline** *mode*. All changes are saved to a local cache on disk and automatically sync'ed when nncli is brought online. -More detailed documentation can be found in the docs. +More detailed documentation can be found at the homepage_. Requirements ------------ @@ -33,7 +33,7 @@ Installation - If you don't already have it, install Flit_: ``pip3 install flit`` - Clone this repository to your hard disk: ``git clone - https://github.com/djmoch/nncli.git`` + https://git.danielmoch.com/nncli.git`` - Install nncli: ``flit install --deps production`` @@ -104,13 +104,33 @@ Features - view and edit note category +Contributing +------------ + +Pull requests are welcome, preferably via emailed output of ``git +request-pull`` sent to the maintainer (see here_ for more information). +Bug reports should also be directed to the maintainer via email. + +Releases +-------- + +Release tags will always be signed with the maintainer's `PGP key`_ +(also available on any public keyserver_). PGP-signed versions of +release tarballs and pre-built wheel_ packages are available on PyPI_, +with the signature files living alongside the corresponding artifact +(simply append an ``.asc`` extension). Because the maintainers of PyPI +do not consider PGP signatures to be a user-facing feature, the +extension must be added manually in your browser's URL bar in order to +download the signature files. + Acknowledgements ---------------- -nncli is a fork of sncli_ by Eric Davis. This application further pulls in -and uses modified versions of the simplenote.py_ module by Daniel Schauenberg and -the notes_db.py module from nvpy_ by Charl P. Botha. +nncli is a fork of sncli_ by Eric Davis. This application further pulls +in and uses modified versions of the simplenote.py_ module by Daniel +Schauenberg and the notes_db.py module from nvpy_ by Charl P. Botha. +.. _homepage: https://nncli.org .. _sncli: https://github.com/insanum/sncli .. _Python 3: http://python.org .. _Urwid: http://urwid.org @@ -118,3 +138,8 @@ the notes_db.py module from nvpy_ by Charl P. Botha. .. _simplenote.py: https://github.com/mrtazz/simplenote.py .. _nvpy: https://github.com/cpbotha/nvpy .. _Flit: https://flit.readthedocs.io +.. _here: https://www.git-scm.com/docs/git-request-pull +.. _PGP key: https://www.danielmoch.com/static/gpg.asc +.. _wheel: https://pythonwheels.com/ +.. _PyPI: https://pypi.org/project/nncli/ +.. _keyserver: https://pgp.mit.edu/pks/lookup?op=get&search=0x323C9F1784BDDD43 diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..870ce22 --- /dev/null +++ b/TODO.txt @@ -0,0 +1,3 @@ +- Create a proper groff manual +- Address duplicate code (pylint finding) +- Target 80% unit test coverage diff --git a/contrib/clear_ids.py b/contrib/clear_ids.py new file mode 100644 index 0000000..99a3e55 --- /dev/null +++ b/contrib/clear_ids.py @@ -0,0 +1,63 @@ +# +# The MIT License (MIT) +# +# Copyright (c) 2018 Daniel Moch +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +""" +clear_ids.py + +Remove ID's from all local notes. Use this script to force a full +re-upload to NextCloud. +""" +import json +import os +import sys + +def clear_ids(sndb_path): + sndb_path = os.path.expanduser(sndb_path) + if not os.path.isdir(sndb_path): + usage("Provided sndb_path does not exist or is not a directory") + + for filename in os.listdir(sndb_path): + if filename.endswith('.json'): + with open(os.path.join(sndb_path, filename), 'r') as notefile: + note = json.load(notefile) + del note['id'] + with open(os.path.join(sndb_path, filename), 'w') as notefile: + json.dump(note, notefile) + +def usage(message=None): + if message is not None: + print("ERROR: " + message) + + print(""" +Usage: + python3 clear_ids.py sndb_path + + sndb_path - sncli notes database path +""") + exit(1) + +if __name__ == '__main__': + if len(sys.argv) != 2: + usage("Wrong number of arguments") + + clear_ids(sys.argv[1]) diff --git a/docs/source/index.rst b/docs/source/index.rst index 7b8a0cf..ae26883 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -10,15 +10,13 @@ NextCloud Notes Command Line Interface .. image:: https://img.shields.io/pypi/l/nncli.svg :alt: PyPI - License - .. image:: https://img.shields.io/travis/com/djmoch/nncli.svg - :alt: Travis (.com) - :target: https://travis-ci.com/djmoch/nncli + :target: https://git.danielmoch.com/nncli.git/tree/LICENSE + .. image:: https://builds.danielmoch.com/badges/nncli.svg + :alt: Daniel Moch CI + :target: https://builds.danielmoch.com/#/builders/nncli .. image:: https://img.shields.io/pypi/v/nncli.svg :alt: PyPI :target: https://pypi.org/project/nncli - .. image:: https://img.shields.io/coveralls/github/djmoch/nncli.svg - :alt: Coveralls github - :target: https://coveralls.io/github/djmoch/nncli .. image:: https://img.shields.io/readthedocs/nncli.svg :alt: Read the Docs :target: https://nncli.readthedocs.io diff --git a/nncli/__init__.py b/nncli/__init__.py index fd9cba4..cc6d151 100644 --- a/nncli/__init__.py +++ b/nncli/__init__.py @@ -1,4 +1,4 @@ # -*- coding: utf-8 -*- """NextCloud Notes Command Line Interface""" -__version__ = '0.3.1' +__version__ = '0.3.2' diff --git a/nncli/cli.py b/nncli/cli.py index 536aaf6..cd7f2e1 100644 --- a/nncli/cli.py +++ b/nncli/cli.py @@ -5,6 +5,8 @@ import click from . import __version__ from .nncli import Nncli +# pylint: disable=unnecessary-pass + class StdinFlag(click.ParamType): """StdinFlag Click Parameter Type""" name = "stdin_flag" @@ -227,7 +229,7 @@ def main(ctx, nosync, verbose, config, key): if ctx.invoked_subcommand is None: ctx.obj.gui(key) elif not nosync: - ctx.obj.sync_notes() + ctx.obj.ndb.sync_notes() main.add_command(create) main.add_command(edit) diff --git a/nncli/gui.py b/nncli/gui.py index 674dd68..3e886a2 100644 --- a/nncli/gui.py +++ b/nncli/gui.py @@ -182,7 +182,7 @@ class NncliGui: handle_mouse=False) self.nncli_loop.set_alarm_in(0, self._gui_init_view, \ - True if key else False) + bool(key)) def run(self): """Run the GUI""" @@ -316,8 +316,7 @@ class NncliGui: self._gui_body_focus() self.master_frame.keypress = self._gui_frame_keypress args[0](args[1], - True if yes_no in ['YES', 'Yes', 'yes', 'Y', 'y'] \ - else False + yes_no in ['YES', 'Yes', 'yes', 'Y', 'y'] ) def _gui_search_input(self, args, search_string): diff --git a/nncli/notes_db.py b/nncli/notes_db.py index 0cc2a30..f452546 100644 --- a/nncli/notes_db.py +++ b/nncli/notes_db.py @@ -14,6 +14,7 @@ from .nextcloud_note import NextcloudNote # pylint: disable=too-many-instance-attributes, too-many-locals # pylint: disable=too-many-branches, too-many-statements +# pylint: disable=unnecessary-pass class ReadError(RuntimeError): """Exception thrown on a read error""" pass @@ -430,7 +431,7 @@ class NotesDB(): # record that we saved this to disc. note['savedate'] = int(time.time()) - def _sync_notes(self, server_sync=True, full_sync=True): + def sync_notes(self, server_sync=True, full_sync=True): """Perform a full bi-directional sync with server. Psuedo-code algorithm for syncing: @@ -631,15 +632,15 @@ class NotesDB(): # sync done, now write changes to db_path - for k in list(local_updates.keys()): + for key in list(local_updates.keys()): try: - self._helper_save_note(k, self.notes[k]) + self._helper_save_note(key, self.notes[key]) except WriteError as ex: raise WriteError(str(ex)) self.log("Saved note to disk (key={0})".format(key)) - for k in list(local_deletes.keys()): - fnote = self._helper_key_to_fname(k) + for key in list(local_deletes.keys()): + fnote = self._helper_key_to_fname(key) if os.path.exists(fnote): os.unlink(fnote) self.log("Deleted note from disk (key={0})".format(key)) @@ -685,8 +686,8 @@ class NotesDB(): def sync_now(self, do_server_sync=True): """Sync the notes to the server""" self.sync_lock.acquire() - self._sync_notes(server_sync=do_server_sync, - full_sync=True if not self.last_sync else False) + self.sync_notes(server_sync=do_server_sync, + full_sync=not bool(self.last_sync)) self.sync_lock.release() def sync_worker(self, do_server_sync): diff --git a/pyproject.toml b/pyproject.toml index 36b2e01..5463289 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "flit.buildapi" module = "nncli" author = "Daniel Moch" author-email = "daniel@danielmoch.com" -home-page = "https://github.com/djmoch/nncli" +home-page = "https://nncli.org" description-file = "README.rst" requires = ["urwid", "requests", "appdirs", "click"] classifiers = ["License :: OSI Approved :: MIT License", @@ -18,7 +18,7 @@ classifiers = ["License :: OSI Approved :: MIT License", requires-python = ">=3" [tool.flit.metadata.urls] -Documentation = "https://nncli.readthedocs.io/en/latest" +"Source Code" = "https://git.danielmoch.com" [tool.flit.metadata.requires-extra] dev = ["pipenv"] |