diff --git a/Dockerfile b/Dockerfile index 7dabf4b0b49f1aaa4e36f10128596fb699f1bd79..6bbdf3350c9b1ffd19ce22defae3a68c1324655b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,11 +39,12 @@ RUN useradd \ -r \ -s /sbin/nologin \ geomag_user \ - && mkdir -p /home/geomag_user/notebooks \ - && chown -R geomag_user:geomag_user /home/geomag_user + && mkdir -p /data \ + && chown -R geomag_user:geomag_user /data USER geomag_user -WORKDIR /geomag-algorithms +WORKDIR /data EXPOSE 8000 + # entrypoint needs double quotes ENTRYPOINT [ "/geomag-algorithms/docker-entrypoint.sh" ] diff --git a/Pipfile b/Pipfile index f4a876a15befe2441831448f3a46580fc8ce0093..77f7a9714748a12cb07aadd0d276b1b1335bc83c 100644 --- a/Pipfile +++ b/Pipfile @@ -4,15 +4,16 @@ url = "https://pypi.org/simple" verify_ssl = true [dev-packages] +black = "*" +pre-commit = "*" pytest = "*" pytest-cov = "*" webtest = "*" -black = "*" [packages] numpy = "*" scipy = "*" -obspy = "*" +obspy = ">1.2.0" pycurl = "*" authlib = "*" flask = "*" @@ -21,7 +22,6 @@ flask-migrate = "*" flask-session = "*" flask-sqlalchemy = "*" psycopg2-binary = "*" -pre-commit = "*" [pipenv] allow_prereleases = true diff --git a/Pipfile.lock b/Pipfile.lock index accad7644ba26575276c8fc39d1ff00f5823bc93..f545cb84c02ef2aef8ab82996347c2472570c6cd 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "4f9084e7eebba8286a08bc6b827445c19a66a1864b730e9cf290509ed2224253" + "sha256": "0d3a780c71738929a0e69a18e14cdd60dc314f1f400dcf5015ad125cd2e9172c" }, "pipfile-spec": 6, "requires": {}, @@ -20,13 +20,6 @@ ], "version": "==1.4.1" }, - "appdirs": { - "hashes": [ - "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92", - "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e" - ], - "version": "==1.4.3" - }, "authlib": { "hashes": [ "sha256:89d55b14362f8acee450f9d153645e438e3a38be99b599190718c4406f575b05", @@ -75,13 +68,6 @@ ], "version": "==1.14.0" }, - "cfgv": { - "hashes": [ - "sha256:1ccf53320421aeeb915275a196e23b3b8ae87dea8ac6698b1638001d4a486d53", - "sha256:c8e8f552ffcc6194f4e18dd4f68d9aef0c0d58ae7e7be8c82bee3c5e9edfa513" - ], - "version": "==3.1.0" - }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", @@ -91,10 +77,10 @@ }, "click": { "hashes": [ - "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", - "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" + "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", + "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" ], - "version": "==7.0" + "version": "==7.1.1" }, "cryptography": { "hashes": [ @@ -136,19 +122,6 @@ ], "version": "==4.4.2" }, - "distlib": { - "hashes": [ - "sha256:2e166e231a26b36d6dfe35a48c4464346620f8645ed0ace01ee31822b288de21" - ], - "version": "==0.3.0" - }, - "filelock": { - "hashes": [ - "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", - "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" - ], - "version": "==3.0.12" - }, "flask": { "hashes": [ "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52", @@ -195,13 +168,6 @@ ], "version": "==0.18.2" }, - "identify": { - "hashes": [ - "sha256:1222b648251bdcb8deb240b294f450fbf704c7984e08baa92507e4ea10b436d5", - "sha256:d824ebe21f38325c771c41b08a95a761db1982f1fc0eee37c6c97df3f1636b96" - ], - "version": "==1.4.11" - }, "idna": { "hashes": [ "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", @@ -209,22 +175,6 @@ ], "version": "==2.9" }, - "importlib-metadata": { - "hashes": [ - "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", - "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" - ], - "markers": "python_version < '3.8'", - "version": "==1.5.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:6aefffdf63634bd94600dd0691fd6430902272bace0572934fa23c81473a7ff7", - "sha256:ce84b1c9c05078e1797700505bd1bc386cee9561002a9bdcfcba634adc6333e5" - ], - "markers": "python_version < '3.7'", - "version": "==1.2.0" - }, "itsdangerous": { "hashes": [ "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", @@ -360,28 +310,22 @@ }, "matplotlib": { "hashes": [ - "sha256:019db591268b51dd30de5f3a8bbbf69589207e2d461de91c3aa425db6f135d3d", - "sha256:14d8b073d5a23094b84e0fda7a4460215e98cc18917e8a71bb143fd18930660b", - "sha256:23c186a5c521670f831bbd1f076ef1658e07a8cce3c7e8be1da0c828e86e08db", - "sha256:2bbd55057ae22283bccca6251259dfeb6b5eaf0d7d2ce1cc963c2fb03174b50d", - "sha256:42904319a69afcf36d27acfe9dc605cad2f19175d1e7e1a51a1e6f1c6515ba2a", - "sha256:4a78312908e92f453ea554fb32290b51e4df799f4c31ec99f04c87dbb3553b18", - "sha256:647a457c42ba4bd3a989384e1961a1f8766617a6519c4e53d6d3b215fad96756", - "sha256:797cb1c5eed0f09bc7f16ae01b6cafc90e0768fd4809b7716e806ae693b10f89", - "sha256:7b59131aaa13edcbe96a0d7d2d7d3a83a39749a39e97cc701f7355c2060f9945", - "sha256:a396ea75cd64e0f730ef2a397dabcc894db702f496f2d9c3cb978daa6588220c", - "sha256:a7d917bbe3f6de06c42d25df32003a527424ff367726e7a55e8daad53d6189d4", - "sha256:b54cf89cb6400f1a8753a7b6479b6bf75fdfedff5fdb4ccc4458fadf245ae5ff", - "sha256:c40a6d3455dcd37f3726e8e289b85f9df0125afb12cc3aeb781104c6390cae58", - "sha256:d9be08267fc44f1eee2f13f603633726f6752780a72e0f0973c6ade5b35e98fe" - ], - "version": "==3.2.0rc3" - }, - "nodeenv": { - "hashes": [ - "sha256:5b2438f2e42af54ca968dd1b374d14a1194848955187b0e5e4be1f73813a5212" - ], - "version": "==1.3.5" + "sha256:0711b07920919951b2c508a773c433cbe07bdad952ea84ed9d18ca7853ccbe8b", + "sha256:0ab307e610302971012dc2387c97fc68e58c8eb00045a2c735da1b16353a3e3f", + "sha256:651d76daf9168250370d4befb09f79875daa2224a9096d97dfc3ed764c842be4", + "sha256:8e931015769322ee6860cabb8f975f628788e851092fd5edbdb065b5a516e3af", + "sha256:97a03e73f9ab71db8e4084894550c3af420c8ab1989b5e1306261b17576bf61b", + "sha256:9d174cc9681184023a7d520079eb0c085208761c6562710c1de7263d08217ab6", + "sha256:b21479a4478070c1c0f460e1bf1b65341e6a70ae0da905fcee836651450c66bb", + "sha256:b93377c6720e7db9cbba57e856a21aae2ff707677a6ee6b3b9d485f22ed82697", + "sha256:be937f34047bc09ed22d6a19d970fdc61d5d3191aa62f3262fc7f308e6d2e7f9", + "sha256:d281862a68b0bfce8f9e02a8e5acaa5cfbec37f37320f59b52eaf54b6423ec13", + "sha256:d5287cfcabad6f0f71a2627c1bbb6fb0cddacb9844f6c91f210604faa508f562", + "sha256:d75f5e952562f5e494ae92c1f917fc96c2ce09305a7c1bdc2e6502d3c61fbdc3", + "sha256:ee8acb1d4ee204e5cfe361d8f00d7e52c68f81c099b6c6048a3c76bf2c6b46e6", + "sha256:fc84f7c7cf1c5a9dbceadb7546818228f019d3b113ce5e362120c895fbba2944" + ], + "version": "==3.2.0" }, "numpy": { "hashes": [ @@ -412,26 +356,20 @@ }, "obspy": { "hashes": [ - "sha256:14e7ff1b87c2cb901f3a6bebb64cbc5e8d624a067319c242b55cf77c341018fc", - "sha256:17786240e76629b2e2004232fe97a988c9de5f91e2d3367906598760e0f86fa8", - "sha256:20dbfdfffcbcea675f3749132eddf7ec4fb4e1defb23372573dcb8669651aa9d", - "sha256:290dea98f7a8577911dae7816aae9117adc536b0baf6dde1db0b02c53b108a96", - "sha256:5693b17ef7e7b62e69d28af0732d8f53beea35f64aba3c6a4e0b0996e1f5123e", - "sha256:6141112cf264c7baf345333f6b32effefdc268098f499cc1bc7f14587af17149", - "sha256:6268fceec0a8e717fb3eafd9cf25cc2ead9f956e3e7149ca10124ee488a9901c", - "sha256:ce6fe921980bd877d91abda2b1046b95222b304ba2f50800a932979c87ec1c82", - "sha256:d4f61569702a9cbc4bd00ea54589437ee220edd68c56168c6ebf6710e7e93bcd" - ], - "index": "pypi", - "version": "==1.1.1" - }, - "pre-commit": { - "hashes": [ - "sha256:09ebe467f43ce24377f8c2f200fe3cd2570d328eb2ce0568c8e96ce19da45fa6", - "sha256:f8d555e31e2051892c7f7b3ad9f620bd2c09271d87e9eedb2ad831737d6211eb" + "sha256:340905ecc6d6d29dfc7103808e74e23e1fcfcbbc6ac32d07accce9a8b0322f47", + "sha256:3476c417c9b57689cf387df379518c8115874179bc4b16424de0cde7ed014e18", + "sha256:876d42c15c8c857a0a51ddd1e9ba699711fb6efdd27201819721d25a42472e1c", + "sha256:8f58c53dc69f6f21b8d5ceefeec2ccf8ba8c738e28a6da2cb8b103890c6b3ff1", + "sha256:95c2dcf36fe33f6bbb592ccd8ef929565987ca663ceb052daa6a153751f2535a", + "sha256:b04152950827534e91a625afa09f9390caabce4f96adbe4571b39a832ca3e423", + "sha256:b4869de3d6de9d5c4f8fd6ad41d280fdbf99458ac9b8f5062bc2d9e92f132df7", + "sha256:baa15abec717cc2acfe3d8c87d9a68785c82513b8c69de0895a943c5da33095c", + "sha256:d94537b3b24b0023c09caeea4a2ca1e647f0a28264475c3fcbbfd9bc2df85dbd", + "sha256:f4b574e2c7278b6c8c96aaaf5f7ce4a497c54ef6b3358ad88397d4971b0973bf", + "sha256:ff507e10a21eee2a4e2930f5b3844e8b008b7d04f0f19f8d8a2e7de85a98ba86" ], "index": "pypi", - "version": "==2.1.1" + "version": "==1.2.1" }, "psycopg2-binary": { "hashes": [ @@ -473,9 +411,10 @@ }, "pycparser": { "hashes": [ - "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" ], - "version": "==2.19" + "version": "==2.20" }, "pycurl": { "hashes": [ @@ -514,22 +453,6 @@ ], "version": "==1.0.4" }, - "pyyaml": { - "hashes": [ - "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6", - "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf", - "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5", - "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e", - "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811", - "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e", - "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d", - "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20", - "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689", - "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994", - "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615" - ], - "version": "==5.3" - }, "requests": { "hashes": [ "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", @@ -573,16 +496,9 @@ }, "sqlalchemy": { "hashes": [ - "sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb" - ], - "version": "==1.3.13" - }, - "toml": { - "hashes": [ - "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c", - "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e" + "sha256:b92d2de62e43499d85b1780274d1b562e5159c7996f6f04a9bb46cf681ced45f" ], - "version": "==0.10.0" + "version": "==1.3.14" }, "urllib3": { "hashes": [ @@ -591,27 +507,12 @@ ], "version": "==1.25.8" }, - "virtualenv": { - "hashes": [ - "sha256:30ea90b21dabd11da5f509710ad3be2ae47d40ccbc717dfdd2efe4367c10f598", - "sha256:4a36a96d785428278edd389d9c36d763c5755844beb7509279194647b1ef47f1" - ], - "version": "==20.0.7" - }, "werkzeug": { "hashes": [ "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096", "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16" ], "version": "==1.0.0" - }, - "zipp": { - "hashes": [ - "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", - "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" - ], - "markers": "python_version < '3.8'", - "version": "==3.1.0" } }, "develop": { @@ -645,12 +546,19 @@ "index": "pypi", "version": "==19.10b0" }, + "cfgv": { + "hashes": [ + "sha256:1ccf53320421aeeb915275a196e23b3b8ae87dea8ac6698b1638001d4a486d53", + "sha256:c8e8f552ffcc6194f4e18dd4f68d9aef0c0d58ae7e7be8c82bee3c5e9edfa513" + ], + "version": "==3.1.0" + }, "click": { "hashes": [ - "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", - "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" + "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", + "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" ], - "version": "==7.0" + "version": "==7.1.1" }, "coverage": { "hashes": [ @@ -688,20 +596,25 @@ ], "version": "==5.0.3" }, - "entrypoints": { + "distlib": { "hashes": [ - "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", - "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + "sha256:2e166e231a26b36d6dfe35a48c4464346620f8645ed0ace01ee31822b288de21" ], - "version": "==0.3" + "version": "==0.3.0" }, - "flake8": { + "filelock": { "hashes": [ - "sha256:45681a117ecc81e870cbf1262835ae4af5e7a8b08e40b944a8a6e6b895914cfb", - "sha256:49356e766643ad15072a789a20915d3c91dc89fd313ccd71802303fd67e4deca" + "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", + "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" ], - "index": "pypi", - "version": "==3.7.9" + "version": "==3.0.12" + }, + "identify": { + "hashes": [ + "sha256:1222b648251bdcb8deb240b294f450fbf704c7984e08baa92507e4ea10b436d5", + "sha256:d824ebe21f38325c771c41b08a95a761db1982f1fc0eee37c6c97df3f1636b96" + ], + "version": "==1.4.11" }, "importlib-metadata": { "hashes": [ @@ -711,12 +624,13 @@ "markers": "python_version < '3.8'", "version": "==1.5.0" }, - "mccabe": { + "importlib-resources": { "hashes": [ - "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", - "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + "sha256:1dff36d42d94bd523eeb847c25c7dd327cb56686d74a26dfcc8d67c504922d59", + "sha256:7f0e1b2b5f3981e39c52da0f99b2955353c5a139c314994d1126c2551ace9bdf" ], - "version": "==0.6.1" + "markers": "python_version < '3.7'", + "version": "==1.3.1" }, "more-itertools": { "hashes": [ @@ -725,12 +639,18 @@ ], "version": "==8.2.0" }, + "nodeenv": { + "hashes": [ + "sha256:5b2438f2e42af54ca968dd1b374d14a1194848955187b0e5e4be1f73813a5212" + ], + "version": "==1.3.5" + }, "packaging": { "hashes": [ - "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73", - "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334" + "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3", + "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752" ], - "version": "==20.1" + "version": "==20.3" }, "pathspec": { "hashes": [ @@ -746,6 +666,14 @@ ], "version": "==0.13.1" }, + "pre-commit": { + "hashes": [ + "sha256:09ebe467f43ce24377f8c2f200fe3cd2570d328eb2ce0568c8e96ce19da45fa6", + "sha256:f8d555e31e2051892c7f7b3ad9f620bd2c09271d87e9eedb2ad831737d6211eb" + ], + "index": "pypi", + "version": "==2.1.1" + }, "py": { "hashes": [ "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", @@ -753,20 +681,6 @@ ], "version": "==1.8.1" }, - "pycodestyle": { - "hashes": [ - "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", - "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" - ], - "version": "==2.5.0" - }, - "pyflakes": { - "hashes": [ - "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", - "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" - ], - "version": "==2.1.1" - }, "pyparsing": { "hashes": [ "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", @@ -790,6 +704,22 @@ "index": "pypi", "version": "==2.8.1" }, + "pyyaml": { + "hashes": [ + "sha256:059b2ee3194d718896c0ad077dd8c043e5e909d9180f387ce42012662a4946d6", + "sha256:1cf708e2ac57f3aabc87405f04b86354f66799c8e62c28c5fc5f88b5521b2dbf", + "sha256:24521fa2890642614558b492b473bee0ac1f8057a7263156b02e8b14c88ce6f5", + "sha256:4fee71aa5bc6ed9d5f116327c04273e25ae31a3020386916905767ec4fc5317e", + "sha256:70024e02197337533eef7b85b068212420f950319cc8c580261963aefc75f811", + "sha256:74782fbd4d4f87ff04159e986886931456a1894c61229be9eaf4de6f6e44b99e", + "sha256:940532b111b1952befd7db542c370887a8611660d2b9becff75d39355303d82d", + "sha256:cb1f2f5e426dc9f07a7681419fe39cee823bb74f723f36f70399123f439e9b20", + "sha256:dbbb2379c19ed6042e8f11f2a2c66d39cceb8aeace421bfc29d085d93eda3689", + "sha256:e3a057b7a64f1222b56e47bcff5e4b94c4f61faac04c7c4ecb1985e18caa3994", + "sha256:e9f45bd5b92c7974e59bcd2dcc8631a6b6cc380a904725fce7bc08872e691615" + ], + "version": "==5.3" + }, "regex": { "hashes": [ "sha256:01b2d70cbaed11f72e57c1cfbaca71b02e3b98f739ce33f5f26f71859ad90431", @@ -863,6 +793,13 @@ ], "version": "==1.4.1" }, + "virtualenv": { + "hashes": [ + "sha256:10750cac3b5a9e6eed54d0f1f8222c550dc47f84609c95cbc504d44a58a048b8", + "sha256:8512e83f1d90f8e481024d58512ac9c053bf16f54d9138520a0929396820dd78" + ], + "version": "==20.0.10" + }, "waitress": { "hashes": [ "sha256:045b3efc3d97c93362173ab1dfc159b52cfa22b46c3334ffc805dbdbf0e4309e", diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 88e66799c41fe657cb05a106b60b99862377b346..14037016dc2bebea89fd041dd902c68bdfd7928b 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,24 +1,11 @@ #! /bin/bash -# run jupyter in the background, and forward SIGTERM manually. -# "exec" seems like a much simpler solution for this, -# however, jupyter kernels die noisy deaths when using exec. - -# _term () { -# echo 'Caught SIGTERM' -# kill -TERM "$child" -#} -#trap _term SIGTERM - # add geomagio to notebook path export PYTHONPATH=/geomag-algorithms # run jupyter notebook server exec jupyter notebook \ --ip='*' \ - --notebook-dir=/home/geomag_user/notebooks \ + --notebook-dir=/data \ --no-browser \ --port=8000 - -#child=$! -#wait "$child" diff --git a/docs/install.md b/docs/install.md index 9c7b6dd04ff897ae1e141f18394291e4e355bf4f..2217fb7366b3926fb0dbf44c72d8c58ae440bd2f 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,26 +1,42 @@ -Installation -============ +# Installation +> - [Develop](./develop.md) describes how to install locally. +> - [Docker](./install_docker.md) describes container usage. +## Requirements: -1) Install Python and dependencies (obspy and pycurl) +- Python 3.6 or newer +- ObsPy 1.2.1 or newer - Using Anaconda is recommended ( https://conda.io/miniconda.html ). +## Procedure: - conda env create -f geomagenv.yml - source activate geomagenv +1. Install Python and dependencies - or + - Option 1: Anaconda/Miniconda (https://conda.io/miniconda.html): - conda create --name=geomagenv --channel conda-forge python=3 obspy pycurl - source activate geomagenv + conda create --name=geomagenv --channel conda-forge python=3 obspy pycurl + source activate geomagenv -2) Install **geomagio** + - Option 2: Pip - pip install git+https://github.com/usgs/geomag-algorithms.git + > `pyenv` can install specific/multiple versions of python + > + > - https://github.com/pyenv/pyenv + > - https://github.com/pyenv-win/pyenv-win + + # create virtual environment (optional) + python -m venv path/to/geomagenv + source path/to/geomagenv/bin/activate + + # install dependencies + pip install numpy + pip install obspy +2. Install **geomagio** + + pip install git+https://github.com/usgs/geomag-algorithms.git -3) Use **geomagio** +3. Use **geomagio** - Use the main script, `geomag.py -h` - In python scripts, `import geomagio` diff --git a/docs/install_docker.md b/docs/install_docker.md index 1571d1f17b7697baaeaf17e91f0f25b227325404..02beede915bb904b4b3084e664176f4b9b1fd17a 100644 --- a/docs/install_docker.md +++ b/docs/install_docker.md @@ -1,60 +1,55 @@ ## Docker + https://www.docker.com/ Docker containers bundle all dependencies needed to use geomag-algorithms. The container includes a Jupyter Notebook server for interactive development. -> Docker images are built using the `Dockerfile` at the root of this project. +### Run docker container +> This page provides one example of how to run a container. See https://docs.docker.com/engine/reference/run/ for detailed `docker run` documentation. -### Create a new docker container +The following command creates and starts a container in the background. -The following command creates and starts a container. -``` -docker run -d --name geomagio -p 8000:80 usgs/geomag-algorithms -``` + docker run --rm -it --name geomagio -p 8000:8000 -v $(pwd)/data:/data usgs/geomag-algorithms -- `-d` runs container in the background +- `--rm` runs a temporary container +- `-it` makes the container interactive (so you can stop it with `ctrl+c`) - `-name geomagio` assigns the name `geomagio` -- `-p 8000:80` forwards system port `8000` to container port `80` +- `-p 8000:8000` forwards system port `8000` to container port `8000` +- `-v $(pwd)/data:/data` mounts a local data directory (./data) into the container so notebooks are saved - `usgs/geomag-algorithms:latest` refers to the latest version of the geomag-algorithms docker image - > Notebooks are stored in the container in the directory - > `/home/geomag_user/notebooks` - - ### Use the container -- Start a stopped container: -``` -docker start geomagio -``` - - Run an interactive python prompt -``` -docker exec -it geomagio python -``` + + + docker exec -it geomagio python - Use the Jupyter Notebook server -``` -open http://localhost:8000/ -``` + + Check the output for a URL like this, that can be opened in a web browser: `http://127.0.0.1:8000/?token=...` - Use the `geomag.py` command line interface -``` -docker exec -it geomagio geomag.py \ - --inchannels H E Z F \ - --input edge \ - --interval minute \ - --observatory BOU \ - --output iaga2002 \ - --output-stdout \ - --starttime 2016-07-04T00:00:00Z \ - --endtime 2016-07-04T23:59:00Z -``` + + docker exec -it geomagio geomag.py \ + --inchannels H E Z F \ + --input edge \ + --interval minute \ + --observatory BOU \ + --output iaga2002 \ + --output-stdout \ + --starttime 2016-07-04T00:00:00Z \ + --endtime 2016-07-04T23:59:00Z - Stop a running container: -``` -docker stop geomagio -``` + + Press `Ctrl+C` and follow prompts to stop the container. + +### Build container + +Docker images are built using the `Dockerfile` at the root of this project. + + docker build -t usgs/geomag-algorithms:TAG . diff --git a/setup.py b/setup.py index be3a710e5295b110d352dd3777f6e9ec3c2b34d9..6c243cf175d10649de6bf63153a207bf83b73bc3 100644 --- a/setup.py +++ b/setup.py @@ -1,28 +1,24 @@ +import os import setuptools +import setuptools.ssl_support + +# configure ssl certifiate bundle from environment, if set +ssl_cert_file = os.environ.get("SSL_CERT_FILE") or os.environ.get("PIP_CERT") +if ssl_cert_file: + setuptools.ssl_support.cert_paths = [ssl_cert_file] setuptools.setup( name="geomag-algorithms", - version="1.0.1", + version="1.0.2", description="USGS Geomag Algorithms Library", url="https://github.com/usgs/geomag-algorithms", packages=setuptools.find_packages(exclude=["test*"]), - python_requires=">=3.6, <4", - install_requires=["numpy", "scipy", "obspy"], - extras_require={ - "url": ["pycurl"], - "webservice": [ - "authlib", - "flask", - "flask-login", - "flask-migrate", - "flask-session", - "flask-sqlalchemy", - "psycopg2-binary", - ], - }, - scripts=["bin/geomag.py", "bin/geomag_webservice.py", "bin/make_cal.py"], project_urls={ "Bug Reports": "https://github.com/usgs/geomag-algorithms/issues", "Source": "https://github.com/usgs/geomag-algorithms", }, + python_requires=">=3.6, <4", + scripts=["bin/geomag.py", "bin/geomag_webservice.py", "bin/make_cal.py"], + setup_requires=["setuptools-pipfile",], + use_pipfile=True, )