diff --git a/.eslintignore b/.eslintignore index fce1844..2ee4536 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,3 +3,4 @@ infoscreen/static/js/lib webapp/static/js/lib static/js/lib collected_static +venv diff --git a/.gitignore b/.gitignore index 0bc8854..b264155 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ sikweb/settings.py *.sqlite3 uwsgi.ini uwsgi.log -infoscreen/static/js/hsl.json members/logs/* .idea/ logs/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d074681..119ba6e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -48,13 +48,14 @@ remark: publish: stage: publish - image: docker:latest + image: docker:stable + services: + - docker:stable-dind only: - develop - before_script: - - docker info - - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $REGISTRY_URL script: + - docker info + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - docker build . -t "$IMAGE_NAME" - docker push "$IMAGE_NAME" @@ -77,25 +78,47 @@ deploy_dev: script: - scp docker-compose.yml $DEV_SSH_USER@$DEV_SSH_HOST:~/deployment/docker-compose.yml - scp .deploy_dev.sh $DEV_SSH_USER@$DEV_SSH_HOST:~/deployment/deploy_dev.sh + - ssh $DEV_SSH_USER@$DEV_SSH_HOST "docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY" - ssh $DEV_SSH_USER@$DEV_SSH_HOST "bash ~/deployment/deploy_dev.sh \"$IMAGE_NAME\"" +# deploy_production: +# stage: deploy +# image: alpine:latest +# environment: +# name: production +# url: https://sika.sahkoinsinoorikilta.fi +# when: manual +# only: +# - master +# before_script: +# - pwd +# - apk add --update openssh +# - ssh -V +# - mkdir -p ~/.ssh +# - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa +# - chmod 600 ~/.ssh/id_rsa +# - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config +# script: +# - ssh $PROD_SSH_USER@$PROD_SSH_HOST "zsh ~/deploy.sh" + deploy_production: - stage: deploy - image: alpine:latest - environment: - name: production - url: https://sika.sahkoinsinoorikilta.fi - when: manual - only: - - master - before_script: - - pwd - - apk add --update openssh - - ssh -V - - mkdir -p ~/.ssh - - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - script: - - ssh $PROD_SSH_USER@$PROD_SSH_HOST "zsh ~/deploy.sh" - + stage: deploy + image: docker:stable + only: + - master + environment: + name: production + url: sika.sik.party + variables: + DOCKER_HOST: $CI_DOCKER_HOST + DOCKER_TLS_VERIFY: 1 + before_script: + - mkdir -p ~/.docker + - echo "$TLSCACERT" > ~/.docker/ca.pem + - echo "$TLSCERT" > ~/.docker/cert.pem + - echo "$TLSKEY" > ~/.docker/key.pem + - docker login -u gitlab-ci-token -p "$CI_BUILD_TOKEN" "$CI_REGISTRY" + script: + - docker stack deploy --with-registry-auth -c stack-compose.yml "$SERVICE_NAME" + after_script: + - docker logout "$CI_REGISTRY" \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..424e179 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.6.8 diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..31a4767 --- /dev/null +++ b/Pipfile @@ -0,0 +1,52 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] +flake8 = "*" +autopep8 = "*" + +[packages] +decorator = "==4.0.9" +ipython = "==4.2.0" +pexpect = "==4.1.0" +pickleshare = "==0.7.2" +ptyprocess = "==0.5.1" +pytz = "==2016.4" +simplegeneric = "==0.8.1" +traitlets = "==4.2.1" +requests = "==2.11.1" +django-nocaptcha-recaptcha = "==0.0.19" +django-cors-headers = "==2.0.1" +djangorestframework = "==3.8.2" +djangorestframework-jwt = "==1.11.0" +coverage = "==4.3.4" +django-nose = "==1.4.5" +nose-exclude = "==0.5.0" +psycopg2-binary = "==2.7.6.1" +django-bootstrap3 = "==11.1.0" +django-tables2 = "==1.6.1" +pycodestyle = "==2.3.1" +dealer = "==2.0.5" +django-modeltranslation = "==0.13b1" +django-auditlog = "==0.4.5" +django-phonenumber-field = "==1.3.0" +django-autocomplete-light = "==3.4.1" +six = "==1.10.0" +django-suit = "==0.2.26" +telepot = "==12.3" +pyexcel = "==0.5.10" +pyexcel-xlsx = "==0.5.5" +django-import-export = "==0.7.0" +openpyxl = "==2.4.11" +django-app-namespace-template-loader = "==0.4.1" +django-filter = "==2.0.0" +"backports.shutil_get_terminal_size" = "==1.0.0" +Django = "==2.1.5" +ipython_genutils = "==0.1.0" +Pillow = "==5.4.1" +PyJWT = "==1.6.4" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..6176e90 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,724 @@ +{ + "_meta": { + "hash": { + "sha256": "85a50ecbb054f863d8a149def7c32f916b9cd326aee80c2c86eda2b44ee20e2d" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiohttp": { + "hashes": [ + "sha256:022c400e30848b1994236e31fb38db1dc4b551efe049f737cbac690ab2cdf5c4", + "sha256:10f9316ef068536dec0b9f09531fa1cb6bfa8394f278022cb96e789c77811ad2", + "sha256:2599b93fd5ba1120b3bd1366d67a7e26bd45b3d5d5548069e00b2fbef7f20ab0", + "sha256:2a1c71e7fb8c50e60fb4c9bab8bd5cf7c07f91a6b27dc2556d7354cd2ebb3689", + "sha256:6a19d34cc01414d94dd5a4466f8f397293fcb8929df8eeb8989119cc5ef928bb", + "sha256:7aab39c2a61a5c6b15bb7e561218ef64770ca1fbf4cc1878c96e630e2b7cc3cc", + "sha256:8959e28bc1b87542b0ee4a8302128f633bee296252f261bf03e118c4dff725f0", + "sha256:89820f7c488f4e9b1f74371da33403181e11e006663ddf074317aacd690838a6", + "sha256:ab761cf0f0b0b90887e276b4a7918f11e323f2228bbb30814bbd538c122028bf", + "sha256:cc648ecaca79e37c6e26f370e802e7ae640a069913f661f66c0421084bef219a", + "sha256:d6f26e80cd55ac88e1f0397fc8d547933225a5dc1add040e27788c2a028c64c6", + "sha256:e7d6ae4a36bfe6d7f93c6f42a0bfa1659f7d011006cb6e8207c85ef5acdb2986", + "sha256:fc55b1fec0e4cc1134ffb09ea3970783ee2906dc5dfd7cd16917913f2cfed65b" + ], + "version": "==3.6.1" + }, + "appnope": { + "hashes": [ + "sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0", + "sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.0" + }, + "async-timeout": { + "hashes": [ + "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f", + "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3" + ], + "version": "==3.0.1" + }, + "attrs": { + "hashes": [ + "sha256:ec20e7a4825331c1b5ebf261d111e16fa9612c1f7a5e1f884f12bd53a664dfd2", + "sha256:f913492e1663d3c36f502e5e9ba6cd13cf19d7fab50aa13239e420fef95e1396" + ], + "version": "==19.2.0" + }, + "babel": { + "hashes": [ + "sha256:af92e6106cb7c55286b25b38ad7695f8b4efb36a90ba483d7f7a6628c46158ab", + "sha256:e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28" + ], + "version": "==2.7.0" + }, + "backports.csv": { + "hashes": [ + "sha256:1277dfff73130b2e106bf3dd347adb3c5f6c4340882289d88f31240da92cbd6d", + "sha256:21f6e09bab589e6c1f877edbc40277b65e626262a86e69a70137db714eaac5ce" + ], + "version": "==1.0.7" + }, + "backports.shutil-get-terminal-size": { + "hashes": [ + "sha256:0975ba55054c15e346944b38956a4c9cbee9009391e41b86c68990effb8c1f64", + "sha256:713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80" + ], + "index": "pypi", + "version": "==1.0.0" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "coverage": { + "hashes": [ + "sha256:01406019418aabb2d4741647cc79b0e0deb0b8c5a6f936936c303e2f82ec8e5b", + "sha256:01a07b2b9212d4da3a1294436b58ac53f1d7aa445bda666648a5357048dc7ef3", + "sha256:024682371464c6e3caa975aba12b4d5428f35613489340fce1334c74d590a057", + "sha256:07c15c4a2287116a41d5966f1f5a7be765640c2e5a1917f882850a24615db6d3", + "sha256:1d23dea598fb4d61a8577d0eb0cb2b7932db0c8d2e1394088ad5f64e3fe1febf", + "sha256:1eeb9de833c3b976ee118a8d838af437bfa596bf60a5bf0705f4370e6d181a52", + "sha256:229ab9c0d53c55d698b8784d53077bef7a5f1fb5d27e90dc7b6f91243b024513", + "sha256:2f5a8bf29bdc69976d0913745daab11f8265e46ec41153f5e1e1794088019dad", + "sha256:2f959bc1b40a3ef2c5f0c7bc282226d6d4bd585b239bcce321013afc18ff0a0f", + "sha256:36407249a0b6669c6ad4425b0f29685579df745480c03afa70f101f09f4eead3", + "sha256:3efa49e3da8f32071ee3d5d464cc6b6f8818524d4099b4a94b86a70b8c88d4f5", + "sha256:422bcc6270e1c0cd9043048ce244f49072e9bd78a2c028c2ad2cfd58c79f5936", + "sha256:4fa2b181c3bf94cfdf841148d5d9abcab1890188dd908a639bcf7a38c50092bc", + "sha256:57c0c217270e628380f4befbbf8c5312b88ba7d81fd3d1b2218a25a2608f603c", + "sha256:6ae76a6cd594107ad45525278e8addeae4628a59c8cde3999548d7fe1646465b", + "sha256:6d3c762c87062a29771015f942752caef42fcc7fe4be2b03186f96788242290c", + "sha256:8a82664931a071399d703d65af2521e2202b34f2d8db20fa22a922fec0339022", + "sha256:8b282292973a1dc4eccfcc0776e0fde75b5b3de2e35164c2d854f7dd80149e4b", + "sha256:9a7874ca91cee8714277cd6d1b52374809ab925bf6ae92607bf02509019caadb", + "sha256:9c3e6551597593c1afedcbccf1371995f94457aea82cac726d1f3a25f4507386", + "sha256:a791068e1bbe443fcd3179b1c180c27a7fc58c1554b0d10311b7659d2d2d76f5", + "sha256:adf04843188418b012dd1974e397a7ac3faa1855cbcd69083e3af4da6de9dd81", + "sha256:adfbbd4a1d22fd77b13ff992946b19873407e035504abe9ba537494fe013300f", + "sha256:b25aa3531220faaf1727fc29bc000798476b4a30f429dc07898d5da48caefa15", + "sha256:c12f34c0b50e9e8bf8c049b6c8ca59929c33cea4b1c48362c99c36838c1ee025", + "sha256:c736faa1688222a6c8a5d8be4b66ec373ad6dab27fced8ca0d2c80fed70ac6e3", + "sha256:ca36d83cd591d027952e5019149c4386e7058cd674bf8cb52dc622f768d689e9", + "sha256:e1fb21a807aa0b5cc79806d8ef09078acaa83f994e15f0f7277489ca8eda51b7", + "sha256:e53199ae110cb7e250dd5505fde34452514f4eb2f1fb7532270d2ea037454b09", + "sha256:ea9808001dcf34d368cbef430e7885fdc76a2cf8ea96a8ed8b653797dd9555bb", + "sha256:eaaefe0f6aa33de5a65f48dd0040d7fe08cac9ac6c35a56d0a7db109c3e733df", + "sha256:f27772c9ee88ed3f2a784181f3d1724561499e7e448ed1706153336baa706bd5", + "sha256:f99066d76274800145a2e658026b30962eb5079346249197e88b55c9a7855e6a", + "sha256:fd3373ccd561b79932d12a986674e642816cfc4db4507b6a22ab30c318a85429" + ], + "index": "pypi", + "version": "==4.3.4" + }, + "dealer": { + "hashes": [ + "sha256:0a5a536fdecd9c7679534a19c59392cd21989037c14782328970a185b39e7560", + "sha256:baaac37a4c7928545cb8b0335f48abd0ea51a0274159a9a989afb8b71f8b11c3" + ], + "index": "pypi", + "version": "==2.0.5" + }, + "decorator": { + "hashes": [ + "sha256:90022e83316363788a55352fe39cfbed357aa3a71d90e5f2803a35471de4bba8", + "sha256:f4718552326c99544a6ec602d96b7d03ef61180cf4a492c515ecb2438dd14ccc" + ], + "index": "pypi", + "version": "==4.0.9" + }, + "defusedxml": { + "hashes": [ + "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93", + "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5" + ], + "version": "==0.6.0" + }, + "diff-match-patch": { + "hashes": [ + "sha256:a809a996d0f09b9bbd59e9bbd0b71eed8c807922512910e05cbd3f9480712ddb" + ], + "version": "==20181111" + }, + "django": { + "hashes": [ + "sha256:a32c22af23634e1d11425574dce756098e015a165be02e4690179889b207c7a8", + "sha256:d6393918da830530a9516bbbcbf7f1214c3d733738779f06b0f649f49cc698c3" + ], + "index": "pypi", + "version": "==2.1.5" + }, + "django-app-namespace-template-loader": { + "hashes": [ + "sha256:356539413b5d1de0eff91aea7a03806b5ef6874ee5420ea8c273f72bbc601d74", + "sha256:7a450985479a2e07fe8a1e4e8208fc9e1d8b35503526dd28eba5f8ad4ba31d4e" + ], + "index": "pypi", + "version": "==0.4.1" + }, + "django-auditlog": { + "hashes": [ + "sha256:70bfc673e7023d91ab8449d745425e7a4ce5eaaf2bdcbfb9b1a2209a7af60b03" + ], + "index": "pypi", + "version": "==0.4.5" + }, + "django-autocomplete-light": { + "hashes": [ + "sha256:29ce2626a11eab2333e5aa9f95166a6d4400f11b5a05e8f23fa77017b1a9089a" + ], + "index": "pypi", + "version": "==3.4.1" + }, + "django-bootstrap3": { + "hashes": [ + "sha256:c417b25328fb8e97cb89e1f07d35632602d702e6eaca863328e833939d0d1743" + ], + "index": "pypi", + "version": "==11.1.0" + }, + "django-cors-headers": { + "hashes": [ + "sha256:638aaba85f96af62557656ec559672f03d7c61769685acc405eacfaba9d4e93f", + "sha256:c766daf9eefcb9536af9817703ea29124fffee06870f9e523b75144b4d39a694" + ], + "index": "pypi", + "version": "==2.0.1" + }, + "django-filter": { + "hashes": [ + "sha256:6f4e4bc1a11151178520567b50320e5c32f8edb552139d93ea3e30613b886f56", + "sha256:86c3925020c27d072cdae7b828aaa5d165c2032a629abbe3c3a1be1edae61c58" + ], + "index": "pypi", + "version": "==2.0.0" + }, + "django-import-export": { + "hashes": [ + "sha256:6e748fcc647fe2a82a55136ebcbe806a45fd7fb5b1e32b33759181f1e67eeb1b", + "sha256:7e7ebeb40702eafeb2e770914c01b9961063f472b3b395eeffbea5f39efa7257" + ], + "index": "pypi", + "version": "==0.7.0" + }, + "django-jsonfield": { + "hashes": [ + "sha256:431caef3d6a93ad2b1844d26520cd104c474c7dd9dacf3dcb2f72888bf17e284", + "sha256:df2a0cefa4daeb56b074cf178b59ced0d1b4f31e6bbfdfb488755507eabfbf93" + ], + "version": "==1.3.1" + }, + "django-modeltranslation": { + "hashes": [ + "sha256:254ebda6caea5683407e1fb3e45ceaa2275778c6dc2db2b9d4fec3df373c2cdd" + ], + "index": "pypi", + "version": "==0.13b1" + }, + "django-nocaptcha-recaptcha": { + "hashes": [ + "sha256:d2512d5035d5f62aba5009082db28b28995a7e6f4a46713292e0f4f350f337da" + ], + "index": "pypi", + "version": "==0.0.19" + }, + "django-nose": { + "hashes": [ + "sha256:5df2df802c607daeeab8ac1e93abf54508ed6133eb93852310f512000124b4a5", + "sha256:87663f18cb25f01d56c84ac1ff8a0e6e6a6246264b2549b751cb239d0642e76a" + ], + "index": "pypi", + "version": "==1.4.5" + }, + "django-phonenumber-field": { + "hashes": [ + "sha256:8db9d2dc833678b163adabd593cda7ad1dede81a1c18f67c895701fc44dc44f1" + ], + "index": "pypi", + "version": "==1.3.0" + }, + "django-suit": { + "hashes": [ + "sha256:19ed865a478dfca81cb5f50a70317700dd70da92c465093251d0e14330a2b92b" + ], + "index": "pypi", + "version": "==0.2.26" + }, + "django-tables2": { + "hashes": [ + "sha256:d5d3ad99580121f7ec46ea9e2420069bbd6d2f33b4fde73a376c6bf27d551146" + ], + "index": "pypi", + "version": "==1.6.1" + }, + "djangorestframework": { + "hashes": [ + "sha256:b6714c3e4b0f8d524f193c91ecf5f5450092c2145439ac2769711f7eba89a9d9", + "sha256:c375e4f95a3a64fccac412e36fb42ba36881e52313ec021ef410b40f67cddca4" + ], + "index": "pypi", + "version": "==3.8.2" + }, + "djangorestframework-jwt": { + "hashes": [ + "sha256:5efe33032f3a4518a300dc51a51c92145ad95fb6f4b272e5aa24701db67936a7", + "sha256:ab15dfbbe535eede8e2e53adaf52ef0cf018ee27dbfad10cbc4cbec2ab63d38c" + ], + "index": "pypi", + "version": "==1.11.0" + }, + "et-xmlfile": { + "hashes": [ + "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b" + ], + "version": "==1.0.1" + }, + "gnureadline": { + "hashes": [ + "sha256:15518acd534a84d8cd3b2431aeca85132c4892600bf3a64edd76ed265909476c", + "sha256:59369b0eb7210bdb2acf2940c15a6a9d35c70cde9b6d6c5b5c14b0bfd4fd258a", + "sha256:59f6265f24631da28e39054cdd3a52cf02422aa2b955b8d8358b99d4425c3a26", + "sha256:5fe0b973372a6deca9b448178acf8117bc80f0c5113facef0be16712cb98feea", + "sha256:61eef72ed02dad415ede49752e972a1d2bd8c35c1e4464565d7effd806c99476", + "sha256:650986355bfdbe767fd7e9ce4df20ac4993f8c3b60f0829b3c1f951ce31be846", + "sha256:69c9291b6a7bcf768202b78ed1684b515181e20a3cb680b0265da0d6fdc0f697", + "sha256:88c1adf00fa8b2124751d7a6a4f8701cf8677d5caccdb16f6a6b24b3ae4f97c0", + "sha256:8c244130b6e31669f76213ddb249c8673b8573214e80829667f17e18abe27487", + "sha256:e50ae6f49adfc2c89b995a75a0ce2449e553dbd943a4cd1a2d959caccc20247c", + "sha256:fd7ddef98546f1a97eea2ba2120faff4cb7fd52d43f4a16954b5d5531a23eb3e", + "sha256:fe9b42d92dcd83071c82a5dbd33e36a287bb021d2e29f65abfe3192bf13a360d" + ], + "markers": "sys_platform == 'darwin' and platform_python_implementation == 'CPython'", + "version": "==8.0.0" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "ipython": { + "hashes": [ + "sha256:0480354f25b2f443e4ef1456b48f28ad1caaa6d316fca5a5eaa9ca7745ae7923", + "sha256:98452af6450e28c9c742d567d75eb6e3a7b391ad4ce8abd5679c5f85ce7fad00", + "sha256:d852fed59da67c7e45cb2192027da8bfd920a7856d295c247a45105968d24d5a", + "sha256:dba42f182b5f6f26630d2202efd30383712d9f7d8d8d9896b37ae2145deca616" + ], + "index": "pypi", + "version": "==4.2.0" + }, + "ipython-genutils": { + "hashes": [ + "sha256:0c43fa84e93ad0e4dbecaffc6656ac1caf1a48359b2bb0a5da3af84164e3f49b", + "sha256:3a0624a251a26463c9dfa0ffa635ec51c4265380980d9a50d65611c3c2bd82a6", + "sha256:6218e9abd612fb5acfb175ea7c7b026006de4df9691d9a73c9b390cfa1a41c2b" + ], + "index": "pypi", + "version": "==0.1.0" + }, + "jdcal": { + "hashes": [ + "sha256:1abf1305fce18b4e8aa248cf8fe0c56ce2032392bc64bbd61b5dff2a19ec8bba", + "sha256:472872e096eb8df219c23f2689fc336668bdb43d194094b5cc1707e1640acfc8" + ], + "version": "==1.4.1" + }, + "lml": { + "hashes": [ + "sha256:b1bef669dc077a1075fa64b99229b6341085b3b3a98d29c66df1853cc14e6c1a", + "sha256:ea5ba817b4adc9e9f5c21725cd2475f912933b7e2dfdf0792aed80077154f63f" + ], + "version": "==0.0.9" + }, + "multidict": { + "hashes": [ + "sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f", + "sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3", + "sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef", + "sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b", + "sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73", + "sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc", + "sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3", + "sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd", + "sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351", + "sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941", + "sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d", + "sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1", + "sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b", + "sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a", + "sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3", + "sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7", + "sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0", + "sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0", + "sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014", + "sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5", + "sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036", + "sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d", + "sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a", + "sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce", + "sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1", + "sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a", + "sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9", + "sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7", + "sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b" + ], + "version": "==4.5.2" + }, + "nose": { + "hashes": [ + "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac", + "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a", + "sha256:f1bffef9cbc82628f6e7d7b40d7e255aefaa1adb6a1b1d26c69a8b79e6208a98" + ], + "version": "==1.3.7" + }, + "nose-exclude": { + "hashes": [ + "sha256:f78fa8b41eeb815f0486414f710f1eea0949e346cfb11d59ba6295ed69e84304" + ], + "index": "pypi", + "version": "==0.5.0" + }, + "odfpy": { + "hashes": [ + "sha256:596021f0519623ca8717331951c95e3b8d7b21e86edc7efe8cb650a0d0f59a2b" + ], + "version": "==1.4.0" + }, + "openpyxl": { + "hashes": [ + "sha256:626d38647c063d55803ef4971c4d43226538d4e95cb6260c094e363ee33e10c7" + ], + "index": "pypi", + "version": "==2.4.11" + }, + "pexpect": { + "hashes": [ + "sha256:09b0a7727ce012e0fa668ef848591102d6667521655f4e72d51197c872cb9fb9", + "sha256:c381c60f1987355b65df8f08a27f428831914c8a81091bd1778ac336fa2f27e7" + ], + "index": "pypi", + "version": "==4.1.0" + }, + "phonenumberslite": { + "hashes": [ + "sha256:66ec7822322c8a7bbf2063e886b8d9ed479a5b14e5f879443bacd9972ebbdece", + "sha256:a0542bbe3bb47f20523a6bdb2447340afd78aaaf3c6e09ce214a4a2cb1f75492" + ], + "version": "==8.10.20" + }, + "pickleshare": { + "hashes": [ + "sha256:92ee3b0e21632542ecc9a0a245e69a126f62e5114081bdb0d32e0edd10410033", + "sha256:b58cf7d70658a091621c0d8cc35143c8569f3827496b27ed896918c237d05d96" + ], + "index": "pypi", + "version": "==0.7.2" + }, + "pillow": { + "hashes": [ + "sha256:051de330a06c99d6f84bcf582960487835bcae3fc99365185dc2d4f65a390c0e", + "sha256:0ae5289948c5e0a16574750021bd8be921c27d4e3527800dc9c2c1d2abc81bf7", + "sha256:0b1efce03619cdbf8bcc61cfae81fcda59249a469f31c6735ea59badd4a6f58a", + "sha256:163136e09bd1d6c6c6026b0a662976e86c58b932b964f255ff384ecc8c3cefa3", + "sha256:18e912a6ccddf28defa196bd2021fe33600cbe5da1aa2f2e2c6df15f720b73d1", + "sha256:24ec3dea52339a610d34401d2d53d0fb3c7fd08e34b20c95d2ad3973193591f1", + "sha256:267f8e4c0a1d7e36e97c6a604f5b03ef58e2b81c1becb4fccecddcb37e063cc7", + "sha256:3273a28734175feebbe4d0a4cde04d4ed20f620b9b506d26f44379d3c72304e1", + "sha256:4c678e23006798fc8b6f4cef2eaad267d53ff4c1779bd1af8725cc11b72a63f3", + "sha256:4d4bc2e6bb6861103ea4655d6b6f67af8e5336e7216e20fff3e18ffa95d7a055", + "sha256:505738076350a337c1740a31646e1de09a164c62c07db3b996abdc0f9d2e50cf", + "sha256:5233664eadfa342c639b9b9977190d64ad7aca4edc51a966394d7e08e7f38a9f", + "sha256:5d95cb9f6cced2628f3e4de7e795e98b2659dfcc7176ab4a01a8b48c2c2f488f", + "sha256:7eda4c737637af74bac4b23aa82ea6fbb19002552be85f0b89bc27e3a762d239", + "sha256:801ddaa69659b36abf4694fed5aa9f61d1ecf2daaa6c92541bbbbb775d97b9fe", + "sha256:825aa6d222ce2c2b90d34a0ea31914e141a85edefc07e17342f1d2fdf121c07c", + "sha256:9c215442ff8249d41ff58700e91ef61d74f47dfd431a50253e1a1ca9436b0697", + "sha256:a3d90022f2202bbb14da991f26ca7a30b7e4c62bf0f8bf9825603b22d7e87494", + "sha256:a631fd36a9823638fe700d9225f9698fb59d049c942d322d4c09544dc2115356", + "sha256:a6523a23a205be0fe664b6b8747a5c86d55da960d9586db039eec9f5c269c0e6", + "sha256:a756ecf9f4b9b3ed49a680a649af45a8767ad038de39e6c030919c2f443eb000", + "sha256:b117287a5bdc81f1bac891187275ec7e829e961b8032c9e5ff38b70fd036c78f", + "sha256:ba04f57d1715ca5ff74bb7f8a818bf929a204b3b3c2c2826d1e1cc3b1c13398c", + "sha256:cd878195166723f30865e05d87cbaf9421614501a4bd48792c5ed28f90fd36ca", + "sha256:cee815cc62d136e96cf76771b9d3eb58e0777ec18ea50de5cfcede8a7c429aa8", + "sha256:d1722b7aa4b40cf93ac3c80d3edd48bf93b9208241d166a14ad8e7a20ee1d4f3", + "sha256:d7c1c06246b05529f9984435fc4fa5a545ea26606e7f450bdbe00c153f5aeaad", + "sha256:e9c8066249c040efdda84793a2a669076f92a301ceabe69202446abb4c5c5ef9", + "sha256:f227d7e574d050ff3996049e086e1f18c7bd2d067ef24131e50a1d3fe5831fbc", + "sha256:fc9a12aad714af36cf3ad0275a96a733526571e52710319855628f476dcb144e" + ], + "index": "pypi", + "version": "==5.4.1" + }, + "psycopg2-binary": { + "hashes": [ + "sha256:036bcb198a7cc4ce0fe43344f8c2c9a8155aefa411633f426c8c6ed58a6c0426", + "sha256:1d770fcc02cdf628aebac7404d56b28a7e9ebec8cfc0e63260bd54d6edfa16d4", + "sha256:1fdc6f369dcf229de6c873522d54336af598b9470ccd5300e2f58ee506f5ca13", + "sha256:21f9ddc0ff6e07f7d7b6b484eb9da2c03bc9931dd13e36796b111d631f7135a3", + "sha256:247873cda726f7956f745a3e03158b00de79c4abea8776dc2f611d5ba368d72d", + "sha256:3aa31c42f29f1da6f4fd41433ad15052d5ff045f2214002e027a321f79d64e2c", + "sha256:475f694f87dbc619010b26de7d0fc575a4accf503f2200885cc21f526bffe2ad", + "sha256:4b5e332a24bf6e2fda1f51ca2a57ae1083352293a08eeea1fa1112dc7dd542d1", + "sha256:570d521660574aca40be7b4d532dfb6f156aad7b16b5ed62d1534f64f1ef72d8", + "sha256:59072de7def0690dd13112d2bdb453e20570a97297070f876fbbb7cbc1c26b05", + "sha256:5f0b658989e918ef187f8a08db0420528126f2c7da182a7b9f8bf7f85144d4e4", + "sha256:649199c84a966917d86cdc2046e03d536763576c0b2a756059ae0b3a9656bc20", + "sha256:6645fc9b4705ae8fbf1ef7674f416f89ae1559deec810f6dd15197dfa52893da", + "sha256:6872dd54d4e398d781efe8fe2e2d7eafe4450d61b5c4898aced7610109a6df75", + "sha256:6ce34fbc251fc0d691c8d131250ba6f42fd2b28ef28558d528ba8c558cb28804", + "sha256:73920d167a0a4d1006f5f3b9a3efce6f0e5e883a99599d38206d43f27697df00", + "sha256:8a671732b87ae423e34b51139628123bc0306c2cb85c226e71b28d3d57d7e42a", + "sha256:8d517e8fda2efebca27c2018e14c90ed7dc3f04d7098b3da2912e62a1a5585fe", + "sha256:9475a008eb7279e20d400c76471843c321b46acacc7ee3de0b47233a1e3fa2cf", + "sha256:96947b8cd7b3148fb0e6549fcb31258a736595d6f2a599f8cd450e9a80a14781", + "sha256:abf229f24daa93f67ac53e2e17c8798a71a01711eb9fcdd029abba8637164338", + "sha256:b1ab012f276df584beb74f81acb63905762c25803ece647016613c3d6ad4e432", + "sha256:b22b33f6f0071fe57cb4e9158f353c88d41e739a3ec0d76f7b704539e7076427", + "sha256:b3b2d53274858e50ad2ffdd6d97ce1d014e1e530f82ec8b307edd5d4c921badf", + "sha256:bab26a729befc7b9fab9ded1bba9c51b785188b79f8a2796ba03e7e734269e2e", + "sha256:daa1a593629aa49f506eddc9d23dc7f89b35693b90e1fbcd4480182d1203ea90", + "sha256:dd111280ce40e89fd17b19c1269fd1b74a30fce9d44a550840e86edb33924eb8", + "sha256:e0b86084f1e2e78c451994410de756deba206884d6bed68d5a3d7f39ff5fea1d", + "sha256:eb86520753560a7e89639500e2a254bb6f683342af598088cb72c73edcad21e6", + "sha256:ff18c5c40a38d41811c23e2480615425c97ea81fd7e9118b8b899c512d97c737" + ], + "index": "pypi", + "version": "==2.7.6.1" + }, + "ptyprocess": { + "hashes": [ + "sha256:0530ce63a9295bfae7bd06edc02b6aa935619f486f0f1dc0972f516265ee81a6", + "sha256:464cb76f7a7122743dd25507650db89cd447c51f38e4671602b3eaa2e38e05ae" + ], + "index": "pypi", + "version": "==0.5.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766", + "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9" + ], + "index": "pypi", + "version": "==2.3.1" + }, + "pyexcel": { + "hashes": [ + "sha256:2a32accc28aea3994922606ecf7bef00ef058b56b1bea6af119ae3bb56468333", + "sha256:f1ffe613f09285edf42132b9afc14f81adbd0f56797e5fe05e98307d00ce175f" + ], + "index": "pypi", + "version": "==0.5.10" + }, + "pyexcel-io": { + "hashes": [ + "sha256:08dfe39553b996359b143de3d9ec43e196f1138d47cabb73af04a16821b84d79", + "sha256:2cba956814e72b66072d97b00ede4a084ad881ce72129088eb0dc3c7f3d670cd" + ], + "version": "==0.5.20" + }, + "pyexcel-xlsx": { + "hashes": [ + "sha256:488783c3f5195bed8638f6064b11d97f706641b0f065a5416297a01db6cec5ea", + "sha256:b3566162f7232336ebe0d40dd298145c18715009b020dddc210890cf6436ffb2" + ], + "index": "pypi", + "version": "==0.5.5" + }, + "pyjwt": { + "hashes": [ + "sha256:30b1380ff43b55441283cc2b2676b755cca45693ae3097325dea01f3d110628c", + "sha256:4ee413b357d53fd3fb44704577afac88e72e878716116270d722723d65b42176" + ], + "index": "pypi", + "version": "==1.6.4" + }, + "python-dateutil": { + "hashes": [ + "sha256:3acbef017340600e9ff8f2994d8f7afd6eacb295383f286466a6df3961e486f0", + "sha256:537bf2a8f8ce6f6862ad705cd68f9e405c0b5db014aa40fa29eab4335d4b1716", + "sha256:62a2f8df3d66f878373fd0072eacf4ee52194ba302e00082828e0d263b0418d2" + ], + "version": "==2.6.0" + }, + "pytz": { + "hashes": [ + "sha256:8781cdd3ca70f5a536884e051797ca213b9ff479a5c1cc57240adf37cc1eff1b", + "sha256:be2ff04e94a2b5454ddcfbebb81ee8e46162734d4c2fcc90c422d16ab51f810b", + "sha256:c823de61ff40d1996fe087cec343e0503881ca641b897e0f9b86c7683a0bfee1", + "sha256:ee7c751544e35a7b7fb5e3fb25a49dade37d51e70a93e5107f10575d7102c311" + ], + "index": "pypi", + "version": "==2016.4" + }, + "pyyaml": { + "hashes": [ + "sha256:0113bc0ec2ad727182326b61326afa3d1d8280ae1122493553fd6f4397f33df9", + "sha256:01adf0b6c6f61bd11af6e10ca52b7d4057dd0be0343eb9283c878cf3af56aee4", + "sha256:5124373960b0b3f4aa7df1707e63e9f109b5263eca5976c66e08b1c552d4eaf8", + "sha256:5ca4f10adbddae56d824b2c09668e91219bb178a1eee1faa56af6f99f11bf696", + "sha256:7907be34ffa3c5a32b60b95f4d95ea25361c951383a894fec31be7252b2b6f34", + "sha256:7ec9b2a4ed5cad025c2278a1e6a19c011c80a3caaac804fd2d329e9cc2c287c9", + "sha256:87ae4c829bb25b9fe99cf71fbb2140c448f534e24c998cc60f39ae4f94396a73", + "sha256:9de9919becc9cc2ff03637872a440195ac4241c80536632fffeb6a1e25a74299", + "sha256:a5a85b10e450c66b49f98846937e8cfca1db3127a9d5d1e31ca45c3d0bef4c5b", + "sha256:b0997827b4f6a7c286c01c5f60384d218dca4ed7d9efa945c3e1aa623d5709ae", + "sha256:b631ef96d3222e62861443cc89d6563ba3eeb816eeb96b2629345ab795e53681", + "sha256:bf47c0607522fdbca6c9e817a6e81b08491de50f3766a7a0e6a5be7905961b41", + "sha256:f81025eddd0327c7d4cfe9b62cf33190e1e736cc6e97502b3ec425f574b3e7a8" + ], + "version": "==5.1.2" + }, + "requests": { + "hashes": [ + "sha256:545c4855cd9d7c12671444326337013766f4eea6068c3f0307fb2dc2696d580e", + "sha256:5acf980358283faba0b897c73959cecf8b841205bb4b2ad3ef545f46eae1a133" + ], + "index": "pypi", + "version": "==2.11.1" + }, + "simplegeneric": { + "hashes": [ + "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173" + ], + "index": "pypi", + "version": "==0.8.1" + }, + "six": { + "hashes": [ + "sha256:0ff78c403d9bccf5a425a6d31a12aa6b47f1c21ca4dc2573a7e2f32a97335eb1", + "sha256:105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a" + ], + "index": "pypi", + "version": "==1.10.0" + }, + "tablib": { + "hashes": [ + "sha256:0f88a9cebdaa1a2cc29ae57387082ee81015d1149ecd34e48a8c8d3b4dd21670", + "sha256:5f33c079b07eb10cf9c4b4696add2ecf32c89db7729240546ecdcd5c92f67e13" + ], + "version": "==0.13.0" + }, + "telepot": { + "hashes": [ + "sha256:8910fd6fb708e2c3ded7ca82cc945a645b717699d9f82ddff5123bb2e05f780f" + ], + "index": "pypi", + "version": "==12.3" + }, + "texttable": { + "hashes": [ + "sha256:eff3703781fbc7750125f50e10f001195174f13825a92a45e9403037d539b4f4" + ], + "version": "==1.6.2" + }, + "traitlets": { + "hashes": [ + "sha256:05a66843c96a320eec09df674c16ff330a43cb07f731cf2bd88aa3645a180541", + "sha256:76eba33c89723b8fc024f950cacaf5bf2ef37999642cc9a61f4e7c1ca5cf0ac0", + "sha256:d6db3201395f9b955786d25a1817c07291e2bcb96eb7f41683ae3836836179d7" + ], + "index": "pypi", + "version": "==4.2.1" + }, + "urllib3": { + "hashes": [ + "sha256:3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398", + "sha256:9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86" + ], + "version": "==1.25.6" + }, + "xlrd": { + "hashes": [ + "sha256:546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2", + "sha256:e551fb498759fa3a5384a94ccd4c3c02eb7c00ea424426e212ac0c57be9dfbde" + ], + "version": "==1.2.0" + }, + "xlwt": { + "hashes": [ + "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e", + "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88" + ], + "version": "==1.3.0" + }, + "yarl": { + "hashes": [ + "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9", + "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f", + "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb", + "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320", + "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842", + "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0", + "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829", + "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310", + "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4", + "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8", + "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1" + ], + "version": "==1.3.0" + } + }, + "develop": { + "autopep8": { + "hashes": [ + "sha256:4d8eec30cc81bc5617dbf1218201d770dc35629363547f17577c61683ccfb3ee" + ], + "index": "pypi", + "version": "==1.4.4" + }, + "entrypoints": { + "hashes": [ + "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", + "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451" + ], + "version": "==0.3" + }, + "flake8": { + "hashes": [ + "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548", + "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696" + ], + "index": "pypi", + "version": "==3.7.8" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766", + "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9" + ], + "index": "pypi", + "version": "==2.3.1" + }, + "pyflakes": { + "hashes": [ + "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", + "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2" + ], + "version": "==2.1.1" + } + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 917acaa..a42ae3d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: image: postgres web: build: . - image: git.sahkoinsinoorikilta.fi:4567/vtmk/web2.0 + image: registry.gitlab.com/sahkoinsinoorikilta/vtmk/web2.0-backend command: ["bash", "-c", "cd /code && ./wait-for-it.sh db:5432 -- bash setup.sh --no-input --no-npm && python manage.py runserver 0.0.0.0:8000"] ports: - "8000:8000" diff --git a/ilmotunkki/README.md b/ilmotunkki/README.md deleted file mode 100644 index 686d79f..0000000 --- a/ilmotunkki/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Ilmotunkki - -## Terms -- Signup, Form with collection of questions -- Response, One answer to some signup -- Quota, Amount of people allowed to respond with some option selected. - - In generic case there is no option and quota is just max number of people. - -## Requirements - -- Officials may generate signups forms -- Officials may see results from signups -- Officials may see some stats from their signups - - for example distributions of multiple choice answers -- Officials should be able to edit signups wherever possible - - Propably not possible to edit after first response -- Officials should be able to delete responses -- Officials should be able to embed payment information to the signup? - - TODO: is there need for unique reference numbers for every response? -- Officials should be able to save a signup to a reusable template. - - Possibility to save templates? - -- Signup may be attached to an event - - Multiple signups to a single event should be possible (FTMK uses for museum visits? Erna asked if it was possible in old web) - - Possibility for external service (Google Form, URL will suffice) - -- Signup should support custom quotas - - Atleast quotas from multiple choices and checkboxes - - Text quotas are risky (typos everywhere!!) -- Signup should have start and end times -- Signup should support atleast following questiontypes - - Text - - multiple choice (select one) - - checkbox (boolean yes/no) - -- Signup should support reserve slots. - - TODO: quota based reserves or generic? or both? - -- Responding should send confirm email -- Response should be editable by responder and only by the responder until the closing of the signup - - TODO: is there need to custom edit period or disable? - -- Responders should see amount of quotas left. -- Responders should see some information about other responses - - TODO: names? should this be editable by officials? - - Or superadmin can edit and the one signing up within edit period - - NOTE: Quota related info is exposed if any info is printed - - When quotas need to be hidden? PoTa? - diff --git a/ilmotunkki/__init__.py b/ilmotunkki/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ilmotunkki/admin.py b/ilmotunkki/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/ilmotunkki/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/ilmotunkki/apps.py b/ilmotunkki/apps.py deleted file mode 100644 index c5dcacb..0000000 --- a/ilmotunkki/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class IlmotunkkiConfig(AppConfig): - name = 'ilmotunkki' diff --git a/ilmotunkki/migrations/__init__.py b/ilmotunkki/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/ilmotunkki/models.py b/ilmotunkki/models.py deleted file mode 100644 index c2a1504..0000000 --- a/ilmotunkki/models.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.db import models -from django.utils import timezone - - -class Signup(models.Model): - start = models.DateTimeField() - end = models.DateTimeField() - - -class Question(models.Model): - pass - - -class Answer(models.Model): - signup = models.ForeignKey(Signup, on_delete=models.CASCADE) - question = models.ForeignKey(Question, on_delete=models.PROTECT) diff --git a/ilmotunkki/tests.py b/ilmotunkki/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/ilmotunkki/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/ilmotunkki/views.py b/ilmotunkki/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/ilmotunkki/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/infoscreen/hsl_fetcher.py b/infoscreen/hsl_fetcher.py deleted file mode 100644 index 6a3835c..0000000 --- a/infoscreen/hsl_fetcher.py +++ /dev/null @@ -1,70 +0,0 @@ -"""File containing Infoscreen HSL data fetcher classes.""" - -import requests -import json -import logging -import os -import pytz - -from datetime import timedelta, datetime -from django.utils import timezone, dateparse -from django.utils.dateformat import format - -from django.conf import settings - - -with open(os.path.join(settings.BASE_DIR, 'infoscreen', 'hsl_stops.graphql')) as stops_file: - STOPS_QUERY = stops_file.read() - -with open(os.path.join(settings.BASE_DIR, 'infoscreen', 'hsl_stops_variables.json')) as vars_file: - STOPS_VARS = json.loads(vars_file.read()) - -API_URL = 'https://api.digitransit.fi/routing/v1/routers/hsl/index/graphql' -API_HEADERS = {'Content-Type': 'application/json'} - - -def fetch(): - """Fetch data from HSL API.""" - - query_vars = STOPS_VARS.copy() - query_vars['startTime_6'] = format(timezone.now(), 'U') - - post_data = json.dumps({ - 'operationName': 'NearestRoutesContainer', - 'query': STOPS_QUERY, - 'variables': query_vars, - }) - - resp = requests.post(API_URL, data=post_data, headers=API_HEADERS) - - data = resp.json() - - items = data['data']['viewer']['_nearest']['edges'] - places = map(lambda item: item['node']['place'], items) - - schedule = [] - for place in places: - route = place['pattern']['route']['shortName'] - stop_times = place['_stoptimes'] - for stop_time in stop_times: - timestamp = time_utc = stop_time['serviceDay'] + stop_time['realtimeArrival'] - headsign = stop_time['stopHeadsign'] - stop_name = stop_time['stop']['name'] - time_diff = (timestamp - timezone.now().timestamp()) / 60 # minutes - - if time_diff < settings.HSL_DEPARTURE_THRESHOLD: - continue - elif time_diff < settings.HSL_HURRY_THRESHOLD: - time = '{} min'.format(int(time_diff)) - else: - time = pytz.utc.localize(datetime.fromtimestamp(timestamp)).strftime('%H:%M') - - schedule.append({ - 'route': route, - 'headsign': headsign, - 'timestamp': time, - 'stop': stop_name, - 'utc': time_utc, - }) - - return schedule diff --git a/infoscreen/hsl_stops.graphql b/infoscreen/hsl_stops.graphql deleted file mode 100644 index 6111303..0000000 --- a/infoscreen/hsl_stops.graphql +++ /dev/null @@ -1,71 +0,0 @@ -query NearestRoutesContainer($lat_0: Float!, $lon_1: Float!, $maxDistance_2: Int!, $maxResults_3: Int!, $timeRange_7: Int!, $numberOfDepartures_8: Int!, $filterByModes_4: [Mode]!, $filterByPlaceTypes_5: [FilterPlaceType]!, $startTime_6: Long!) { - viewer { - ...F5 - } -} - -fragment F0 on DepartureRow { - _stoptimes4caEfh: stoptimes(startTime: $startTime_6, timeRange: $timeRange_7, numberOfDepartures: $numberOfDepartures_8) { - pickupType - serviceDay - realtimeDeparture - } - id -} - -fragment F1 on DepartureRow { - pattern { - route { - shortName - } - } - _stoptimes: stoptimes(startTime: $startTime_6, timeRange: $timeRange_7, numberOfDepartures: $numberOfDepartures_8) { - realtimeArrival - serviceDay - stopHeadsign - stop { - name - } - } -} - -fragment F2 on BikeRentalStation { - id -} - -fragment F3 on placeAtDistance { - distance - place { - id - __typename - ...F1 - ...F2 - } - id -} - -fragment F4 on placeAtDistanceConnection { - edges { - node { - distance - place { - id - __typename - ...F0 - } - id - ...F3 - } - cursor - } - pageInfo { - hasNextPage - hasPreviousPage - } -} - -fragment F5 on QueryType { - _nearest: nearest(lat: $lat_0, lon: $lon_1, maxDistance: $maxDistance_2, maxResults: $maxResults_3, first: $maxResults_3, filterByModes: $filterByModes_4, filterByPlaceTypes: $filterByPlaceTypes_5) { - ...F4 - } -} \ No newline at end of file diff --git a/infoscreen/hsl_stops_variables.json b/infoscreen/hsl_stops_variables.json deleted file mode 100644 index bcc8e18..0000000 --- a/infoscreen/hsl_stops_variables.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "lat_0": 60.190480099999995, - "lon_1": 24.8275665, - "maxDistance_2": 1000, - "maxResults_3": 50, - "numberOfDepartures_8": 2, - "timeRange_7": 7200, - "filterByModes_4": ["BUS"], - "filterByPlaceTypes_5": ["DEPARTURE_ROW"] -} diff --git a/infoscreen/management/commands/hsl.py b/infoscreen/management/commands/hsl.py deleted file mode 100644 index 5fb2061..0000000 --- a/infoscreen/management/commands/hsl.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.core.management.base import BaseCommand -from infoscreen.hsl_fetcher import HSLFetcher - - -class Command(BaseCommand): - help = 'Loads HSL timetables and save to json file.' - - def handle(self, *args, **options): - fetcher = HSLFetcher() - fetcher.fetch() diff --git a/infoscreen/migrations/0006_delete_hsldatamodel.py b/infoscreen/migrations/0006_delete_hsldatamodel.py index c660813..fdc0f83 100644 --- a/infoscreen/migrations/0006_delete_hsldatamodel.py +++ b/infoscreen/migrations/0006_delete_hsldatamodel.py @@ -15,4 +15,7 @@ class Migration(migrations.Migration): migrations.DeleteModel( name='HSLDataModel', ), + migrations.DeleteModel( + name='HslInfoItem', + ), ] diff --git a/infoscreen/migrations/0007_lunchitem.py b/infoscreen/migrations/0007_lunchitem.py new file mode 100644 index 0000000..ed201b6 --- /dev/null +++ b/infoscreen/migrations/0007_lunchitem.py @@ -0,0 +1,21 @@ +# Generated by Django 2.1.5 on 2019-03-26 12:49 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('infoscreen', '0006_delete_hsldatamodel'), + ] + + operations = [ + migrations.CreateModel( + name='LunchItem', + fields=[ + ('infoitem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='infoscreen.InfoItem')), + ], + bases=('infoscreen.infoitem',), + ), + ] diff --git a/infoscreen/models.py b/infoscreen/models.py index 18d2b0a..65058a1 100644 --- a/infoscreen/models.py +++ b/infoscreen/models.py @@ -193,6 +193,19 @@ class SossoInfoItem(InfoItem): return "/static/infoscreen/html/sosso_create.html" +class LunchItem(InfoItem): + """Class for Lunch Infoscreen item.""" + + display_name = _("Today's lunch") + + def get_template_url(self): + return "/static/infoscreen/html/lunch.html" + + @staticmethod + def get_create_template_url(): + return "/static/infoscreen/html/lunch_create.html" + + class EventInfoItem(InfoItem): """Class for Event Infoscreen item.""" @@ -254,21 +267,6 @@ class VideoInfoItem(InfoItem): return d -class HslInfoItem(InfoItem): - """Class for HSL Infoscreen item.""" - - display_name = _("HSL timetables") - - def get_template_url(self): - """Return HSL infoitem template url.""" - return "/static/infoscreen/html/hsl.html" - - @staticmethod - def get_create_template_url(): - """Call create HSL infoitem template url command.""" - return "/static/infoscreen/html/hsl_create.html" - - class ExternalImageInfoItem(InfoItem): """Class for External Image Infoscreen item.""" diff --git a/infoscreen/static/infoscreen/css/hsl.css b/infoscreen/static/infoscreen/css/hsl.css deleted file mode 100644 index 8753ab1..0000000 --- a/infoscreen/static/infoscreen/css/hsl.css +++ /dev/null @@ -1,74 +0,0 @@ -table { - font-size: 4vh; - font-family: 'Droid Sans Mono', monospace; -} -.red { - color: red; - -webkit-animation-name: blinker; - -webkit-animation-duration: 2s; - -webkit-animation-timing-function: linear; - -webkit-animation-iteration-count: infinite; - - -moz-animation-name: blinker; - -moz-animation-duration: 2s; - -moz-animation-timing-function: linear; - -moz-animation-iteration-count: infinite; - - animation-name: blinker; - animation-duration: 2s; - animation-timing-function: linear; - animation-iteration-count: infinite; -} -.black { - color: black; -} -@-moz-keyframes blinker { - 0% { opacity: 1.0; } - 50% { opacity: 0.1; } - 100% { opacity: 1.0; } -} - -@-webkit-keyframes blinker { - 0% { opacity: 1.0; } - 50% { opacity: 0.1; } - 100% { opacity: 1.0; } -} - -@keyframes blinker { - 0% { opacity: 1.0; } - 50% { opacity: 0.1; } - 100% { opacity: 1.0; } -} -thead{ - background: #f0f0f0; -} -.header-row{ - background: #f0f0f0; - font-size: 7vh; - font-family: 'Droid Sans Mono', monospace; - text-align: center; -} - -.container { - width: 100vw; - padding: 0 0 0 0; -} - -.container .table { - margin-left: 0; - margin-right: 0; -} - -.repeat-item.ng-leave { - -} - -.repeat-item.ng-leave.ng-leave-active { - opacity: 0; - font-size: 0vh; -} - -.repeat-item.ng-leave{ - opacity: 1; - font-size: 5vh; -} diff --git a/infoscreen/static/infoscreen/css/lunch.css b/infoscreen/static/infoscreen/css/lunch.css new file mode 100644 index 0000000..1d324f6 --- /dev/null +++ b/infoscreen/static/infoscreen/css/lunch.css @@ -0,0 +1,53 @@ +#header { + height: 30%; + width: 100%; + background-color:#7c1330; + text-align: center; +} + +#header-image { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 100%; +} + +.article-row { + min-height: 20vh; + margin: 10px 10px 10px 10px; +} + +.article-thumb-col { + max-height: 200px; + text-align: left; +} + +.article-title-col { + font-size: 3vw; +} + +.thumbnail { + max-width: 355px; + max-height: 200px; +} + +#sossoimage { + height: 300px; + position: relative; + left: 0px; + top: 0px; + } + +.stretch { + width:100%; + height:100%; +} + +#post { + height: 540px; + border:2px solid black; +} + +#container { + max-height: 70%; +} diff --git a/infoscreen/static/infoscreen/html/coffee.html b/infoscreen/static/infoscreen/html/coffee.html deleted file mode 100644 index 71048e5..0000000 --- a/infoscreen/static/infoscreen/html/coffee.html +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/infoscreen/static/infoscreen/html/hsl.html b/infoscreen/static/infoscreen/html/hsl.html deleted file mode 100644 index c804428..0000000 --- a/infoscreen/static/infoscreen/html/hsl.html +++ /dev/null @@ -1,41 +0,0 @@ - - - -
-
-

{{clock | date:'HH:mm'}}

-
HSL-Aikataulut
-
-
-

- {{error}} -

- - - - - - - - - - - - - - - -
- Aika - - Linja - - Pysäkki -
- {{x.timestamp}} - - {{x.route}}, {{x.headsign}} - - {{x.stop}} -
-
diff --git a/infoscreen/static/infoscreen/html/lunch.html b/infoscreen/static/infoscreen/html/lunch.html new file mode 100644 index 0000000..052af38 --- /dev/null +++ b/infoscreen/static/infoscreen/html/lunch.html @@ -0,0 +1,11 @@ + + +
+
+
+
+

+
+
+
+
diff --git a/infoscreen/static/infoscreen/html/hsl_create.html b/infoscreen/static/infoscreen/html/lunch_create.html similarity index 62% rename from infoscreen/static/infoscreen/html/hsl_create.html rename to infoscreen/static/infoscreen/html/lunch_create.html index 0293935..81f5cfe 100644 --- a/infoscreen/static/infoscreen/html/hsl_create.html +++ b/infoscreen/static/infoscreen/html/lunch_create.html @@ -1,10 +1,10 @@ -
-
- Create new item to show hsl ttimetables. Name is used only as identifier -
-
- - -
- -
+
+
+ Create new item to show restaurants. Name is used only as identifier +
+
+ + +
+ +
diff --git a/infoscreen/static/infoscreen/html/test2.html b/infoscreen/static/infoscreen/html/test2.html deleted file mode 100644 index 95db769..0000000 --- a/infoscreen/static/infoscreen/html/test2.html +++ /dev/null @@ -1 +0,0 @@ -

testi2

diff --git a/infoscreen/static/infoscreen/html/test3.html b/infoscreen/static/infoscreen/html/test3.html deleted file mode 100644 index eecc1a2..0000000 --- a/infoscreen/static/infoscreen/html/test3.html +++ /dev/null @@ -1 +0,0 @@ -

testi3

diff --git a/infoscreen/static/infoscreen/img/asw.png b/infoscreen/static/infoscreen/img/asw.png deleted file mode 100644 index 931b313..0000000 Binary files a/infoscreen/static/infoscreen/img/asw.png and /dev/null differ diff --git a/infoscreen/static/infoscreen/img/fujitsu.png b/infoscreen/static/infoscreen/img/fujitsu.png deleted file mode 100644 index 825db43..0000000 Binary files a/infoscreen/static/infoscreen/img/fujitsu.png and /dev/null differ diff --git a/infoscreen/static/infoscreen/img/kaukkarit.jpg b/infoscreen/static/infoscreen/img/kaukkarit.jpg deleted file mode 100644 index 56bc7ff..0000000 Binary files a/infoscreen/static/infoscreen/img/kaukkarit.jpg and /dev/null differ diff --git a/infoscreen/static/infoscreen/img/otaajot16fb.png b/infoscreen/static/infoscreen/img/otaajot16fb.png deleted file mode 100644 index 9c1424e..0000000 Binary files a/infoscreen/static/infoscreen/img/otaajot16fb.png and /dev/null differ diff --git a/infoscreen/static/infoscreen/img/otaolutbanner.jpg b/infoscreen/static/infoscreen/img/otaolutbanner.jpg deleted file mode 100644 index a3dfbcc..0000000 Binary files a/infoscreen/static/infoscreen/img/otaolutbanner.jpg and /dev/null differ diff --git a/infoscreen/static/infoscreen/img/teekkaribileet.jpg b/infoscreen/static/infoscreen/img/teekkaribileet.jpg deleted file mode 100644 index 9d0c472..0000000 Binary files a/infoscreen/static/infoscreen/img/teekkaribileet.jpg and /dev/null differ diff --git a/infoscreen/static/infoscreen/js/infoadmin_controllers.js b/infoscreen/static/infoscreen/js/infoadmin_controllers.js index c9fa019..22c79c1 100644 --- a/infoscreen/static/infoscreen/js/infoadmin_controllers.js +++ b/infoscreen/static/infoscreen/js/infoadmin_controllers.js @@ -182,8 +182,8 @@ var simple_controllers = [ "external_image", "abbitem", "sossoitem", + "lunchitem", "eventitem", - "hslitem", "websiteitem", "apyitem", ]; diff --git a/infoscreen/static/infoscreen/js/infoscreen_controllers.js b/infoscreen/static/infoscreen/js/infoscreen_controllers.js index 739fcfd..4176671 100644 --- a/infoscreen/static/infoscreen/js/infoscreen_controllers.js +++ b/infoscreen/static/infoscreen/js/infoscreen_controllers.js @@ -82,6 +82,21 @@ app.controller('SossoController', function($scope, $http) { }) }); +app.controller('LunchController', function ($scope, $http) { + $scope.data = []; + var restaurants = [42]; + var restaurant_names = ["TUAS"] + var cur_date = new Date().toISOString().split("T")[0] + $http.get("https://kitchen.kanttiinit.fi/menus?restaurants=" + restaurants.join(",") + "&days=" + cur_date).then(function (response) { + $scope.data = restaurant_names.map(function(n, idx) { + return { + name: n, + lunch: response[idx][cur_date], + } + }); + }) +}); + app.controller('ApyController', function($scope, $http) { $scope.items = []; $http.get("/infoscreen/apyjson").then(function(response) @@ -119,35 +134,3 @@ app.filter('unixTimeToDifference', function() { return res; } }) - -app.controller('timetableCtrl', - function($scope, $http, $interval) { - function load() { - $http.get('/infoscreen/hsl_data') - .then(function(data, status, headers, config) { //eslint-disable-line no-unused-vars - $scope.stoptimes = data.data; - $scope.error = data.data.error || null; - }); - $http.get('/infoscreen/hsl_data/settings') - .then(function(data, status, headers, config) { //eslint-disable-line no-unused-vars - $scope.departureThreshold = data.data['departure_threshold']; - $scope.hurryThreshold = data.data['hurry_threshold']; - }); - } - - function update_clock() { - $scope.clock = Date.now(); - } - - $scope.$on('$destroy', function() { - $interval.cancel(load_interval); - $interval.cancel(clock_interval); - }); - - var load_interval = $interval(load, 5000); - var clock_interval = $interval(update_clock, 1000); - - update_clock(); - load(); - } -); diff --git a/infoscreen/urls.py b/infoscreen/urls.py index 8236b00..3de40b3 100644 --- a/infoscreen/urls.py +++ b/infoscreen/urls.py @@ -18,14 +18,12 @@ from infoscreen.views import create_image_item from infoscreen.views import create_video_item from infoscreen.views import createABBItem from infoscreen.views import createSossoItem -from infoscreen.views import createHslItem +from infoscreen.views import createLunchItem from infoscreen.views import createEventItem from infoscreen.views import createExternalWebsiteItem from infoscreen.views import create_rotation from infoscreen.views import delete_rotation -from infoscreen.views import CurrentHSLView from infoscreen.views import createApyItem -from infoscreen.views import hsl_timetable_settings from infoscreen.views import get_apy_json urlpatterns = [ @@ -44,14 +42,12 @@ urlpatterns = [ url(r'^create_video$', create_video_item), url(r'^create_abbitem$', createABBItem), url(r'^create_sossoitem$', createSossoItem), + url(r'^create_lunchitem$', createLunchItem), url(r'^create_eventitem$', createEventItem), - url(r'^create_hslitem$', createHslItem), url(r'^create_apyitem$', createApyItem), url(r'^create_websiteitem$', createExternalWebsiteItem), url(r'^create_rotation$', create_rotation), url(r'^delete_rotation/(?P\d+)$', delete_rotation), - url(r'^hsl_data$', CurrentHSLView), - url(r'^hsl_data/settings$', hsl_timetable_settings), url(r'^apyjson', get_apy_json), ] diff --git a/infoscreen/views/admin_views.py b/infoscreen/views/admin_views.py index 4163dc3..45d107b 100644 --- a/infoscreen/views/admin_views.py +++ b/infoscreen/views/admin_views.py @@ -17,7 +17,7 @@ import requests from infoscreen.models import ( Rotation, InfoItem, InfoInstance, ABBInfoItem, ExternalImageInfoItem, - ImageInfoItem, SossoInfoItem, HslInfoItem, EventInfoItem, + ImageInfoItem, SossoInfoItem, LunchItem, EventInfoItem, ExternalWebsiteInfoItem, ImageUploadForm, ApyInfoItem, VideoInfoItem) @@ -179,7 +179,7 @@ createInstance = create_item_generator(InfoInstance) deleteInstance = delete_item_generator(InfoInstance) createABBItem = create_item_generator(ABBInfoItem) createSossoItem = create_item_generator(SossoInfoItem) -createHslItem = create_item_generator(HslInfoItem) +createLunchItem = create_item_generator(LunchItem) createExternalImageInfoItem = create_item_generator(ExternalImageInfoItem) createExternalWebsiteItem = create_item_generator(ExternalWebsiteInfoItem) createEventItem = create_item_generator(EventInfoItem) diff --git a/infoscreen/views/public_views.py b/infoscreen/views/public_views.py index 9a7ac85..3dcfa58 100644 --- a/infoscreen/views/public_views.py +++ b/infoscreen/views/public_views.py @@ -5,7 +5,6 @@ from django.conf import settings from django.db import DatabaseError from infoscreen.models import Rotation, InfoItem, InfoInstance -from infoscreen.hsl_fetcher import fetch as hsl_fetch import json import logging @@ -79,25 +78,3 @@ def info_items(request, *args, **kwargs): items.append(i.get_dict()) return JsonResponse(items, safe=False) - - -@require_http_methods(["GET"]) -def hsl_timetable_settings(request, *args, **kwargs): - """Set HSL timetable settings.""" - d = {"departure_threshold": settings.HSL_DEPARTURE_THRESHOLD, - "hurry_threshold": settings.HSL_HURRY_THRESHOLD} - - return JsonResponse(d, status=200) - - -@require_http_methods(["GET"]) -def CurrentHSLView(request, *args, **kwargs): - """Get HSL data and return it.""" - try: - api_resp = hsl_fetch() - except Exception as ex: - logging.exception('Failed to fetch HSL timetables.') - error = {'error': 'Aikataulujen haku epäonnistui.'} - return JsonResponse(error, status=200) - - return JsonResponse(api_resp, status=200, safe=False) diff --git a/kaehmy/migrations/0005_auto_20190312_1458.py b/kaehmy/migrations/0005_auto_20190312_1458.py new file mode 100644 index 0000000..0213c16 --- /dev/null +++ b/kaehmy/migrations/0005_auto_20190312_1458.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.5 on 2019-03-12 12:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('kaehmy', '0004_auto_20181018_2121'), + ] + + operations = [ + migrations.AlterField( + model_name='application', + name='custom_role_is_board', + field=models.BooleanField(blank=True, verbose_name='Board member'), + ), + ] diff --git a/kaehmy/static/kaehmy/css/header.css b/kaehmy/static/kaehmy/css/header.css index 4e20d7e..53471fc 100644 --- a/kaehmy/static/kaehmy/css/header.css +++ b/kaehmy/static/kaehmy/css/header.css @@ -23,7 +23,7 @@ position: absolute; left: 0; top: 0; - background-color: #052f5f; + background-color: #0c2938; width: 100%; } diff --git a/kaehmy/static/kaehmy/img/kaehmy_banner.png b/kaehmy/static/kaehmy/img/kaehmy_banner.png index 7997ad2..b5dc259 100644 Binary files a/kaehmy/static/kaehmy/img/kaehmy_banner.png and b/kaehmy/static/kaehmy/img/kaehmy_banner.png differ diff --git a/kaehmy/templates/checkbox_option.html b/kaehmy/templates/checkbox_option.html index ac8c336..90c3976 100644 --- a/kaehmy/templates/checkbox_option.html +++ b/kaehmy/templates/checkbox_option.html @@ -1,5 +1,4 @@ -{% if wrap_label %} -{% endif %} + {% include "django/forms/widgets/input.html" %} -{% if wrap_label %} {{ widget.label }}{% endif %} +{{ widget.label }} diff --git a/kaehmy/templates/kaehmy.html b/kaehmy/templates/kaehmy.html index 4276c60..3d140df 100644 --- a/kaehmy/templates/kaehmy.html +++ b/kaehmy/templates/kaehmy.html @@ -16,21 +16,21 @@ {% blocktrans %}Kaehmykoneella voit ilmaista kiinnostuksesi toimia killassa ensi vuonna. Listassa on vastuualueittain sekä hallitus- että toimihenkilövirkoja. Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan uutta toimenkuvaa. - Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa konsultoida kaehmyopasta + Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa konsultoida kaehmyopasta tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan henkilöön.{% endblocktrans %}

- {% blocktrans %}Muista, että kaehmyn lähettäminen on kiinnostuksen ilmaus + {% blocktrans %}Muista, että kaehmyn lähettäminen on kiinnostuksen ilmaus eikä siis missään nimessä sitova ilmoittautumien mihinkään tehtävään!{% endblocktrans %}

{% trans "Päivämääriä & deadlineja" %}
    -
  • 29.10. {% blocktrans %}Hallitustyrkkypaneeli (haku hallitukseen olisi hyvä tehdä ennen tätä!){% endblocktrans %}
  • -
  • 5.11. {% blocktrans %}Vaalikokous, osa 1 (puheenjohtajan valinta){% endblocktrans %}
  • -
  • 12.11. {% blocktrans %}Kiltailta{% endblocktrans %}
  • -
  • 15.11. {% blocktrans %}Vaalikokous, osa 2 (hallituksen valinta){% endblocktrans %}
  • -
  • 20.11. {% blocktrans %}Haku toimariksi olisi hyvä tehdä ennen tätä!{% endblocktrans %}
  • -
  • 26.11. {% blocktrans %}Vaalikokous, osa 3 (toimarien valinta){% endblocktrans %}
  • +
  • 24.10. {% blocktrans %}Kiltailta{% endblocktrans %}
  • +
  • 28.10. {% blocktrans %}Hallitustyrkkypaneeli (haku hallitukseen olisi hyvä tehdä ennen tätä!){% endblocktrans %}
  • +
  • 4.11. {% blocktrans %}Vaalikokous, osa 1 (puheenjohtajan valinta){% endblocktrans %}
  • +
  • 14.11. {% blocktrans %}Vaalikokous, osa 2 (hallituksen valinta){% endblocktrans %}
  • +
  • 18.11. {% blocktrans %}Infoilta toimarihakijoille (haku toimariksi olisi hyvä tehdä ennen tätä){% endblocktrans %}
  • +
  • 25.11. {% blocktrans %}Vaalikokous, osa 3 (toimarien valinta){% endblocktrans %}
{% csrf_token %} {% bootstrap_field form.name %} @@ -46,7 +46,7 @@ {{ preset_field.label }}
- {% bootstrap_field preset_field show_label=False %} + {% bootstrap_field preset_field show_label=False %}
{% endif %} @@ -59,11 +59,11 @@ {{ custom_field.label }}
- {% bootstrap_field custom_field show_label=False %} + {% bootstrap_field custom_field show_label=False %}
{% endif %} - {% endfor %} + {% endfor %}
{% bootstrap_field form.custom_role_name %} @@ -71,7 +71,7 @@
{% bootstrap_field form.text %} - + {% blocktrans %} Hyväksyn tietosuojaselosteen ja tietojeni tallentamisen. diff --git a/kaehmy/tgbot.py b/kaehmy/tgbot.py new file mode 100644 index 0000000..248f7eb --- /dev/null +++ b/kaehmy/tgbot.py @@ -0,0 +1,38 @@ +''' +A telegram bot api for whatever purposes. +TODO: kaehmy app is definitely not correct place for this +''' +import logging +import requests +from django.conf import settings +from kaehmy.models import TelegramChannel + + +class TelegramBot: + ''' + A telegram bot api for whatever purposes + Currently only able to broadcast stuff to all registered + channels using broadcast method. + ''' + + def __init__(self, api_token=None): + + self.api_token = api_token or settings.TELEGRAM_BOT_TOKEN + self.send_message_url = "https://api.telegram.org/bot{}/sendMessage".format(self.api_token) + + def broadcast(self, message): + channels_ids = TelegramChannel.objects.values_list("channel_id", flat=True) + for id_ in channels_ids: + self.send_message(id_, message) + + def send_message(self, channel_id, message): + ''' + Send message to a chat with given channel_id + ''' + data = { + 'chat_id': channel_id, + 'text': message, + 'parse_mode': 'Markdown' + } + resp = requests.post(self.send_message_url, json=data) + logging.debug(resp.content) diff --git a/linux_install.md b/linux_install.md index e816eb9..2c737bb 100644 --- a/linux_install.md +++ b/linux_install.md @@ -4,14 +4,15 @@ ### Dependency list -* Python >3.5 -* PostgreSQL >9.5 -* pip3 -* virtualenv -* npm +* Python >3.5 +* PostgreSQL >9.5 +* pip3 +* virtualenv +* npm Install with apt: -``` + +```bash sudo apt install python3 sudo apt install python3-pip sudo apt install postgresql @@ -24,15 +25,16 @@ More info about PostgreSQL at: These packages might be needed on certain platforms: -* python3-dev -* libffi-dev -* python3-cffi -* libssl-dev +* python3-dev +* libffi-dev +* python3-cffi +* libssl-dev ## Create a virtual environment for python Create a virtualenv in the parent directory. -``` + +```bash virtualenv -p python3 ../virtualenv.sikweb ``` @@ -40,7 +42,7 @@ virtualenv -p python3 ../virtualenv.sikweb Assuming we are at the root of this repository and virtualenv is one level above. -``` +```bash . ../virtualenv.sikweb/bin/activate ``` @@ -48,27 +50,26 @@ Assuming we are at the root of this repository and virtualenv is one level above Run the install wizard with -``` +```bash bash setup.sh ``` and follow the instructions. -## Done! +## Done ## In case of error on macOS Mojave 10.14 If you get an error saying -``` +```bash The headers or library files could not be found for zlib, a required dependency when compiling Pillow from source. ``` run -``` +```bash xcode-select --install sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / ``` - diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index fa0ce06..ce8fde8 100644 Binary files a/locale/en/LC_MESSAGES/django.mo and b/locale/en/LC_MESSAGES/django.mo differ diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 0a2af39..f0ed178 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-20 23:09+0300\n" +"POT-Creation-Date: 2019-09-16 19:33+0300\n" "PO-Revision-Date: 2017-11-02 23:09+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -33,19 +33,19 @@ msgstr "External website" msgid "Sössö articles" msgstr "Sössö articles" -#: infoscreen/models.py:199 webapp/models.py:72 +#: infoscreen/models.py:199 +msgid "Today's lunch" +msgstr "" + +#: infoscreen/models.py:212 webapp/models.py:74 msgid "Events" msgstr "Events" -#: infoscreen/models.py:214 +#: infoscreen/models.py:227 msgid "Image" msgstr "Image" -#: infoscreen/models.py:260 -msgid "HSL timetables" -msgstr "HSL timetables" - -#: infoscreen/models.py:275 +#: infoscreen/models.py:273 msgid "External image" msgstr "External image" @@ -113,7 +113,7 @@ msgid "Delete" msgstr "Delete" #: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:56 -#: kaehmy/templates/list.html:36 webapp/models.py:118 webapp/models.py:147 +#: kaehmy/templates/list.html:36 webapp/models.py:125 webapp/models.py:154 msgid "Name" msgstr "Name" @@ -263,7 +263,7 @@ msgstr "" msgid "Category" msgstr "" -#: kaehmy/models.py:39 webapp/models.py:129 +#: kaehmy/models.py:39 webapp/models.py:136 msgid "Description" msgstr "Description" @@ -311,7 +311,7 @@ msgstr "Kaehmy application" msgid "Kaehmylomakkeet" msgstr "Kaehmy applications" -#: kaehmy/models.py:98 webapp/models.py:182 +#: kaehmy/models.py:98 webapp/models.py:189 msgid "Phone number" msgstr "" @@ -327,7 +327,7 @@ msgstr "" msgid "Custom role name" msgstr "" -#: kaehmy/models.py:104 webapp/models.py:119 +#: kaehmy/models.py:104 webapp/models.py:126 msgid "Board member" msgstr "Board member" @@ -351,7 +351,7 @@ msgstr "" msgid "Telegram channels" msgstr "" -#: kaehmy/tables.py:13 webapp/models.py:166 +#: kaehmy/tables.py:13 webapp/models.py:173 msgid "Roles" msgstr "" @@ -450,12 +450,12 @@ msgid "" "%%20rekisteri.pdf\" target=\"_blank\">tietosuojaselosteen ja tietojeni " "tallentamisen.\n" " " -msgstr +msgstr "" "\n" " I accept the privacy statement and the saving of personal data." -"\n" +"%%20rekisteri.pdf\" target=\"_blank\">privacy statement and the saving " +"of personal data.\n" " " #: kaehmy/templates/kaehmy.html:82 members/templates/settings.html:23 @@ -634,6 +634,14 @@ msgid "Hienoa! Jäsenhakemuksesi on nyt lähetetty." msgstr "Amazing! Your membership application has been sent." #: members/templates/application_success.html:9 +msgid "" +"Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä sik-vtmk@list.ayy." +"fi jos viestiä ei näy." +msgstr "" +"Confirmation email is sent to given email address. Contact sik-vtmk@list.ayy." +"fi if you didn't receive it." + +#: members/templates/application_success.html:10 msgid "Takaisin Sähköinsinöörikillan web-sivuille" msgstr "Back to the front page" @@ -687,6 +695,107 @@ msgstr "Application form" msgid "Settings" msgstr "Settings" +#: members/templates/email_application_accept.html:2 +#, fuzzy +#| msgid "Moikka" +msgid "Moi" +msgstr "Hi" + +#: members/templates/email_application_accept.html:4 +msgid "Onnittelut! Sinut on hyväksytty Sähköinsinöörikillan jäseneksi." +msgstr "" + +#: members/templates/email_application_accept.html:6 +#, fuzzy +#| msgid "Käy kurkkaamassa muutkin haasteet osoitteessa" +msgid "Käy kurkkaamassa killan nettisivuilta" +msgstr "Also go and check other challenges at" + +#: members/templates/email_application_accept.html:6 +msgid "" +"tulevia tapahtumia ja piipahda kiltahuoneella tutustumassa uusiin " +"kiltatovereihisi!" +msgstr "" + +#: members/templates/email_application_accept.html:8 +msgid "Liity myös killan TG-kanaville" +msgstr "Join Guild's Telegram channels" + +#: members/templates/email_application_accept.html:9 +msgid "SIK" +msgstr "SIK" + +#: members/templates/email_application_accept.html:10 +msgid "SIK-fuksit 2019" +msgstr "SIK Freshmen 2019" + +#: members/templates/email_application_accept.html:11 +msgid "SIK-fuksit 2019 -tiedotuskanava" +msgstr "SIK Freshmen 2019 Notification channel" + +#: members/templates/email_application_submit.html:2 +#: ohlhafv/templates/email.html:2 +msgid "Moikka" +msgstr "Hi" + +#: members/templates/email_application_submit.html:4 +msgid "" +"Sait tämän viestin, sillä olet lähettänyt hakemuksen Aalto-yliopiston " +"Sähköinsinöörikillan jäseneksi alla olevin tiedoin. Siistiä!" +msgstr "" +"You received this email, since you sent a membership application to the " +"Guild of Electrical Engineering. That's so cool!" + +#: members/templates/email_application_submit.html:6 +msgid "Etunimi" +msgstr "First name" + +#: members/templates/email_application_submit.html:7 +msgid "Sukunimi" +msgstr "Last name" + +#: members/templates/email_application_submit.html:8 +msgid "Sähköposti" +msgstr "Email" + +#: members/templates/email_application_submit.html:9 +msgid "Kotipaikkakunta" +msgstr "Place of origin" + +#: members/templates/email_application_submit.html:10 +msgid "AYY:n jäsen" +msgstr "Member of AYY" + +#: members/templates/email_application_submit.html:11 +msgid "Haluan jäsenmailin" +msgstr "I want to receive weekly member email" + +#: members/templates/email_application_submit.html:13 +msgid "" +"Saat sähköpostiisi tiedon, kun sinut on hallituksen kokouksessa hyväksytty " +"jäseneksi" +msgstr "You will be notified via email once your application has been accepted" + +#: members/templates/email_application_submit.html:15 +msgid "Muistathan maksaa jäsenmaksun! Alla maksutiedot" +msgstr "Don't forget to pay your membership fee!" + +#: members/templates/email_application_submit.html:17 +msgid "Saaja" +msgstr "Recepient" + +#: members/templates/email_application_submit.html:18 +msgid "Tilinumero" +msgstr "Account number" + +#: members/templates/email_application_submit.html:20 +msgid "Viite" +msgstr "Reference Number" + +#: members/templates/email_application_submit.html:21 +msgid "Summa" +msgstr "Amount" + #: members/templates/member_add.html:15 members/templates/member_edit.html:18 #: members/templates/payment_add.html:20 members/templates/payment_edit.html:18 msgid "Save" @@ -804,40 +913,56 @@ msgstr "Payments in register:" msgid "Language" msgstr "Language" -#: members/templates/settings.html:20 sikweb/base.py:248 +#: members/templates/settings.html:20 sikweb/base.py:255 msgid "Finnish" msgstr "Finnish" -#: members/templates/settings.html:21 sikweb/base.py:249 +#: members/templates/settings.html:21 sikweb/base.py:256 msgid "English" msgstr "English" -#: members/views/applications.py:51 members/views/applications.py:112 -#: members/views/applications.py:137 +#: members/views/applications.py:54 members/views/applications.py:125 +#: members/views/applications.py:150 msgid "No application id specified" msgstr "No application id specified" -#: members/views/applications.py:71 +#: members/views/applications.py:74 msgid "Application missing 'id' field." msgstr "Application missing 'id' field." -#: members/views/applications.py:80 +#: members/views/applications.py:83 msgid "Email {} is already in use by a member. Application cannot be accepted." msgstr "" "Email {} is already in use by a member. Application cannot be accepted." -#: members/views/applications.py:91 +#: members/views/applications.py:94 msgid "Successfully accepted application" msgstr "Successfully accepted application" -#: members/views/applications.py:116 +#: members/views/applications.py:97 +msgid "Jäsenhakemuksesi Sähköinsinöörikiltaan on hyväksytty!" +msgstr "" + +#: members/views/applications.py:129 msgid "Successfully deleted application" msgstr "Successfully deleted application" -#: members/views/applications.py:126 +#: members/views/applications.py:139 msgid "Could not delete application object" msgstr "Could not delete application object" +#: members/views/applications.py:177 +msgid "Jäsenhakemuksesi Sähköinsinöörikiltaan on lähetetty onnistuneesti!" +msgstr "Your membership application was sent successfully!" + +#: members/views/applications.py:182 members/views/applications.py:183 +msgid "Kyllä" +msgstr "Yes" + +#: members/views/applications.py:182 members/views/applications.py:183 +msgid "Ei" +msgstr "No" + #: members/views/members.py:86 members/views/members.py:188 #: members/views/members.py:212 msgid "No member id specified" @@ -932,10 +1057,6 @@ msgstr "" msgid "Ohlhafv challenge: {} vs. {}" msgstr "" -#: ohlhafv/templates/email.html:2 -msgid "Moikka" -msgstr "Hi" - #: ohlhafv/templates/email.html:4 msgid "on haastanut sinut oluenjuontimittelöön" msgstr "has challenged you to a beer drinking contest" @@ -945,9 +1066,9 @@ msgid "-sarjassa" msgstr "series" #: ohlhafv/templates/email.html:8 -msgid "Muistattehan vahvistaa haasteen paikan päällä Smökissä torstaina 15.2" +msgid "Muistattehan vahvistaa haasteen paikan päällä Smökissä torstaina 14.2" msgstr "" -"Remeber to confirm the challenge at Smökki on Thursday 15.2. at the event" +"Remeber to confirm the challenge at Smökki on Thursday 14.2. at the event" #: ohlhafv/templates/email.html:10 msgid "Käy kurkkaamassa muutkin haasteet osoitteessa" @@ -977,7 +1098,7 @@ msgstr "" msgid "Challenge" msgstr "Challenge" -#: ohlhafv/views.py:42 +#: ohlhafv/views.py:43 msgid "Sinut on haastettu Øhlhäfviin!" msgstr "You have been challenged at Ohlhafv!" @@ -1006,91 +1127,95 @@ msgstr "Tags" msgid "Tag: {}" msgstr "Tag: {}" -#: webapp/models.py:52 +#: webapp/models.py:53 msgid "Feed: {}" msgstr "Feed: {}" -#: webapp/models.py:55 +#: webapp/models.py:56 msgid "Feed" msgstr "" -#: webapp/models.py:56 +#: webapp/models.py:57 msgid "Feeds" msgstr "" -#: webapp/models.py:68 +#: webapp/models.py:70 msgid "Event: {}" msgstr "" -#: webapp/models.py:71 +#: webapp/models.py:73 msgid "Event" msgstr "" -#: webapp/models.py:82 +#: webapp/models.py:84 msgid "Template questions: {}" msgstr "" -#: webapp/models.py:85 +#: webapp/models.py:87 msgid "Template question" msgstr "" -#: webapp/models.py:86 +#: webapp/models.py:88 msgid "Template questions" msgstr "" -#: webapp/models.py:98 +#: webapp/models.py:102 +msgid "#{} {}" +msgstr "" + +#: webapp/models.py:105 msgid "Signup form" msgstr "" -#: webapp/models.py:99 +#: webapp/models.py:106 msgid "Signup forms" msgstr "" -#: webapp/models.py:108 +#: webapp/models.py:115 msgid "Sign-ups: {}" msgstr "" -#: webapp/models.py:111 +#: webapp/models.py:118 msgid "Sign-up" msgstr "" -#: webapp/models.py:112 +#: webapp/models.py:119 msgid "Sign-ups" msgstr "" -#: webapp/models.py:123 +#: webapp/models.py:130 msgid "board member" msgstr "board member" -#: webapp/models.py:141 +#: webapp/models.py:148 msgid "Committee" msgstr "" -#: webapp/models.py:142 +#: webapp/models.py:149 msgid "Committees" msgstr "" -#: webapp/models.py:145 +#: webapp/models.py:152 msgid "Committee: {}" msgstr "" -#: webapp/models.py:165 +#: webapp/models.py:172 msgid "Role" msgstr "" -#: webapp/models.py:168 +#: webapp/models.py:175 msgid "Start date" msgstr "" -#: webapp/models.py:169 +#: webapp/models.py:176 msgid "End date" msgstr "" -#: webapp/models.py:179 +#: webapp/models.py:186 msgid "Official" msgstr "" -#: webapp/models.py:180 +#: webapp/models.py:187 msgid "Officials" msgstr "" @@ -1138,6 +1263,9 @@ msgstr "Sössö" msgid "Corporate" msgstr "Corporate" +#~ msgid "HSL timetables" +#~ msgstr "HSL timetables" + #~ msgid "Username" #~ msgstr "Username" diff --git a/locale/fi/LC_MESSAGES/django.mo b/locale/fi/LC_MESSAGES/django.mo index 3dcd57c..118a138 100644 Binary files a/locale/fi/LC_MESSAGES/django.mo and b/locale/fi/LC_MESSAGES/django.mo differ diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index 5c62364..25eee0e 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-20 23:09+0300\n" +"POT-Creation-Date: 2019-09-16 19:33+0300\n" "PO-Revision-Date: 2017-11-02 23:04+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -34,19 +34,19 @@ msgstr "Ulkoinen verkkosivu" msgid "Sössö articles" msgstr "Sössön artikkelit" -#: infoscreen/models.py:199 webapp/models.py:72 +#: infoscreen/models.py:199 +msgid "Today's lunch" +msgstr "Päivän lounas" + +#: infoscreen/models.py:212 webapp/models.py:74 msgid "Events" msgstr "Tapahtumat" -#: infoscreen/models.py:214 +#: infoscreen/models.py:227 msgid "Image" msgstr "Kuva" -#: infoscreen/models.py:260 -msgid "HSL timetables" -msgstr "HSL-aikataulut" - -#: infoscreen/models.py:275 +#: infoscreen/models.py:273 msgid "External image" msgstr "Ulkoinen kuva" @@ -114,7 +114,7 @@ msgid "Delete" msgstr "Poista" #: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:56 -#: kaehmy/templates/list.html:36 webapp/models.py:118 webapp/models.py:147 +#: kaehmy/templates/list.html:36 webapp/models.py:125 webapp/models.py:154 msgid "Name" msgstr "Nimi" @@ -264,7 +264,7 @@ msgstr "Muut" msgid "Category" msgstr "Kategoria" -#: kaehmy/models.py:39 webapp/models.py:129 +#: kaehmy/models.py:39 webapp/models.py:136 msgid "Description" msgstr "Kuvaus" @@ -312,7 +312,7 @@ msgstr "Kaehmylomake" msgid "Kaehmylomakkeet" msgstr "Kaehmylomakkeet" -#: kaehmy/models.py:98 webapp/models.py:182 +#: kaehmy/models.py:98 webapp/models.py:189 msgid "Phone number" msgstr "Puhelinnumero" @@ -328,7 +328,7 @@ msgstr "Teksti" msgid "Custom role name" msgstr "Uusi virka" -#: kaehmy/models.py:104 webapp/models.py:119 +#: kaehmy/models.py:104 webapp/models.py:126 msgid "Board member" msgstr "Hallituksen jäsen" @@ -352,7 +352,7 @@ msgstr "Telegram-kanava" msgid "Telegram channels" msgstr "Telegram-kanavat" -#: kaehmy/tables.py:13 webapp/models.py:166 +#: kaehmy/tables.py:13 webapp/models.py:173 msgid "Roles" msgstr "Roolit" @@ -632,6 +632,12 @@ msgid "Hienoa! Jäsenhakemuksesi on nyt lähetetty." msgstr "Hienoa! Jäsenhakemuksesi on nyt lähetetty." #: members/templates/application_success.html:9 +msgid "" +"Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä sik-vtmk@list.ayy." +"fi jos viestiä ei näy." +msgstr "" + +#: members/templates/application_success.html:10 msgid "Takaisin Sähköinsinöörikillan web-sivuille" msgstr "Takaisin Sähköinsinöörikillan web-sivuille" @@ -685,6 +691,103 @@ msgstr "Jäsenhakemuslomake" msgid "Settings" msgstr "Asetukset" +#: members/templates/email_application_accept.html:2 +msgid "Moi" +msgstr "" + +#: members/templates/email_application_accept.html:4 +msgid "Onnittelut! Sinut on hyväksytty Sähköinsinöörikillan jäseneksi." +msgstr "" + +#: members/templates/email_application_accept.html:6 +msgid "Käy kurkkaamassa killan nettisivuilta" +msgstr "" + +#: members/templates/email_application_accept.html:6 +msgid "" +"tulevia tapahtumia ja piipahda kiltahuoneella tutustumassa uusiin " +"kiltatovereihisi!" +msgstr "" + +#: members/templates/email_application_accept.html:8 +msgid "Liity myös killan TG-kanaville" +msgstr "" + +#: members/templates/email_application_accept.html:9 +msgid "SIK" +msgstr "" + +#: members/templates/email_application_accept.html:10 +msgid "SIK-fuksit 2019" +msgstr "" + +#: members/templates/email_application_accept.html:11 +msgid "SIK-fuksit 2019 -tiedotuskanava" +msgstr "" + +#: members/templates/email_application_submit.html:2 +#: ohlhafv/templates/email.html:2 +msgid "Moikka" +msgstr "" + +#: members/templates/email_application_submit.html:4 +msgid "" +"Sait tämän viestin, sillä olet lähettänyt hakemuksen Aalto-yliopiston " +"Sähköinsinöörikillan jäseneksi alla olevin tiedoin. Siistiä!" +msgstr "" + +#: members/templates/email_application_submit.html:6 +msgid "Etunimi" +msgstr "" + +#: members/templates/email_application_submit.html:7 +msgid "Sukunimi" +msgstr "" + +#: members/templates/email_application_submit.html:8 +msgid "Sähköposti" +msgstr "" + +#: members/templates/email_application_submit.html:9 +msgid "Kotipaikkakunta" +msgstr "" + +#: members/templates/email_application_submit.html:10 +msgid "AYY:n jäsen" +msgstr "" + +#: members/templates/email_application_submit.html:11 +msgid "Haluan jäsenmailin" +msgstr "" + +#: members/templates/email_application_submit.html:13 +msgid "" +"Saat sähköpostiisi tiedon, kun sinut on hallituksen kokouksessa hyväksytty " +"jäseneksi" +msgstr "" + +#: members/templates/email_application_submit.html:15 +#, fuzzy +#| msgid "Muista myös maksaa jäsenmaksusi!" +msgid "Muistathan maksaa jäsenmaksun! Alla maksutiedot" +msgstr "Muista myös maksaa jäsenmaksusi!" + +#: members/templates/email_application_submit.html:17 +msgid "Saaja" +msgstr "" + +#: members/templates/email_application_submit.html:18 +msgid "Tilinumero" +msgstr "" + +#: members/templates/email_application_submit.html:20 +msgid "Viite" +msgstr "" + +#: members/templates/email_application_submit.html:21 +msgid "Summa" +msgstr "" + #: members/templates/member_add.html:15 members/templates/member_edit.html:18 #: members/templates/payment_add.html:20 members/templates/payment_edit.html:18 msgid "Save" @@ -800,39 +903,57 @@ msgstr "Maksutapahtumia:" msgid "Language" msgstr "Kieli" -#: members/templates/settings.html:20 sikweb/base.py:248 +#: members/templates/settings.html:20 sikweb/base.py:255 msgid "Finnish" msgstr "suomi" -#: members/templates/settings.html:21 sikweb/base.py:249 +#: members/templates/settings.html:21 sikweb/base.py:256 msgid "English" msgstr "englanti" -#: members/views/applications.py:51 members/views/applications.py:112 -#: members/views/applications.py:137 +#: members/views/applications.py:54 members/views/applications.py:125 +#: members/views/applications.py:150 msgid "No application id specified" msgstr "Hakemuksen ID ei määritelty" -#: members/views/applications.py:71 +#: members/views/applications.py:74 msgid "Application missing 'id' field." msgstr "Hakemuksen ID ei määritelty." -#: members/views/applications.py:80 +#: members/views/applications.py:83 msgid "Email {} is already in use by a member. Application cannot be accepted." msgstr "Sähköpostiosoite {} on jo käytössä. Hakemusta ei hyväksytty." -#: members/views/applications.py:91 +#: members/views/applications.py:94 msgid "Successfully accepted application" msgstr "Onnistuneesti hyväksyttiin hakemus" -#: members/views/applications.py:116 +#: members/views/applications.py:97 +msgid "Jäsenhakemuksesi Sähköinsinöörikiltaan on hyväksytty!" +msgstr "" + +#: members/views/applications.py:129 msgid "Successfully deleted application" msgstr "Onnistuneesti poistettiin hakemus" -#: members/views/applications.py:126 +#: members/views/applications.py:139 msgid "Could not delete application object" msgstr "Hakemusobjektia ei voitu poistaa" +#: members/views/applications.py:177 +msgid "Jäsenhakemuksesi Sähköinsinöörikiltaan on lähetetty onnistuneesti!" +msgstr "" + +#: members/views/applications.py:182 members/views/applications.py:183 +msgid "Kyllä" +msgstr "" + +#: members/views/applications.py:182 members/views/applications.py:183 +#, fuzzy +#| msgid "Edit" +msgid "Ei" +msgstr "Muokkaa" + #: members/views/members.py:86 members/views/members.py:188 #: members/views/members.py:212 msgid "No member id specified" @@ -927,10 +1048,6 @@ msgstr "Sarja" msgid "Ohlhafv challenge: {} vs. {}" msgstr "Ohlhafv-haaste: {} vs. {}" -#: ohlhafv/templates/email.html:2 -msgid "Moikka" -msgstr "" - #: ohlhafv/templates/email.html:4 msgid "on haastanut sinut oluenjuontimittelöön" msgstr "" @@ -940,7 +1057,7 @@ msgid "-sarjassa" msgstr "" #: ohlhafv/templates/email.html:8 -msgid "Muistattehan vahvistaa haasteen paikan päällä Smökissä torstaina 15.2" +msgid "Muistattehan vahvistaa haasteen paikan päällä Smökissä torstaina 14.2" msgstr "" #: ohlhafv/templates/email.html:10 @@ -971,7 +1088,7 @@ msgstr "Haasta kaverisi mittelöön!" msgid "Challenge" msgstr "Haasta" -#: ohlhafv/views.py:42 +#: ohlhafv/views.py:43 msgid "Sinut on haastettu Øhlhäfviin!" msgstr "" @@ -1000,91 +1117,95 @@ msgstr "Tunnisteet" msgid "Tag: {}" msgstr "Tunniste: {}" -#: webapp/models.py:52 +#: webapp/models.py:53 msgid "Feed: {}" msgstr "Uutinen: {}" -#: webapp/models.py:55 +#: webapp/models.py:56 msgid "Feed" msgstr "Uutinen" -#: webapp/models.py:56 +#: webapp/models.py:57 msgid "Feeds" msgstr "Uutiset" -#: webapp/models.py:68 +#: webapp/models.py:70 msgid "Event: {}" msgstr "Tapahtuma: {}" -#: webapp/models.py:71 +#: webapp/models.py:73 msgid "Event" msgstr "Tapahtuma" -#: webapp/models.py:82 +#: webapp/models.py:84 msgid "Template questions: {}" msgstr "Vakiokysymykset: {}" -#: webapp/models.py:85 +#: webapp/models.py:87 msgid "Template question" msgstr "Vakiokysymys" -#: webapp/models.py:86 +#: webapp/models.py:88 msgid "Template questions" msgstr "Vakiokysymykset" -#: webapp/models.py:98 +#: webapp/models.py:102 +msgid "#{} {}" +msgstr "" + +#: webapp/models.py:105 msgid "Signup form" msgstr "Ilmoittautumislomake" -#: webapp/models.py:99 +#: webapp/models.py:106 msgid "Signup forms" msgstr "Ilmoittautumislomakkeet" -#: webapp/models.py:108 +#: webapp/models.py:115 msgid "Sign-ups: {}" msgstr "Ilmoittautumiset: {}" -#: webapp/models.py:111 +#: webapp/models.py:118 msgid "Sign-up" msgstr "Ilmoittautuminen" -#: webapp/models.py:112 +#: webapp/models.py:119 msgid "Sign-ups" msgstr "Ilmoittautumiset" -#: webapp/models.py:123 +#: webapp/models.py:130 msgid "board member" msgstr "hallituksen jäsen" -#: webapp/models.py:141 +#: webapp/models.py:148 msgid "Committee" msgstr "Toimikunta" -#: webapp/models.py:142 +#: webapp/models.py:149 msgid "Committees" msgstr "Toimikunnat" -#: webapp/models.py:145 +#: webapp/models.py:152 msgid "Committee: {}" msgstr "Toimikunta: {}" -#: webapp/models.py:165 +#: webapp/models.py:172 msgid "Role" msgstr "Rooli" -#: webapp/models.py:168 +#: webapp/models.py:175 msgid "Start date" msgstr "Alkupäivämäärä" -#: webapp/models.py:169 +#: webapp/models.py:176 msgid "End date" msgstr "Loppupäivämäärä" -#: webapp/models.py:179 +#: webapp/models.py:186 msgid "Official" msgstr "Toimihenkilö" -#: webapp/models.py:180 +#: webapp/models.py:187 msgid "Officials" msgstr "Toimihenkilöt" @@ -1132,6 +1253,9 @@ msgstr "Sössö" msgid "Corporate" msgstr "Yritys" +#~ msgid "HSL timetables" +#~ msgstr "HSL-aikataulut" + #~ msgid "Culture" #~ msgstr "Kulttuuri" diff --git a/members/templates/application_form_base.html b/members/templates/application_form_base.html index ee02499..d8d6f76 100644 --- a/members/templates/application_form_base.html +++ b/members/templates/application_form_base.html @@ -8,7 +8,7 @@ - + Jäsenhakemus diff --git a/members/templates/application_success.html b/members/templates/application_success.html index 66078b7..57b7a19 100644 --- a/members/templates/application_success.html +++ b/members/templates/application_success.html @@ -6,5 +6,6 @@ {% block content %}

{% trans "Hienoa! Jäsenhakemuksesi on nyt lähetetty." %}

+

{% trans "Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä sik-vtmk@list.ayy.fi jos viestiä ei näy." %}

{% trans "Takaisin Sähköinsinöörikillan web-sivuille" %}

{% endblock content %} diff --git a/members/templates/base.html b/members/templates/base.html index e9f376f..7fa11c5 100644 --- a/members/templates/base.html +++ b/members/templates/base.html @@ -11,7 +11,7 @@ - + {% trans "Member register" %} diff --git a/members/templates/email_application_accept.html b/members/templates/email_application_accept.html new file mode 100644 index 0000000..23a0bd9 --- /dev/null +++ b/members/templates/email_application_accept.html @@ -0,0 +1,11 @@ +{% load i18n %} +{% trans "Moi" %} {{ first_name }}! + +{% trans "Onnittelut! Sinut on hyväksytty Sähköinsinöörikillan jäseneksi." %} + +{% trans "Käy kurkkaamassa killan nettisivuilta" %} (https://sik.ayy.fi) {% trans "tulevia tapahtumia ja piipahda kiltahuoneella tutustumassa uusiin kiltatovereihisi!" %} + +{% trans "Liity myös killan TG-kanaville" %}: +{% trans "SIK" %}: https://t.me/joinchat/A6EViD5FCWLxPcXCggY7hw +{% trans "SIK-fuksit 2019" %}: http://tinyurl.com/sikfuksit19-tg +{% trans "SIK-fuksit 2019 -tiedotuskanava" %}: http://tinyurl.com/sikfuksit19-tiedotus diff --git a/members/templates/email_application_submit.html b/members/templates/email_application_submit.html new file mode 100644 index 0000000..68046e5 --- /dev/null +++ b/members/templates/email_application_submit.html @@ -0,0 +1,21 @@ +{% load i18n %} +{% trans "Moikka" %} {{ application.first_name }}, + +{% trans "Sait tämän viestin, sillä olet lähettänyt hakemuksen Aalto-yliopiston Sähköinsinöörikillan jäseneksi alla olevin tiedoin. Siistiä!" %} + +{% trans "Etunimi" %}: {{ application.first_name }} +{% trans "Sukunimi" %}: {{ application.last_name }} +{% trans "Sähköposti" %}: {{ application.email }} +{% trans "Kotipaikkakunta" %}: {{ application.POR }} +{% trans "AYY:n jäsen" %}: {{ ayy }} +{% trans "Haluan jäsenmailin" %}: {{ jas }} + +{% trans "Saat sähköpostiisi tiedon, kun sinut on hallituksen kokouksessa hyväksytty jäseneksi" %}. + +{% trans "Muistathan maksaa jäsenmaksun! Alla maksutiedot" %}: + +{% trans "Saaja" %}: Aalto-yliopiston Sähköinsinöörikilta ry +{% trans "Tilinumero" %}: FI97 1309 3000 1118 23 +BIC: NDEAFIHH +{% trans "Viite" %}: 1313 +{% trans "Summa" %}: 8 € diff --git a/members/views/applications.py b/members/views/applications.py index eb3b2f1..104e113 100644 --- a/members/views/applications.py +++ b/members/views/applications.py @@ -7,10 +7,13 @@ from django.core.mail import send_mail from django.conf import settings from django.utils.translation import ugettext as _ from django.forms.models import model_to_dict +from django.template.loader import render_to_string import logging import html +from webapp.utils import send_email + from members.views.utils import * from members.tables import RequestTable from members.forms import ApplicationForm @@ -90,6 +93,16 @@ def application_accept(request, *args, **kwargs): .format(form)) notification = "{} {}.".format(_("Successfully accepted application"), str(application)) + + subject = _('Jäsenhakemuksesi Sähköinsinöörikiltaan on hyväksytty!') + + message = render_to_string( + 'members:email_application_accept.html', { + 'first_name': application.first_name + } + ) + send_email(member.email, subject, message) + return HttpResponseRedirect( '/members/list?notification={}'.format(html.escape(notification))) except Exception as ex: @@ -152,13 +165,26 @@ def application_form(request, *args, **kwargs): @ensure_csrf_cookie @require_http_methods(["POST"]) -@login_required(login_url='/admin/login') -@permission_required('members.delete_request', raise_exception=True) def application_submit(request, *args, **kwargs): """Submit member application""" form = ApplicationForm(request.POST) if form.is_valid(): form.save() - return render(request, 'application_success.html', {}) + try: + application = form.instance + email = form.cleaned_data.get('email', '') + + subject = _('Jäsenhakemuksesi Sähköinsinöörikiltaan on lähetetty onnistuneesti!') + + message = render_to_string( + 'members:email_application_submit.html', { + 'application': application, + 'ayy': _('Kyllä') if application.AYY else _('Ei'), + 'jas': _('Kyllä') if application.jas else _('Ei') + } + ) + send_email(email, subject, message) + finally: + return render(request, 'application_success.html', {}) else: return error_view(request, form.errors) diff --git a/ohlhafv/templates/tgmsg.tpl b/ohlhafv/templates/tgmsg.tpl new file mode 100644 index 0000000..90fae52 --- /dev/null +++ b/ohlhafv/templates/tgmsg.tpl @@ -0,0 +1,8 @@ +Uusi Ohlhafv haaste! +==================== +Haastaja: {{ challenge.challenger }} +Uhri: {{ challenge.victim }} +Sarja: {{ challenge.get_series_display }} +Terveiset: {{ challenge.message }} + +Käy kurkkaamassa muutkin haasteet osoitteessa: {{ url }} \ No newline at end of file diff --git a/ohlhafv/views.py b/ohlhafv/views.py index 69e85b2..632ab4e 100644 --- a/ohlhafv/views.py +++ b/ohlhafv/views.py @@ -19,6 +19,7 @@ from ohlhafv.models import OhlhafvChallenge from ohlhafv.forms import OhlhafvForm from ohlhafv.tables import OhlhafvTable from webapp.utils import send_email +from kaehmy.tgbot import TelegramBot @require_http_methods(["GET"]) @@ -48,6 +49,17 @@ def ohlhafv_submit(request, *args, **kwargs): } ) send_email(email, subject, message) + + try: + tg_message = render_to_string( + 'ohlhafv:tgmsg.tpl', { + 'challenge': challenge, + 'url': url}) + bot = TelegramBot() + bot.broadcast(tg_message) + except Exception: # tg spam is not critical. Ignore on failure + pass + logging.debug( 'Sent ohlhafv email to recipient <{}>'.format(email)) else: diff --git a/package-lock.json b/package-lock.json index 251b467..7ac6d9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "requires": { - "acorn": "^3.0.4" + "acorn": "3.3.0" }, "dependencies": { "acorn": { @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, "ajv-keywords": { @@ -58,8 +58,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "argparse": { @@ -67,7 +67,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -75,7 +75,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "arr-flatten": { @@ -93,7 +93,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -131,9 +131,9 @@ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, "bail": { @@ -151,13 +151,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -165,7 +165,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -173,7 +173,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -181,7 +181,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -189,9 +189,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -216,7 +216,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -225,9 +225,9 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.3" } }, "buffer-from": { @@ -240,15 +240,15 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" }, "dependencies": { "isobject": { @@ -263,7 +263,7 @@ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "requires": { - "callsites": "^0.2.0" + "callsites": "0.2.0" } }, "callsites": { @@ -286,11 +286,11 @@ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "character-entities": { @@ -318,15 +318,15 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1" } }, "circular-json": { @@ -339,10 +339,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -350,7 +350,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "isobject": { @@ -365,7 +365,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "1.0.1" } }, "cli-width": { @@ -393,8 +393,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color-convert": { @@ -425,10 +425,10 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "copy-descriptor": { @@ -446,7 +446,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "0.10.46" } }, "debug": { @@ -477,8 +477,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -486,7 +486,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -494,7 +494,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -502,9 +502,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -524,13 +524,13 @@ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" } }, "doctrine": { @@ -538,7 +538,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { - "esutils": "^2.0.2" + "esutils": "2.0.2" } }, "error-ex": { @@ -546,7 +546,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es5-ext": { @@ -554,9 +554,9 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -564,9 +564,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-symbol": "3.1.1" } }, "es6-map": { @@ -574,12 +574,12 @@ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" } }, "es6-set": { @@ -587,11 +587,11 @@ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "event-emitter": "0.3.5" } }, "es6-symbol": { @@ -599,8 +599,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.46" } }, "es6-weak-map": { @@ -608,10 +608,10 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" } }, "escape-string-regexp": { @@ -624,10 +624,10 @@ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "eslint": { @@ -635,41 +635,41 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "espree": "^3.4.0", - "esquery": "^1.0.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "2.1.0", + "escope": "3.6.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.3", + "globals": "9.18.0", + "ignore": "3.3.10", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.19.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.12.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.11", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" } }, "espree": { @@ -677,8 +677,8 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "5.7.3", + "acorn-jsx": "3.0.1" } }, "esprima": { @@ -691,7 +691,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "4.2.0" } }, "esrecurse": { @@ -699,7 +699,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -717,8 +717,8 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.46" } }, "exit-hook": { @@ -731,7 +731,7 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "expand-range": { @@ -739,7 +739,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.4" } }, "extend": { @@ -752,8 +752,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -761,7 +761,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -771,7 +771,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "fast-levenshtein": { @@ -784,7 +784,7 @@ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.2.tgz", "integrity": "sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==", "requires": { - "format": "^0.2.2" + "format": "0.2.2" } }, "figures": { @@ -792,8 +792,8 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" } }, "file-entry-cache": { @@ -801,8 +801,8 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "1.3.0", + "object-assign": "4.1.1" } }, "filename-regex": { @@ -815,11 +815,11 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.0", + "repeat-element": "1.1.3", + "repeat-string": "1.6.1" } }, "flat-cache": { @@ -827,10 +827,10 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" } }, "fn-name": { @@ -848,7 +848,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "format": { @@ -861,7 +861,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fs.realpath": { @@ -875,8 +875,8 @@ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.11.1", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -886,7 +886,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -904,11 +905,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -921,15 +924,18 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -1032,7 +1038,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -1042,6 +1049,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -1054,17 +1062,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -1081,6 +1092,7 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -1153,7 +1165,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -1163,6 +1176,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1" } @@ -1238,7 +1252,8 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "bundled": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -1268,6 +1283,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -1285,6 +1301,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1323,11 +1340,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "yallist": { "version": "3.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -1336,7 +1355,7 @@ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "requires": { - "is-property": "^1.0.2" + "is-property": "1.0.2" } }, "generate-object-property": { @@ -1344,7 +1363,7 @@ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "requires": { - "is-property": "^1.0.0" + "is-property": "1.0.2" } }, "get-value": { @@ -1357,12 +1376,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-base": { @@ -1370,8 +1389,8 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "glob-parent": "2.0.0", + "is-glob": "2.0.1" } }, "glob-parent": { @@ -1379,7 +1398,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "globals": { @@ -1392,12 +1411,12 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "graceful-fs": { @@ -1410,7 +1429,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-flag": { @@ -1423,9 +1442,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -1440,8 +1459,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "is-number": { @@ -1449,7 +1468,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1457,7 +1476,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1467,7 +1486,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1487,8 +1506,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -1506,19 +1525,19 @@ "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.11", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" } }, "interpret": { @@ -1536,7 +1555,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-alphabetical": { @@ -1554,8 +1573,8 @@ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "is-alphabetical": "1.0.2", + "is-decimal": "1.0.2" } }, "is-arrayish": { @@ -1568,7 +1587,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.12.0" } }, "is-buffer": { @@ -1581,7 +1600,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-decimal": { @@ -1594,9 +1613,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -1621,7 +1640,7 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { @@ -1639,7 +1658,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-glob": { @@ -1647,7 +1666,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "is-hexadecimal": { @@ -1670,11 +1689,11 @@ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "generate-function": "2.3.1", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" } }, "is-number": { @@ -1682,7 +1701,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-object": { @@ -1700,7 +1719,7 @@ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -1708,7 +1727,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, "is-plain-obj": { @@ -1721,7 +1740,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -1789,8 +1808,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "json-stable-stringify": { @@ -1798,7 +1817,7 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { - "jsonify": "~0.0.0" + "jsonify": "0.0.0" } }, "jsonify": { @@ -1816,7 +1835,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "levn": { @@ -1824,8 +1843,8 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "load-plugin": { @@ -1833,8 +1852,8 @@ "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-2.2.2.tgz", "integrity": "sha512-FYzamtURIJefQykZGtiClYuZkJBUKzmx8Tc74y8JGAulDzbzVm/C+w/MbAljHRr+REL0cRzy3WgnHE+T8gce5g==", "requires": { - "npm-prefix": "^1.2.0", - "resolve-from": "^4.0.0" + "npm-prefix": "1.2.0", + "resolve-from": "4.0.0" }, "dependencies": { "resolve-from": { @@ -1864,7 +1883,7 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "markdown-escapes": { @@ -1897,7 +1916,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz", "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==", "requires": { - "unist-util-visit": "^1.1.0" + "unist-util-visit": "1.4.0" } }, "mdast-util-heading-style": { @@ -1915,19 +1934,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } }, "minimatch": { @@ -1935,7 +1954,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -1948,8 +1967,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -1957,7 +1976,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -1991,17 +2010,17 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "arr-diff": { @@ -2036,7 +2055,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "npm-prefix": { @@ -2044,9 +2063,9 @@ "resolved": "https://registry.npmjs.org/npm-prefix/-/npm-prefix-1.2.0.tgz", "integrity": "sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=", "requires": { - "rc": "^1.1.0", - "shellsubstitute": "^1.1.0", - "untildify": "^2.1.0" + "rc": "1.2.8", + "shellsubstitute": "1.2.0", + "untildify": "2.1.0" } }, "number-is-nan": { @@ -2064,9 +2083,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -2074,7 +2093,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -2084,7 +2103,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -2099,8 +2118,8 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "for-own": "0.1.5", + "is-extendable": "0.1.1" } }, "object.pick": { @@ -2108,7 +2127,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -2123,7 +2142,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -2136,12 +2155,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "os-homedir": { @@ -2154,12 +2173,12 @@ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "character-entities": "1.2.2", + "character-entities-legacy": "1.1.2", + "character-reference-invalid": "1.1.2", + "is-alphanumerical": "1.0.2", + "is-decimal": "1.0.2", + "is-hexadecimal": "1.0.2" } }, "parse-glob": { @@ -2167,10 +2186,10 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" } }, "parse-json": { @@ -2178,7 +2197,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "pascalcase": { @@ -2216,7 +2235,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "plur": { @@ -2224,7 +2243,7 @@ "resolved": "https://registry.npmjs.org/plur/-/plur-3.0.1.tgz", "integrity": "sha512-lJl0ojUynAM1BZn58Pas2WT/TXeC1+bS+UqShl0x9+49AtOn7DixRXVzaC8qrDOIxNDmepKnLuMTH7NQmkX0PA==", "requires": { - "irregular-plurals": "^2.0.0" + "irregular-plurals": "2.0.0" } }, "pluralize": { @@ -2262,9 +2281,9 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { @@ -2284,10 +2303,10 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -2302,13 +2321,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -2316,9 +2335,9 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "graceful-fs": "4.1.11", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" }, "dependencies": { "arr-diff": { @@ -2336,16 +2355,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -2353,7 +2372,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2363,13 +2382,13 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2377,7 +2396,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -2385,7 +2404,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -2393,7 +2412,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -2401,7 +2420,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -2411,7 +2430,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -2419,7 +2438,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -2429,9 +2448,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -2446,14 +2465,14 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -2461,7 +2480,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -2469,7 +2488,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2479,10 +2498,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -2490,7 +2509,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2500,7 +2519,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2508,7 +2527,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2516,9 +2535,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "is-number": { @@ -2526,7 +2545,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -2534,7 +2553,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -2554,19 +2573,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } } } @@ -2576,8 +2595,8 @@ "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", "mute-stream": "0.0.5" } }, @@ -2586,7 +2605,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "requires": { - "resolve": "^1.1.6" + "resolve": "1.8.1" } }, "regex-cache": { @@ -2594,7 +2613,7 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -2602,8 +2621,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "remark": { @@ -2611,9 +2630,9 @@ "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz", "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==", "requires": { - "remark-parse": "^4.0.0", - "remark-stringify": "^4.0.0", - "unified": "^6.0.0" + "remark-parse": "4.0.0", + "remark-stringify": "4.0.0", + "unified": "6.2.0" } }, "remark-cli": { @@ -2621,9 +2640,9 @@ "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-4.0.0.tgz", "integrity": "sha512-q5GMjGypUS4rTZb3WfMQcGpClSC38A9Ogg1h/HB2GLsqypDetmAfy0X+tuJ6JeyCPVOXXCDgsDCQq4QPqKmxBA==", "requires": { - "markdown-extensions": "^1.1.0", - "remark": "^8.0.0", - "unified-args": "^4.0.0" + "markdown-extensions": "1.1.1", + "remark": "8.0.0", + "unified-args": "4.0.0" } }, "remark-lint": { @@ -2631,7 +2650,7 @@ "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-6.0.2.tgz", "integrity": "sha512-zrIx7InZLLOUYUViT6lSa8T80pDyl3Ywvliog+4hoc7LoiJZRV74ejq+RBZK70bg/p2dU/CV6ycedgypFFePPg==", "requires": { - "remark-message-control": "^4.0.0" + "remark-message-control": "4.1.0" } }, "remark-lint-final-newline": { @@ -2639,7 +2658,7 @@ "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-1.0.2.tgz", "integrity": "sha512-hW/lbDwVKtME3jIcJWJ16wBtoJdFPWIiu0fEI93yzNTjeB1g3VSWJp66dHbtCLYwquRS5fr8UlGx7JxIu1kiuA==", "requires": { - "unified-lint-rule": "^1.0.0" + "unified-lint-rule": "1.0.3" } }, "remark-lint-hard-break-spaces": { @@ -2647,10 +2666,10 @@ "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.3.tgz", "integrity": "sha512-GiC0uXeFwef6/Pfo+EYBN0WIVlEFffh+9TdeJ4uLt89ZweaRVDPCTJQqkkuXoiXSPnZGD7cGHdkWCfXU1PaU7Q==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-lint-list-item-bullet-indent": { @@ -2658,11 +2677,11 @@ "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-1.0.2.tgz", "integrity": "sha512-zvyQD6mJLRratZjk4Dw7D4vh73L43NXNCcap/6TxcmU9SKO7dXzoh8Ap9tyaFLic0LnHFc3Gx1pqYiPQ7PnL2g==", "requires": { - "plur": "^3.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "plur": "3.0.1", + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-lint-list-item-indent": { @@ -2670,11 +2689,11 @@ "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.2.tgz", "integrity": "sha512-ogCCrO8nyuM/0k1bo+O7Ww0S08XxHA9sHh5VdhLwffCTCyOPDoxL1zWCIrAgzPBFZkgjXDQHsOxeUBi5I1ZFcA==", "requires": { - "plur": "^3.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "plur": "3.0.1", + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-auto-link-without-protocol": { @@ -2682,11 +2701,11 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.2.tgz", "integrity": "sha512-3GtkSxOyd6we4b8JdtJsNgt8+3UN+hpw1UiMoE9X96ahc1rqsCFm6miorNUnF/gfPQ1liHBvZUed2SIenDmpkg==", "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "mdast-util-to-string": "1.0.5", + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-blockquote-without-marker": { @@ -2694,11 +2713,11 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.2.tgz", "integrity": "sha512-jkfZ4hFiviZttEo7Ac7GZWFgMQ/bdVPfSluLeuf+qwL8sQvR4ClklKJ0Xbkk3cLRjvlGsc8U8uZR8qqH5MSLoA==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1", - "vfile-location": "^2.0.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0", + "vfile-location": "2.0.3" } }, "remark-lint-no-duplicate-definitions": { @@ -2706,11 +2725,11 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-1.0.2.tgz", "integrity": "sha512-e5tSoIBChG3UCz4eJ+JPKV915iNeIeT7uKBKzXBPxnMcEgQaT3V7DBDdN8Wn1oPw9fLp/5AjDN5l9x7iddLsRw==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-stringify-position": "^1.1.2", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-stringify-position": "1.1.2", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-heading-content-indent": { @@ -2718,12 +2737,12 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-1.0.2.tgz", "integrity": "sha512-g2MVmJhHbfFungca5WGWVB9bBY4YTrY6og20U+6DxkdS4ngoc8ezXUt8zV1HHEn0M/GdKr9F7fYhXcekJd/qaw==", "requires": { - "mdast-util-heading-style": "^1.0.2", - "plur": "^3.0.0", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "mdast-util-heading-style": "1.0.4", + "plur": "3.0.1", + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-inline-padding": { @@ -2731,10 +2750,10 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.2.tgz", "integrity": "sha512-SHYqEH27yxzgcXSyaIzvqImvktDhXGltRSOEhAHiL2nJktuPt3nosFfGy4/oKAJMWJ2N3aMudXq/zuw1dAkQSg==", "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^1.1.1" + "mdast-util-to-string": "1.0.5", + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-literal-urls": { @@ -2742,11 +2761,11 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.2.tgz", "integrity": "sha512-+mWZIJA4yAqpKIclcFP5wRy/6hxcPnfU9Xmgp4fR7OD4JQ4JHkKq9O7MUbda14PLez1aMX+Is0O0hWI7OuqsSw==", "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "mdast-util-to-string": "1.0.5", + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-shortcut-reference-image": { @@ -2754,9 +2773,9 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.2.tgz", "integrity": "sha512-IVYv5pgyf70jYcrn+BNHVO37BuQJg26rFOLzi2mj+/8EdFpolJiJcTvkChJgz5yip7317DmQQSNLX6gCExuDrQ==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-shortcut-reference-link": { @@ -2764,9 +2783,9 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.3.tgz", "integrity": "sha512-v5mk4wYQL+YRmlOTqi8avpzhoGZg+P42dDRda2jedysDIx7TJBEXUH6oMFEbo/qV6PMmtr7fr066M3RrOrLpiQ==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-undefined-references": { @@ -2774,9 +2793,9 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-1.0.2.tgz", "integrity": "sha512-te5rmQvdMg2Qld09Jzh4BlpjGQhbwG0EIlYVX6aE/YnwwrIldOgqLrW8x49XTyEMNOL8j/Bjxd2FX+sRfeldRw==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-visit": "1.4.0" } }, "remark-lint-no-unused-definitions": { @@ -2784,9 +2803,9 @@ "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-1.0.2.tgz", "integrity": "sha512-Qv4J2hI2S0NJdrlFuQhBVOlGNUSBLpe+2VBm/hSJAnBE7FW2ZGkVwwrs9h7HdZ/vW3LqfBrNcTKTVw+5ZzWTiA==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-visit": "1.4.0" } }, "remark-lint-ordered-list-marker-style": { @@ -2794,10 +2813,10 @@ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.2.tgz", "integrity": "sha512-4EHuHxZqy8IT4k+4Vc8P38I34AiZfgl07fS5/iqGhCdoSMCvvxdOuzTWTgpDFbx/W2QpHelBfJ+FtOp+E0J4Lg==", "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^1.1.1" + "unified-lint-rule": "1.0.3", + "unist-util-generated": "1.1.2", + "unist-util-position": "3.0.1", + "unist-util-visit": "1.4.0" } }, "remark-message-control": { @@ -2805,9 +2824,9 @@ "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-4.1.0.tgz", "integrity": "sha512-e1dszks4YKY7hLAkhS2367jBjBpAfvi+kVgSN/tOFrdp3qxITjiNR5fOFnyYF8vvorkQ9uxlKJoZUOW8T7rKDg==", "requires": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^1.0.0", - "xtend": "^4.0.1" + "mdast-comment-marker": "1.0.3", + "unified-message-control": "1.0.4", + "xtend": "4.0.1" } }, "remark-parse": { @@ -2815,21 +2834,21 @@ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", + "collapse-white-space": "1.0.4", + "is-alphabetical": "1.0.2", + "is-decimal": "1.0.2", + "is-whitespace-character": "1.0.2", + "is-word-character": "1.0.2", + "markdown-escapes": "1.0.2", + "parse-entities": "1.2.0", + "repeat-string": "1.6.1", + "state-toggle": "1.0.1", "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" + "trim-trailing-lines": "1.1.1", + "unherit": "1.1.1", + "unist-util-remove-position": "1.1.2", + "vfile-location": "2.0.3", + "xtend": "4.0.1" } }, "remark-preset-lint-recommended": { @@ -2837,22 +2856,22 @@ "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-3.0.2.tgz", "integrity": "sha512-os4YNWLbkorjvDHVB4o+zCCufZLzGoD4Iwdk7SV7bSIZurUTrMp/ZrpNytyetN9ugIMXuHbWJUE+dF0ND+WorQ==", "requires": { - "remark-lint": "^6.0.0", - "remark-lint-final-newline": "^1.0.0", - "remark-lint-hard-break-spaces": "^1.0.0", - "remark-lint-list-item-bullet-indent": "^1.0.0", - "remark-lint-list-item-indent": "^1.0.0", - "remark-lint-no-auto-link-without-protocol": "^1.0.0", - "remark-lint-no-blockquote-without-marker": "^2.0.0", - "remark-lint-no-duplicate-definitions": "^1.0.0", - "remark-lint-no-heading-content-indent": "^1.0.0", - "remark-lint-no-inline-padding": "^1.0.0", - "remark-lint-no-literal-urls": "^1.0.0", - "remark-lint-no-shortcut-reference-image": "^1.0.0", - "remark-lint-no-shortcut-reference-link": "^1.0.0", - "remark-lint-no-undefined-references": "^1.0.0", - "remark-lint-no-unused-definitions": "^1.0.0", - "remark-lint-ordered-list-marker-style": "^1.0.0" + "remark-lint": "6.0.2", + "remark-lint-final-newline": "1.0.2", + "remark-lint-hard-break-spaces": "1.0.3", + "remark-lint-list-item-bullet-indent": "1.0.2", + "remark-lint-list-item-indent": "1.0.2", + "remark-lint-no-auto-link-without-protocol": "1.0.2", + "remark-lint-no-blockquote-without-marker": "2.0.2", + "remark-lint-no-duplicate-definitions": "1.0.2", + "remark-lint-no-heading-content-indent": "1.0.2", + "remark-lint-no-inline-padding": "1.0.2", + "remark-lint-no-literal-urls": "1.0.2", + "remark-lint-no-shortcut-reference-image": "1.0.2", + "remark-lint-no-shortcut-reference-link": "1.0.3", + "remark-lint-no-undefined-references": "1.0.2", + "remark-lint-no-unused-definitions": "1.0.2", + "remark-lint-ordered-list-marker-style": "1.0.2" } }, "remark-stringify": { @@ -2860,20 +2879,20 @@ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz", "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==", "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^1.1.0", - "mdast-util-compact": "^1.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^1.0.1", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "ccount": "1.0.3", + "is-alphanumeric": "1.0.0", + "is-decimal": "1.0.2", + "is-whitespace-character": "1.0.2", + "longest-streak": "2.0.2", + "markdown-escapes": "1.0.2", + "markdown-table": "1.1.2", + "mdast-util-compact": "1.0.2", + "parse-entities": "1.2.0", + "repeat-string": "1.6.1", + "state-toggle": "1.0.1", + "stringify-entities": "1.3.2", + "unherit": "1.1.1", + "xtend": "4.0.1" } }, "remove-trailing-separator": { @@ -2901,8 +2920,8 @@ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" + "caller-path": "0.1.0", + "resolve-from": "1.0.1" } }, "resolve": { @@ -2910,7 +2929,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.6" } }, "resolve-from": { @@ -2928,8 +2947,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "exit-hook": "1.1.1", + "onetime": "1.1.0" } }, "ret": { @@ -2942,7 +2961,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "^7.0.5" + "glob": "7.1.3" } }, "run-async": { @@ -2950,7 +2969,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "requires": { - "once": "^1.3.0" + "once": "1.4.0" } }, "rx-lite": { @@ -2968,7 +2987,7 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "set-value": { @@ -2976,10 +2995,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -2987,7 +3006,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2997,9 +3016,9 @@ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "glob": "7.1.3", + "interpret": "1.1.0", + "rechoir": "0.6.2" } }, "shellsubstitute": { @@ -3022,14 +3041,14 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -3037,7 +3056,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -3045,7 +3064,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3055,9 +3074,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -3065,7 +3084,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -3073,7 +3092,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -3081,7 +3100,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -3089,9 +3108,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -3111,7 +3130,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "source-map": { @@ -3124,11 +3143,11 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-url": { @@ -3141,7 +3160,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -3159,8 +3178,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -3168,7 +3187,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -3178,9 +3197,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -3188,7 +3207,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "stringify-entities": { @@ -3196,10 +3215,10 @@ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "character-entities-html4": "1.1.2", + "character-entities-legacy": "1.1.2", + "is-alphanumerical": "1.0.2", + "is-hexadecimal": "1.0.2" } }, "strip-ansi": { @@ -3207,7 +3226,7 @@ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -3230,12 +3249,12 @@ "resolved": "http://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.11", "slice-ansi": "0.0.4", - "string-width": "^2.0.0" + "string-width": "2.1.1" }, "dependencies": { "ansi-regex": { @@ -3253,8 +3272,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -3262,7 +3281,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -3282,7 +3301,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -3290,10 +3309,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -3301,8 +3320,8 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" }, "dependencies": { "is-number": { @@ -3310,7 +3329,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } } } @@ -3320,9 +3339,9 @@ "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-2.2.0.tgz", "integrity": "sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==", "requires": { - "is-buffer": "^1.1.4", - "vfile": "^2.0.0", - "x-is-function": "^1.0.4" + "is-buffer": "1.1.6", + "vfile": "2.3.0", + "x-is-function": "1.0.4" } }, "trim": { @@ -3345,7 +3364,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "typedarray": { @@ -3358,8 +3377,8 @@ "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" + "inherits": "2.0.3", + "xtend": "4.0.1" } }, "unified": { @@ -3367,12 +3386,12 @@ "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" + "bail": "1.0.3", + "extend": "3.0.2", + "is-plain-obj": "1.1.0", + "trough": "1.0.3", + "vfile": "2.3.0", + "x-is-string": "0.1.0" } }, "unified-args": { @@ -3380,12 +3399,12 @@ "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-4.0.0.tgz", "integrity": "sha1-jZubitNHvrN/QwVipixNNhtCIg8=", "requires": { - "camelcase": "^4.0.0", - "chalk": "^2.0.0", - "chokidar": "^1.5.1", - "minimist": "^1.2.0", - "text-table": "^0.2.0", - "unified-engine": "^4.0.0" + "camelcase": "4.1.0", + "chalk": "2.4.1", + "chokidar": "1.7.0", + "minimist": "1.2.0", + "text-table": "0.2.0", + "unified-engine": "4.0.1" }, "dependencies": { "ansi-styles": { @@ -3393,7 +3412,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "chalk": { @@ -3401,9 +3420,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "minimist": { @@ -3416,7 +3435,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -3426,25 +3445,25 @@ "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-4.0.1.tgz", "integrity": "sha1-lpKql/1cTsNoiXeeElFL746GP8M=", "requires": { - "concat-stream": "^1.5.1", - "debug": "^2.2.0", - "fault": "^1.0.0", - "fn-name": "^2.0.1", - "glob": "^7.0.3", - "ignore": "^3.2.0", - "is-empty": "^1.0.0", - "is-hidden": "^1.0.1", - "is-object": "^1.0.1", - "js-yaml": "^3.6.1", - "load-plugin": "^2.0.0", - "parse-json": "^2.2.0", - "to-vfile": "^2.0.0", - "trough": "^1.0.0", - "vfile-reporter": "^4.0.0", - "vfile-statistics": "^1.1.0", - "x-is-function": "^1.0.4", - "x-is-string": "^0.1.0", - "xtend": "^4.0.1" + "concat-stream": "1.6.2", + "debug": "2.6.9", + "fault": "1.0.2", + "fn-name": "2.0.1", + "glob": "7.1.3", + "ignore": "3.3.10", + "is-empty": "1.2.0", + "is-hidden": "1.1.1", + "is-object": "1.0.1", + "js-yaml": "3.12.0", + "load-plugin": "2.2.2", + "parse-json": "2.2.0", + "to-vfile": "2.2.0", + "trough": "1.0.3", + "vfile-reporter": "4.0.0", + "vfile-statistics": "1.1.1", + "x-is-function": "1.0.4", + "x-is-string": "0.1.0", + "xtend": "4.0.1" } }, "unified-lint-rule": { @@ -3452,7 +3471,7 @@ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.3.tgz", "integrity": "sha512-6z+HH3mtlFdj/w3MaQpObrZAd9KRiro370GxBFh13qkV8LYR21lLozA4iQiZPhe7KuX/lHewoGOEgQ4AWrAR3Q==", "requires": { - "wrapped": "^1.0.1" + "wrapped": "1.0.1" } }, "unified-message-control": { @@ -3461,8 +3480,8 @@ "integrity": "sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==", "requires": { "trim": "0.0.1", - "unist-util-visit": "^1.0.0", - "vfile-location": "^2.0.0" + "unist-util-visit": "1.4.0", + "vfile-location": "2.0.3" } }, "union-value": { @@ -3470,10 +3489,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -3481,7 +3500,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -3489,10 +3508,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -3517,7 +3536,7 @@ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", "requires": { - "unist-util-visit": "^1.1.0" + "unist-util-visit": "1.4.0" } }, "unist-util-stringify-position": { @@ -3530,7 +3549,7 @@ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", "requires": { - "unist-util-visit-parents": "^2.0.0" + "unist-util-visit-parents": "2.0.1" } }, "unist-util-visit-parents": { @@ -3538,7 +3557,7 @@ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", "requires": { - "unist-util-is": "^2.1.2" + "unist-util-is": "2.1.2" } }, "unset-value": { @@ -3546,8 +3565,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -3555,9 +3574,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -3587,7 +3606,7 @@ "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", "requires": { - "os-homedir": "^1.0.0" + "os-homedir": "1.0.2" } }, "urix": { @@ -3605,7 +3624,7 @@ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "requires": { - "os-homedir": "^1.0.0" + "os-homedir": "1.0.2" } }, "util-deprecate": { @@ -3618,10 +3637,10 @@ "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", "requires": { - "is-buffer": "^1.1.4", + "is-buffer": "1.1.6", "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" + "unist-util-stringify-position": "1.1.2", + "vfile-message": "1.0.1" } }, "vfile-location": { @@ -3634,7 +3653,7 @@ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz", "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==", "requires": { - "unist-util-stringify-position": "^1.1.1" + "unist-util-stringify-position": "1.1.2" } }, "vfile-reporter": { @@ -3642,11 +3661,11 @@ "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-4.0.0.tgz", "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=", "requires": { - "repeat-string": "^1.5.0", - "string-width": "^1.0.0", - "supports-color": "^4.1.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-statistics": "^1.1.0" + "repeat-string": "1.6.1", + "string-width": "1.0.2", + "supports-color": "4.5.0", + "unist-util-stringify-position": "1.1.2", + "vfile-statistics": "1.1.1" }, "dependencies": { "has-flag": { @@ -3659,7 +3678,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "requires": { - "has-flag": "^2.0.0" + "has-flag": "2.0.0" } } } @@ -3680,7 +3699,7 @@ "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", "requires": { "co": "3.1.0", - "sliced": "^1.0.1" + "sliced": "1.0.1" }, "dependencies": { "co": { @@ -3700,7 +3719,7 @@ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "requires": { - "mkdirp": "^0.5.1" + "mkdirp": "0.5.1" } }, "x-is-function": { diff --git a/readme.md b/readme.md index 808fdf9..5756c8c 100644 --- a/readme.md +++ b/readme.md @@ -26,9 +26,9 @@ Shows the current coffee scale status. Set up your SSH key authentication in GitLab Profile Settings. Then clone the repository and checkout the development branch: -``` -git clone git@git.sahkoinsinoorikilta.fi:vtmk/web2.0.git -cd web2.0 +```bash +git clone git@gitlab.com:sahkoinsinoorikilta/vtmk/web2.0-backend.git +cd web2.0-backend git checkout develop cp scripts/git/pre-push .git/hooks/pre-push # install a script to test code before committing ``` @@ -45,7 +45,7 @@ See [Linux/Mac install instructions](./linux_install.md) Run the following `manage.py` commands. Do not run these in production without thinking! -``` +```bash python manage.py createdefaultadmin # creates an admin user python manage.py initialize # creates user groups python manage.py createdummydata # creates dummy members to the member register @@ -55,7 +55,7 @@ python manage.py createdummydata # creates dummy members to the member regis ### Use runserver command -``` +```bash python manage.py runserver 0.0.0.0:8000 ``` @@ -71,7 +71,7 @@ Run the project in production with gunicorn. Refer to [this page](https://www.di Install production dependencies. -``` +```bash pip install -r requirements.production.txt ``` @@ -82,7 +82,8 @@ Do not use `rebase` when pulling or merging changes. Rebasing transforms the com When you start working on a feature, create a feature branch for your changes. These feature branches should be prefixed with `feature`. Example of creating a feature branch: -``` + +```bash git checkout -b feature-error-page ``` @@ -96,13 +97,13 @@ Merge requests to `master` should be reviewed by multiple developers. Only a mod Lint python files using `pycodestyle` with -``` +```bash pycodestyle --config=setup.cfg --count . ``` Lint javascript and markdown using `eslint` and `remark` with -``` +```bash npm test ``` @@ -112,7 +113,7 @@ Use an editor with linting capabilities to write pretty code that passes linting Run unit tests with -``` +```bash python manage.py test -v 2 ``` diff --git a/requirements.txt b/requirements.txt index a5764be..5e1bc61 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,14 +20,14 @@ coverage==4.3.4 django-nose==1.4.5 nose-exclude==0.5.0 psycopg2-binary==2.7.6.1 -django-bootstrap3==8.2.3 +django-bootstrap3==11.1.0 django-tables2==1.6.1 pycodestyle==2.3.1 dealer==2.0.5 django-modeltranslation==0.13b1 django-auditlog==0.4.5 django-phonenumber-field==1.3.0 -django-autocomplete-light==3.2.10 +django-autocomplete-light==3.4.1 six==1.10.0 django-suit==0.2.26 telepot==12.3 diff --git a/setup.cfg b/setup.cfg index 5101f60..def46f1 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,4 +1,4 @@ [pycodestyle] max-line-length = 120 ignore = E501,E722 -exclude = '*/migrations/*' +exclude = '*/migrations/*', venv/* diff --git a/sikweb/base.py b/sikweb/base.py index 9987d68..ba33914 100644 --- a/sikweb/base.py +++ b/sikweb/base.py @@ -317,4 +317,6 @@ SUIT_CONFIG = { # 'LIST_PER_PAGE': 15 } -JWT_EXPIRATION_DELTA = datetime.timedelta(days=7) +JWT_AUTH = { + 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7) +} diff --git a/sikweb/settings-sample.py b/sikweb/settings-sample.py index e233517..5789c22 100644 --- a/sikweb/settings-sample.py +++ b/sikweb/settings-sample.py @@ -21,11 +21,6 @@ DEBUG = True # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '7p$85^4ibb^p4-=vs44b7!y0e-zemugze18@a#30&71=a8)dp(' -# HSL API settings -HSL_USERHASH = 'YOUR HSL USERHASH HERE' -HSL_DEPARTURE_THRESHOLD = 8 # minutes -HSL_HURRY_THRESHOLD = 13 # minutes - # MQTT settings MQTT_SETTINGS = { 'HOST': 'mqtt.sik.party', diff --git a/sikweb/urls.py b/sikweb/urls.py index 93e5266..a73f055 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -29,7 +29,7 @@ import members.urls import coffee_scale.urls favicon_view = RedirectView.as_view( - url='static/img/favicon.ico', permanent=True) + url='static/img/favicon.png', permanent=True) urlpatterns = [ diff --git a/stack-compose.yml b/stack-compose.yml new file mode 100644 index 0000000..f74e67d --- /dev/null +++ b/stack-compose.yml @@ -0,0 +1,6 @@ +version: '3.2' +services: + web20_backend: + image: registry.gitlab.com/sahkoinsinoorikilta/vtmk/web2.0-backend:latest + ports: + - 8000:8000 diff --git a/static/img/favicon.png b/static/img/favicon.png new file mode 100644 index 0000000..0d6a7d0 Binary files /dev/null and b/static/img/favicon.png differ diff --git a/static/img/kaehmy_banner.png b/static/img/kaehmy_banner.png index 7997ad2..b5dc259 100644 Binary files a/static/img/kaehmy_banner.png and b/static/img/kaehmy_banner.png differ diff --git a/templates/about.html b/templates/about.html index 146bafd..344ee6d 100644 --- a/templates/about.html +++ b/templates/about.html @@ -3,7 +3,7 @@ {% load static %} - + diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html index 4cba2fa..e910569 100644 --- a/templates/admin/base_site.html +++ b/templates/admin/base_site.html @@ -4,7 +4,7 @@ {% load i18n %} {# Additional content here, some extra meta tags or favicon #} {% block extrahead %} - + {% endblock %} diff --git a/templates/project.html b/templates/project.html index bbff6ef..6bae95f 100644 --- a/templates/project.html +++ b/templates/project.html @@ -8,7 +8,7 @@ {% block head %} - + diff --git a/webapp/migrations/0051_event_location.py b/webapp/migrations/0051_event_location.py new file mode 100644 index 0000000..9b2d423 --- /dev/null +++ b/webapp/migrations/0051_event_location.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.5 on 2019-03-12 12:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0050_signupform_visible'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='location', + field=models.CharField(blank=True, max_length=255), + ), + ] diff --git a/webapp/migrations/0052_feed_autohide_enabled.py b/webapp/migrations/0052_feed_autohide_enabled.py new file mode 100644 index 0000000..0342b40 --- /dev/null +++ b/webapp/migrations/0052_feed_autohide_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.5 on 2019-03-13 11:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0051_event_location'), + ] + + operations = [ + migrations.AddField( + model_name='feed', + name='autohide_enabled', + field=models.BooleanField(default=False), + ), + ] diff --git a/webapp/migrations/0053_auto_20190313_1505.py b/webapp/migrations/0053_auto_20190313_1505.py new file mode 100644 index 0000000..ae54874 --- /dev/null +++ b/webapp/migrations/0053_auto_20190313_1505.py @@ -0,0 +1,29 @@ +# Generated by Django 2.1.5 on 2019-03-13 13:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0052_feed_autohide_enabled'), + ] + + operations = [ + migrations.RenameField( + model_name='signupform', + old_name='end', + new_name='end_time', + ), + migrations.RenameField( + model_name='signupform', + old_name='start', + new_name='start_time', + ), + migrations.AddField( + model_name='signupform', + name='title', + field=models.CharField(default='Default signup title', max_length=255), + preserve_default=False, + ), + ] diff --git a/webapp/migrations/0054_auto_20190313_1642.py b/webapp/migrations/0054_auto_20190313_1642.py new file mode 100644 index 0000000..8111907 --- /dev/null +++ b/webapp/migrations/0054_auto_20190313_1642.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.5 on 2019-03-13 14:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('webapp', '0053_auto_20190313_1505'), + ] + + operations = [ + migrations.AlterField( + model_name='signupform', + name='questions', + field=models.TextField(default='[]'), + ), + ] diff --git a/webapp/models.py b/webapp/models.py index 716942c..348d8d7 100644 --- a/webapp/models.py +++ b/webapp/models.py @@ -47,6 +47,7 @@ class Feed(BaseFeed): publish_time = models.DateTimeField(default=timezone.now) autohide = models.DateTimeField(default=month_from_now) + autohide_enabled = models.BooleanField(default=False) def __str__(self): return _('Feed: {}').format(self.title) @@ -63,6 +64,7 @@ class Event(BaseFeed): end_time = models.DateTimeField(default=timezone.now) signupForm = models.ManyToManyField( 'SignupForm', blank=True) + location = models.CharField(max_length=255, blank=True) def __str__(self): return _('Event: {}').format(self.title) @@ -89,12 +91,16 @@ class TemplateQuestion(models.Model): class SignupForm(models.Model): """Model for event signup form. Stores questions in JSONB.""" - start = models.DateTimeField(default=timezone.now) - end = models.DateTimeField(default=timezone.now) + title = models.CharField(max_length=255) + start_time = models.DateTimeField(default=timezone.now) + end_time = models.DateTimeField(default=timezone.now) # question = JSONField() - questions = models.CharField(max_length=255) + questions = models.TextField(default="[]") visible = models.BooleanField(default=True) + def __str__(self): + return _('#{} {}').format(self.id, self.title) + class Meta: verbose_name = _('Signup form') verbose_name_plural = _('Signup forms') diff --git a/webapp/serializers.py b/webapp/serializers.py index 1eae195..b542d55 100644 --- a/webapp/serializers.py +++ b/webapp/serializers.py @@ -3,10 +3,9 @@ from webapp.models import * class SignupFormSerializer(serializers.HyperlinkedModelSerializer): - class Meta: model = SignupForm - fields = ('id', 'start', 'end', 'questions') + fields = ('id', 'title', 'start_time', 'end_time', 'questions') class EventSerializer(serializers.HyperlinkedModelSerializer): @@ -25,7 +24,7 @@ class EventSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Event fields = ('id', 'tag_id', 'tags', 'visible', 'title', 'description', - 'content', 'start_time', 'end_time', 'signup_id', 'signupForm') + 'content', 'start_time', 'end_time', 'location', 'signup_id', 'signupForm') depth = 1 def create(self, validated_data): @@ -73,24 +72,22 @@ class TagSerializer(serializers.ModelSerializer): class FeedSerializer(serializers.ModelSerializer): - # tags = TagSerializer(many=True, read_only=False) - # tags = serializers.PrimaryKeyRelatedField( - # many=True, - # queryset=Tag.objects.all(), - # read_only=False - # ) + tag_id = serializers.PrimaryKeyRelatedField( + many=True, + source="tags", + queryset=Tag.objects.all() + ) class Meta: model = Feed - fields = ('tags', 'visible', 'title', 'description', - 'content', 'publish_time', 'autohide') + fields = ('id', 'tags', 'tag_id', 'visible', 'title', 'description', + 'content', 'publish_time', 'autohide', 'autohide_enabled') + depth = 1 def create(self, validated_data): - print("validated data: ", validated_data) tags_data = validated_data.pop('tags') feed = Feed.objects.create(**validated_data) for tag in tags_data: - print(tag) feed.tags.add(tag) feed.save() return feed diff --git a/webapp/tests.py b/webapp/tests.py index 7879e70..067ea45 100644 --- a/webapp/tests.py +++ b/webapp/tests.py @@ -30,6 +30,19 @@ class TagsTestCase(APITestCase): tag1 = Tag.objects.get(slug="Party") self.assertEqual(sliced_response, {'id': tag1.id, 'slug': 'Party', 'name': 'Bileet'}) + def test_get_single_tag_serializer(self): + response = self.client.get('/api/tags/', format='json') + self.assertTrue(status.is_success(response.status_code)) + + tags = Tag.objects.all() + serializer = TagSerializer(tags, many=True) + # Icon on serializer is returned without protocol and domain + # Assert these individually + resp_icon = response.data['results'][0].pop('icon') + serial_icon = serializer.data[0].pop('icon') + self.assertEqual(response.data['results'], serializer.data) + self.assertEqual(resp_icon, "http://testserver" + serial_icon) + def test_get_multiple_tags(self): self.assertEqual(Tag.objects.count(), 1) Tag.objects.create(slug='Freshmen', name='Fuksit', icon=self.icon) @@ -88,6 +101,11 @@ class FeedTestCase(APITestCase): feeds = Feed.objects.all() serializer = FeedSerializer(feeds, many=True) + # DRF extends path given by serializer with the protocol and domain for icon + # Ignore tag on serializer and response. This is tested on TagTestCase. + # Note that we assume the length here to be 1 + response.data['results'][0].pop('tags') + serializer.data[0].pop('tags') self.assertEqual(response.data['results'], serializer.data) def test_post_feed(self): diff --git a/webapp/views.py b/webapp/views.py index 1b70e31..8eeaf00 100644 --- a/webapp/views.py +++ b/webapp/views.py @@ -48,7 +48,11 @@ class EventViewSet(viewsets.ModelViewSet): search_fields = '__all__' def get_queryset(self): - return Event.objects.filter(visible=True, end_time__gt=timezone.now()).order_by('start_time') + since = self.request.query_params.get('since', None) + if since: + return Event.objects.filter(visible=True, end_time__gt=since).order_by('start_time') + + return Event.objects.filter(visible=True).order_by('start_time') class SignupFormViewSet(viewsets.ModelViewSet): @@ -60,7 +64,7 @@ class SignupFormViewSet(viewsets.ModelViewSet): search_fields = '__all__' def get_queryset(self): - return SignupForm.objects.filter(visible=True, end__gt=timezone.now()).order_by('start') + return SignupForm.objects.filter(visible=True, end_time__gt=timezone.now()).order_by('start_time') class SignupViewSet(viewsets.ModelViewSet): @@ -90,7 +94,17 @@ class FeedViewSet(viewsets.ModelViewSet): search_fields = '__all__' def get_queryset(self): - return Feed.objects.filter(visible=True, autohide__gt=timezone.now()).order_by('publish_time') + objs = Feed.objects.filter(visible=True).order_by('publish_time') + + result_ids = [] + for obj in objs: + if obj.autohide_enabled: + if obj.autohide > timezone.now(): + result_ids.append(obj.id) + else: + result_ids.append(obj.id) + + return Feed.objects.filter(id__in=result_ids) class ContactsViewSet(viewsets.ReadOnlyModelViewSet): diff --git a/windows_install.md b/windows_install.md index 3c39452..5b60860 100644 --- a/windows_install.md +++ b/windows_install.md @@ -12,13 +12,13 @@ Make sure to add the python binary directory to PATH. For instructions how to do Run the following command to install `virtualenv`. -``` +```cmd python -m pip install virtualenv ``` Setup a virtual python environment. -``` +```cmd python -m virtualenv ../virtualenv.sikweb ``` @@ -26,13 +26,13 @@ python -m virtualenv ../virtualenv.sikweb Activate `virtualenv` (note that this has to be active at all times). -``` +```cmd source ../virtualenv.sikweb/Scripts/activate ``` Run the following command to install python packages. -``` +```cmd pip install -r requirements.txt ``` @@ -40,7 +40,7 @@ pip install -r requirements.txt Run -``` +```cmd python manage.py migrate ``` @@ -52,4 +52,4 @@ Follow the instructions on [the npm website](https://www.npmjs.com/package/npm). By default Django uses SQLite, which doesn't need any configuration. If you need PostgreSQL instead, refer to [their website](https://www.postgresql.org/download/windows/). -## Done! +## Done