aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.rst115
-rw-r--r--Pipfile.lock177
-rw-r--r--README.rst35
-rw-r--r--TODO.txt3
-rw-r--r--contrib/clear_ids.py63
-rw-r--r--docs/source/index.rst10
-rw-r--r--nncli/__init__.py2
-rw-r--r--nncli/cli.py4
-rw-r--r--nncli/gui.py5
-rw-r--r--nncli/notes_db.py15
-rw-r--r--pyproject.toml4
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": [
diff --git a/README.rst b/README.rst
index c572ca2..a79a11e 100644
--- a/README.rst
+++ b/README.rst
@@ -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"]