~cedric/newspipe

62b3afeeedfe054345f86093e2d243e956c1e3c9 — Cédric Bonhomme 1 year, 2 months ago afc6cf8
The project is now using Poetry.
148 files changed, 997 insertions(+), 657 deletions(-)

D .buildpacks
M .gitignore
D Pipfile
D Pipfile.lock
D Procfile
M README.md
D app.json
M install.sh
R src/bootstrap.py => newspipe/bootstrap.py
R src/conf.py => newspipe/conf.py
R src/conf/conf.cfg-sample => newspipe/conf/conf.cfg-sample
R src/crawler/default_crawler.py => newspipe/crawler/default_crawler.py
R src/lib/__init__.py => newspipe/lib/__init__.py
R src/lib/article_utils.py => newspipe/lib/article_utils.py
R src/lib/data.py => newspipe/lib/data.py
R src/lib/feed_utils.py => newspipe/lib/feed_utils.py
R src/lib/misc_utils.py => newspipe/lib/misc_utils.py
R src/lib/utils.py => newspipe/lib/utils.py
R src/manager.py => newspipe/manager.py
R src/notifications/emails.py => newspipe/notifications/emails.py
R src/notifications/notifications.py => newspipe/notifications/notifications.py
R src/runserver.py => newspipe/runserver.py
R src/web/__init__.py => newspipe/web/__init__.py
R src/web/controllers/__init__.py => newspipe/web/controllers/__init__.py
R src/web/controllers/abstract.py => newspipe/web/controllers/abstract.py
R src/web/controllers/article.py => newspipe/web/controllers/article.py
R src/web/controllers/bookmark.py => newspipe/web/controllers/bookmark.py
R src/web/controllers/category.py => newspipe/web/controllers/category.py
R src/web/controllers/feed.py => newspipe/web/controllers/feed.py
R src/web/controllers/icon.py => newspipe/web/controllers/icon.py
R src/web/controllers/tag.py => newspipe/web/controllers/tag.py
R src/web/controllers/user.py => newspipe/web/controllers/user.py
R src/web/decorators.py => newspipe/web/decorators.py
R src/web/forms.py => newspipe/web/forms.py
R src/web/js/actions/MenuActions.js => newspipe/web/js/actions/MenuActions.js
R src/web/js/actions/MiddlePanelActions.js => newspipe/web/js/actions/MiddlePanelActions.js
R src/web/js/actions/RightPanelActions.js => newspipe/web/js/actions/RightPanelActions.js
R src/web/js/app.js => newspipe/web/js/app.js
R src/web/js/components/MainApp.react.js => newspipe/web/js/components/MainApp.react.js
R src/web/js/components/Menu.react.js => newspipe/web/js/components/Menu.react.js
R src/web/js/components/MiddlePanel.react.js => newspipe/web/js/components/MiddlePanel.react.js
R src/web/js/components/Navbar.react.js => newspipe/web/js/components/Navbar.react.js
R src/web/js/components/RightPanel.react.js => newspipe/web/js/components/RightPanel.react.js
R src/web/js/components/time.react.js => newspipe/web/js/components/time.react.js
R src/web/js/constants/JarrConstants.js => newspipe/web/js/constants/JarrConstants.js
R src/web/js/dispatcher/JarrDispatcher.js => newspipe/web/js/dispatcher/JarrDispatcher.js
R src/web/js/dispatcher/__tests__/AppDispatcher-test.js => newspipe/web/js/dispatcher/__tests__/AppDispatcher-test.js
R src/web/js/stores/MenuStore.js => newspipe/web/js/stores/MenuStore.js
R src/web/js/stores/MiddlePanelStore.js => newspipe/web/js/stores/MiddlePanelStore.js
R src/web/js/stores/RightPanelStore.js => newspipe/web/js/stores/RightPanelStore.js
R src/web/js/stores/__tests__/TodoStore-test.js => newspipe/web/js/stores/__tests__/TodoStore-test.js
R src/web/lib/__init__.py => newspipe/web/lib/__init__.py
R src/web/lib/user_utils.py => newspipe/web/lib/user_utils.py
R src/web/lib/view_utils.py => newspipe/web/lib/view_utils.py
R src/web/models/__init__.py => newspipe/web/models/__init__.py
R src/web/models/article.py => newspipe/web/models/article.py
R src/web/models/bookmark.py => newspipe/web/models/bookmark.py
R src/web/models/category.py => newspipe/web/models/category.py
R src/web/models/feed.py => newspipe/web/models/feed.py
R src/web/models/icon.py => newspipe/web/models/icon.py
R src/web/models/right_mixin.py => newspipe/web/models/right_mixin.py
R src/web/models/role.py => newspipe/web/models/role.py
R src/web/models/tag.py => newspipe/web/models/tag.py
R src/web/models/user.py => newspipe/web/models/user.py
A newspipe/web/static/css/bootstrap-theme.min.css
A newspipe/web/static/css/bootstrap-theme.min.css.map
A newspipe/web/static/css/bootstrap.min.css
A newspipe/web/static/css/bootstrap.min.css.map
R src/web/static/css/customized-bootstrap.css => newspipe/web/static/css/customized-bootstrap.css
R src/web/static/css/one-page-app.css => newspipe/web/static/css/one-page-app.css
A newspipe/web/static/fonts
R src/web/static/img/favicon.ico => newspipe/web/static/img/favicon.ico
R src/web/static/img/newspipe.png => newspipe/web/static/img/newspipe.png
R src/web/static/img/newspipe.svg => newspipe/web/static/img/newspipe.svg
R src/web/static/img/pinboard.png => newspipe/web/static/img/pinboard.png
R src/web/static/img/reddit.png => newspipe/web/static/img/reddit.png
R src/web/static/img/twitter.png => newspipe/web/static/img/twitter.png
R src/web/static/js/articles.js => newspipe/web/static/js/articles.js
R src/web/static/js/feed.js => newspipe/web/static/js/feed.js
R src/web/static/js/jquery.js => newspipe/web/static/js/jquery.js
R src/web/templates/about.html => newspipe/web/templates/about.html
R src/web/templates/about_more.html => newspipe/web/templates/about_more.html
R src/web/templates/admin/create_user.html => newspipe/web/templates/admin/create_user.html
R src/web/templates/admin/dashboard.html => newspipe/web/templates/admin/dashboard.html
R src/web/templates/article.html => newspipe/web/templates/article.html
R src/web/templates/article_pub.html => newspipe/web/templates/article_pub.html
R src/web/templates/bookmarks.html => newspipe/web/templates/bookmarks.html
R src/web/templates/categories.html => newspipe/web/templates/categories.html
R src/web/templates/duplicates.html => newspipe/web/templates/duplicates.html
R src/web/templates/edit_bookmark.html => newspipe/web/templates/edit_bookmark.html
R src/web/templates/edit_category.html => newspipe/web/templates/edit_category.html
R src/web/templates/edit_feed.html => newspipe/web/templates/edit_feed.html
R src/web/templates/emails/account_activation.txt => newspipe/web/templates/emails/account_activation.txt
R src/web/templates/emails/new_password.txt => newspipe/web/templates/emails/new_password.txt
R src/web/templates/errors/404.html => newspipe/web/templates/errors/404.html
R src/web/templates/errors/500.html => newspipe/web/templates/errors/500.html
R src/web/templates/feed.html => newspipe/web/templates/feed.html
R src/web/templates/feed_list.html => newspipe/web/templates/feed_list.html
R src/web/templates/feed_list_per_categories.html => newspipe/web/templates/feed_list_per_categories.html
R src/web/templates/feed_list_simple.html => newspipe/web/templates/feed_list_simple.html
R src/web/templates/feeds.html => newspipe/web/templates/feeds.html
R src/web/templates/history.html => newspipe/web/templates/history.html
R src/web/templates/home.html => newspipe/web/templates/home.html
R src/web/templates/inactives.html => newspipe/web/templates/inactives.html
R src/web/templates/layout.html => newspipe/web/templates/layout.html
R src/web/templates/login.html => newspipe/web/templates/login.html
R src/web/templates/management.html => newspipe/web/templates/management.html
R src/web/templates/opml.xml => newspipe/web/templates/opml.xml
R src/web/templates/popular.html => newspipe/web/templates/popular.html
R src/web/templates/profile.html => newspipe/web/templates/profile.html
R src/web/templates/profile_public.html => newspipe/web/templates/profile_public.html
R src/web/templates/signup.html => newspipe/web/templates/signup.html
R src/web/templates/user_stream.html => newspipe/web/templates/user_stream.html
R src/web/translations/babel.cfg => newspipe/web/translations/babel.cfg
R src/web/translations/fr/LC_MESSAGES/messages.mo => newspipe/web/translations/fr/LC_MESSAGES/messages.mo
R src/web/translations/fr/LC_MESSAGES/messages.po => newspipe/web/translations/fr/LC_MESSAGES/messages.po
R src/web/translations/internationalization.sh => newspipe/web/translations/internationalization.sh
R src/web/translations/messages.pot => newspipe/web/translations/messages.pot
R src/web/views/__init__.py => newspipe/web/views/__init__.py
R src/web/views/admin.py => newspipe/web/views/admin.py
R src/web/views/api/__init__.py => newspipe/web/views/api/__init__.py
R src/web/views/api/v2/__init__.py => newspipe/web/views/api/v2/__init__.py
R src/web/views/api/v2/article.py => newspipe/web/views/api/v2/article.py
R src/web/views/api/v2/category.py => newspipe/web/views/api/v2/category.py
R src/web/views/api/v2/common.py => newspipe/web/views/api/v2/common.py
R src/web/views/api/v2/feed.py => newspipe/web/views/api/v2/feed.py
R src/web/views/api/v3/__init__.py => newspipe/web/views/api/v3/__init__.py
R src/web/views/api/v3/article.py => newspipe/web/views/api/v3/article.py
R src/web/views/api/v3/common.py => newspipe/web/views/api/v3/common.py
R src/web/views/api/v3/feed.py => newspipe/web/views/api/v3/feed.py
R src/web/views/article.py => newspipe/web/views/article.py
R src/web/views/bookmark.py => newspipe/web/views/bookmark.py
R src/web/views/category.py => newspipe/web/views/category.py
R src/web/views/common.py => newspipe/web/views/common.py
R src/web/views/feed.py => newspipe/web/views/feed.py
R src/web/views/home.py => newspipe/web/views/home.py
R src/web/views/icon.py => newspipe/web/views/icon.py
R src/web/views/session_mgmt.py => newspipe/web/views/session_mgmt.py
R src/web/views/user.py => newspipe/web/views/user.py
R src/web/views/views.py => newspipe/web/views/views.py
A poetry.lock
A pyproject.toml
D runtime.txt
D src/web/static/css/bootstrap-theme.min.css
D src/web/static/css/bootstrap-theme.min.css.map
D src/web/static/css/bootstrap.min.css
D src/web/static/css/bootstrap.min.css.map
D src/web/static/fonts
D .buildpacks => .buildpacks +0 -2
@@ 1,2 0,0 @@
https://github.com/heroku/heroku-buildpack-nodejs
https://github.com/ejholmes/heroku-buildpack-bower

M .gitignore => .gitignore +5 -3
@@ 22,10 22,12 @@ eproject.cfg
venv
build

src/conf/conf.cfg
newspipe.egg-info/

newspipe/conf/conf.cfg
.coverage

# js and node files
node_modules
src/web/static/bower_components/
src/web/static/js/bundle.min.js
newspipe/web/static/bower_components/
newspipe/web/static/js/bundle.min.js

D Pipfile => Pipfile +0 -34
@@ 1,34 0,0 @@
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
aiohttp = "*"
requests = "*"
chardet = "*"
requests-futures = "*"
feedparser = "*"
"beautifulsoup4" = "*"
lxml = "*"
opml = "*"
SQLAlchemy = "*"
alembic = "*"
Flask = "*"
Flask-SQLAlchemy = "*"
Flask-Login = "*"
Flask-Principal = "*"
Flask-WTF = "*"
Flask-RESTful = "*"
Flask-Restless = "*"
Flask-paginate = "*"
Flask-Babel = "*"
Flask-SSLify = "*"
Flask-Migrate = "*"
Flask-Script = "*"
WTForms = "*"
sendgrid = "*"
python-dateutil = "*"
psycopg2-binary = "*"

[dev-packages]

D Pipfile.lock => Pipfile.lock +0 -504
@@ 1,504 0,0 @@
{
    "_meta": {
        "hash": {
            "sha256": "6b30dc177331d8eda5e9c7531c9871b33a650c1610b0eddbad9345bad862c7f4"
        },
        "pipfile-spec": 6,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "aiohttp": {
            "hashes": [
                "sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e",
                "sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326",
                "sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a",
                "sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654",
                "sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a",
                "sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4",
                "sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17",
                "sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec",
                "sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd",
                "sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48",
                "sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59",
                "sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"
            ],
            "index": "pypi",
            "version": "==3.6.2"
        },
        "alembic": {
            "hashes": [
                "sha256:2df2519a5b002f881517693b95626905a39c5faf4b5a1f94de4f1441095d1d26"
            ],
            "index": "pypi",
            "version": "==1.4.0"
        },
        "aniso8601": {
            "hashes": [
                "sha256:529dcb1f5f26ee0df6c0a1ee84b7b27197c3c50fc3a6321d66c544689237d072",
                "sha256:c033f63d028b9a58e3ab0c2c7d0532ab4bfa7452bfc788fbfe3ddabd327b181a"
            ],
            "version": "==8.0.0"
        },
        "async-timeout": {
            "hashes": [
                "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f",
                "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"
            ],
            "version": "==3.0.1"
        },
        "attrs": {
            "hashes": [
                "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
                "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
            ],
            "version": "==19.3.0"
        },
        "babel": {
            "hashes": [
                "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38",
                "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"
            ],
            "version": "==2.8.0"
        },
        "beautifulsoup4": {
            "hashes": [
                "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a",
                "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887",
                "sha256:e1505eeed31b0f4ce2dbb3bc8eb256c04cc2b3b72af7d551a4ab6efd5cbe5dae"
            ],
            "index": "pypi",
            "version": "==4.8.2"
        },
        "blinker": {
            "hashes": [
                "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"
            ],
            "version": "==1.4"
        },
        "certifi": {
            "hashes": [
                "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
                "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
            ],
            "version": "==2019.11.28"
        },
        "chardet": {
            "hashes": [
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
            ],
            "index": "pypi",
            "version": "==3.0.4"
        },
        "click": {
            "hashes": [
                "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
                "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
            ],
            "version": "==7.0"
        },
        "feedparser": {
            "hashes": [
                "sha256:bd030652c2d08532c034c27fcd7c85868e7fa3cb2b17f230a44a6bbc92519bf9",
                "sha256:cd2485472e41471632ed3029d44033ee420ad0b57111db95c240c9160a85831c",
                "sha256:ce875495c90ebd74b179855449040003a1beb40cd13d5f037a0654251e260b02"
            ],
            "index": "pypi",
            "version": "==5.2.1"
        },
        "flask": {
            "hashes": [
                "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52",
                "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"
            ],
            "index": "pypi",
            "version": "==1.1.1"
        },
        "flask-babel": {
            "hashes": [
                "sha256:247f4ec34cf605d03781f480bccb1a5acb719df1d1a2a743c091ab3db5d5fde2",
                "sha256:d6a70468f9a8919d59fba2a291a003da3a05ff884275dddbd965f3b98b09ab3e"
            ],
            "index": "pypi",
            "version": "==1.0.0"
        },
        "flask-login": {
            "hashes": [
                "sha256:6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b",
                "sha256:7451b5001e17837ba58945aead261ba425fdf7b4f0448777e597ddab39f4fba0"
            ],
            "index": "pypi",
            "version": "==0.5.0"
        },
        "flask-migrate": {
            "hashes": [
                "sha256:6fb038be63d4c60727d5dfa5f581a6189af5b4e2925bc378697b4f0a40cfb4e1",
                "sha256:a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502"
            ],
            "index": "pypi",
            "version": "==2.5.2"
        },
        "flask-paginate": {
            "hashes": [
                "sha256:d2aa07b4ef27f56f973482aaa06a0d93dc769a3e4d3e9c382a305ab72ac38ad9"
            ],
            "index": "pypi",
            "version": "==0.5.5"
        },
        "flask-principal": {
            "hashes": [
                "sha256:f5d6134b5caebfdbb86f32d56d18ee44b080876a27269560a96ea35f75c99453"
            ],
            "index": "pypi",
            "version": "==0.4.0"
        },
        "flask-restful": {
            "hashes": [
                "sha256:5ea9a5991abf2cb69b4aac19793faac6c032300505b325687d7c305ffaa76915",
                "sha256:d891118b951921f1cec80cabb4db98ea6058a35e6404788f9e70d5b243813ec2"
            ],
            "index": "pypi",
            "version": "==0.3.8"
        },
        "flask-restless": {
            "hashes": [
                "sha256:1de47fe80abd47239c9a1804e0ba5da1d23b9f40cfc26202d16bed37f178c2b6"
            ],
            "index": "pypi",
            "version": "==0.17.0"
        },
        "flask-script": {
            "hashes": [
                "sha256:6425963d91054cfcc185807141c7314a9c5ad46325911bd24dcb489bd0161c65"
            ],
            "index": "pypi",
            "version": "==2.0.6"
        },
        "flask-sqlalchemy": {
            "hashes": [
                "sha256:0078d8663330dc05a74bc72b3b6ddc441b9a744e2f56fe60af1a5bfc81334327",
                "sha256:6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d"
            ],
            "index": "pypi",
            "version": "==2.4.1"
        },
        "flask-sslify": {
            "hashes": [
                "sha256:d33e1d3c09cd95154176aa8a7319418e52129fc482dd56d8a8ad7c24500d543e"
            ],
            "index": "pypi",
            "version": "==0.1.5"
        },
        "flask-wtf": {
            "hashes": [
                "sha256:57b3faf6fe5d6168bda0c36b0df1d05770f8e205e18332d0376ddb954d17aef2",
                "sha256:d417e3a0008b5ba583da1763e4db0f55a1269d9dd91dcc3eb3c026d3c5dbd720"
            ],
            "index": "pypi",
            "version": "==0.14.3"
        },
        "idna": {
            "hashes": [
                "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
                "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
            ],
            "version": "==2.9"
        },
        "itsdangerous": {
            "hashes": [
                "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19",
                "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"
            ],
            "version": "==1.1.0"
        },
        "jinja2": {
            "hashes": [
                "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250",
                "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"
            ],
            "version": "==2.11.1"
        },
        "lxml": {
            "hashes": [
                "sha256:06d4e0bbb1d62e38ae6118406d7cdb4693a3fa34ee3762238bcb96c9e36a93cd",
                "sha256:0701f7965903a1c3f6f09328c1278ac0eee8f56f244e66af79cb224b7ef3801c",
                "sha256:1f2c4ec372bf1c4a2c7e4bb20845e8bcf8050365189d86806bad1e3ae473d081",
                "sha256:4235bc124fdcf611d02047d7034164897ade13046bda967768836629bc62784f",
                "sha256:5828c7f3e615f3975d48f40d4fe66e8a7b25f16b5e5705ffe1d22e43fb1f6261",
                "sha256:585c0869f75577ac7a8ff38d08f7aac9033da2c41c11352ebf86a04652758b7a",
                "sha256:5d467ce9c5d35b3bcc7172c06320dddb275fea6ac2037f72f0a4d7472035cea9",
                "sha256:63dbc21efd7e822c11d5ddbedbbb08cd11a41e0032e382a0fd59b0b08e405a3a",
                "sha256:7bc1b221e7867f2e7ff1933165c0cec7153dce93d0cdba6554b42a8beb687bdb",
                "sha256:8620ce80f50d023d414183bf90cc2576c2837b88e00bea3f33ad2630133bbb60",
                "sha256:8a0ebda56ebca1a83eb2d1ac266649b80af8dd4b4a3502b2c1e09ac2f88fe128",
                "sha256:90ed0e36455a81b25b7034038e40880189169c308a3df360861ad74da7b68c1a",
                "sha256:95e67224815ef86924fbc2b71a9dbd1f7262384bca4bc4793645794ac4200717",
                "sha256:afdb34b715daf814d1abea0317b6d672476b498472f1e5aacbadc34ebbc26e89",
                "sha256:b4b2c63cc7963aedd08a5f5a454c9f67251b1ac9e22fd9d72836206c42dc2a72",
                "sha256:d068f55bda3c2c3fcaec24bd083d9e2eede32c583faf084d6e4b9daaea77dde8",
                "sha256:d5b3c4b7edd2e770375a01139be11307f04341ec709cf724e0f26ebb1eef12c3",
                "sha256:deadf4df349d1dcd7b2853a2c8796593cc346600726eff680ed8ed11812382a7",
                "sha256:df533af6f88080419c5a604d0d63b2c33b1c0c4409aba7d0cb6de305147ea8c8",
                "sha256:e4aa948eb15018a657702fee0b9db47e908491c64d36b4a90f59a64741516e77",
                "sha256:e5d842c73e4ef6ed8c1bd77806bf84a7cb535f9c0cf9b2c74d02ebda310070e1",
                "sha256:ebec08091a22c2be870890913bdadd86fcd8e9f0f22bcb398abd3af914690c15",
                "sha256:edc15fcfd77395e24543be48871c251f38132bb834d9fdfdad756adb6ea37679",
                "sha256:f2b74784ed7e0bc2d02bd53e48ad6ba523c9b36c194260b7a5045071abbb1012",
                "sha256:fa071559f14bd1e92077b1b5f6c22cf09756c6de7139370249eb372854ce51e6",
                "sha256:fd52e796fee7171c4361d441796b64df1acfceb51f29e545e812f16d023c4bbc",
                "sha256:fe976a0f1ef09b3638778024ab9fb8cde3118f203364212c198f71341c0715ca"
            ],
            "index": "pypi",
            "version": "==4.5.0"
        },
        "mako": {
            "hashes": [
                "sha256:2984a6733e1d472796ceef37ad48c26f4a984bb18119bb2dbc37a44d8f6e75a4"
            ],
            "version": "==1.1.1"
        },
        "markupsafe": {
            "hashes": [
                "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
                "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
                "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
                "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
                "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
                "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
                "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
                "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
                "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
                "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
                "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
                "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
                "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
                "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
                "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
                "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
                "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
                "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
                "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
                "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
                "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
                "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
                "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
                "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
                "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
                "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
                "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
                "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
                "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
                "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
                "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
                "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
                "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
            ],
            "version": "==1.1.1"
        },
        "mimerender": {
            "hashes": [
                "sha256:e7f1377efee18c3f562cee54907a3329223c824332889fb74b745ddfd0a9b1c6"
            ],
            "version": "==0.6.0"
        },
        "multidict": {
            "hashes": [
                "sha256:317f96bc0950d249e96d8d29ab556d01dd38888fbe68324f46fd834b430169f1",
                "sha256:42f56542166040b4474c0c608ed051732033cd821126493cf25b6c276df7dd35",
                "sha256:4b7df040fb5fe826d689204f9b544af469593fb3ff3a069a6ad3409f742f5928",
                "sha256:544fae9261232a97102e27a926019100a9db75bec7b37feedd74b3aa82f29969",
                "sha256:620b37c3fea181dab09267cd5a84b0f23fa043beb8bc50d8474dd9694de1fa6e",
                "sha256:6e6fef114741c4d7ca46da8449038ec8b1e880bbe68674c01ceeb1ac8a648e78",
                "sha256:7774e9f6c9af3f12f296131453f7b81dabb7ebdb948483362f5afcaac8a826f1",
                "sha256:85cb26c38c96f76b7ff38b86c9d560dea10cf3459bb5f4caf72fc1bb932c7136",
                "sha256:a326f4240123a2ac66bb163eeba99578e9d63a8654a59f4688a79198f9aa10f8",
                "sha256:ae402f43604e3b2bc41e8ea8b8526c7fa7139ed76b0d64fc48e28125925275b2",
                "sha256:aee283c49601fa4c13adc64c09c978838a7e812f85377ae130a24d7198c0331e",
                "sha256:b51249fdd2923739cd3efc95a3d6c363b67bbf779208e9f37fd5e68540d1a4d4",
                "sha256:bb519becc46275c594410c6c28a8a0adc66fe24fef154a9addea54c1adb006f5",
                "sha256:c2c37185fb0af79d5c117b8d2764f4321eeb12ba8c141a95d0aa8c2c1d0a11dd",
                "sha256:dc561313279f9d05a3d0ffa89cd15ae477528ea37aa9795c4654588a3287a9ab",
                "sha256:e439c9a10a95cb32abd708bb8be83b2134fa93790a4fb0535ca36db3dda94d20",
                "sha256:fc3b4adc2ee8474cb3cd2a155305d5f8eda0a9c91320f83e55748e1fcb68f8e3"
            ],
            "version": "==4.7.5"
        },
        "opml": {
            "hashes": [
                "sha256:db1eef2a251b8af33e2eabb62baf922006dbd8c66c742931090e331a0362a770"
            ],
            "index": "pypi",
            "version": "==0.5"
        },
        "psycopg2-binary": {
            "hashes": [
                "sha256:040234f8a4a8dfd692662a8308d78f63f31a97e1c42d2480e5e6810c48966a29",
                "sha256:086f7e89ec85a6704db51f68f0dcae432eff9300809723a6e8782c41c2f48e03",
                "sha256:18ca813fdb17bc1db73fe61b196b05dd1ca2165b884dd5ec5568877cabf9b039",
                "sha256:19dc39616850342a2a6db70559af55b22955f86667b5f652f40c0e99253d9881",
                "sha256:2166e770cb98f02ed5ee2b0b569d40db26788e0bf2ec3ae1a0d864ea6f1d8309",
                "sha256:3a2522b1d9178575acee4adf8fd9f979f9c0449b00b4164bb63c3475ea6528ed",
                "sha256:3aa773580f85a28ffdf6f862e59cb5a3cc7ef6885121f2de3fca8d6ada4dbf3b",
                "sha256:3b5deaa3ee7180585a296af33e14c9b18c218d148e735c7accf78130765a47e3",
                "sha256:407af6d7e46593415f216c7f56ba087a9a42bd6dc2ecb86028760aa45b802bd7",
                "sha256:4c3c09fb674401f630626310bcaf6cd6285daf0d5e4c26d6e55ca26a2734e39b",
                "sha256:4c6717962247445b4f9e21c962ea61d2e884fc17df5ddf5e35863b016f8a1f03",
                "sha256:50446fae5681fc99f87e505d4e77c9407e683ab60c555ec302f9ac9bffa61103",
                "sha256:5057669b6a66aa9ca118a2a860159f0ee3acf837eda937bdd2a64f3431361a2d",
                "sha256:5dd90c5438b4f935c9d01fcbad3620253da89d19c1f5fca9158646407ed7df35",
                "sha256:659c815b5b8e2a55193ede2795c1e2349b8011497310bb936da7d4745652823b",
                "sha256:69b13fdf12878b10dc6003acc8d0abf3ad93e79813fd5f3812497c1c9fb9be49",
                "sha256:7a1cb80e35e1ccea3e11a48afe65d38744a0e0bde88795cc56a4d05b6e4f9d70",
                "sha256:7e6e3c52e6732c219c07bd97fff6c088f8df4dae3b79752ee3a817e6f32e177e",
                "sha256:7f42a8490c4fe854325504ce7a6e4796b207960dabb2cbafe3c3959cb00d1d7e",
                "sha256:84156313f258eafff716b2961644a4483a9be44a5d43551d554844d15d4d224e",
                "sha256:8578d6b8192e4c805e85f187bc530d0f52ba86c39172e61cd51f68fddd648103",
                "sha256:890167d5091279a27e2505ff0e1fb273f8c48c41d35c5b92adbf4af80e6b2ed6",
                "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1",
                "sha256:9aadff9032e967865f9778485571e93908d27dab21d0fdfdec0ca779bb6f8ad9",
                "sha256:9f24f383a298a0c0f9b3113b982e21751a8ecde6615494a3f1470eb4a9d70e9e",
                "sha256:a73021b44813b5c84eda4a3af5826dd72356a900bac9bd9dd1f0f81ee1c22c2f",
                "sha256:afd96845e12638d2c44d213d4810a08f4dc4a563f9a98204b7428e567014b1cd",
                "sha256:b73ddf033d8cd4cc9dfed6324b1ad2a89ba52c410ef6877998422fcb9c23e3a8",
                "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f",
                "sha256:dbc5cd56fff1a6152ca59445178652756f4e509f672e49ccdf3d79c1043113a4",
                "sha256:eac8a3499754790187bb00574ab980df13e754777d346f85e0ff6df929bcd964",
                "sha256:eaed1c65f461a959284649e37b5051224f4db6ebdc84e40b5e65f2986f101a08"
            ],
            "index": "pypi",
            "version": "==2.8.4"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
                "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
            ],
            "index": "pypi",
            "version": "==2.8.1"
        },
        "python-editor": {
            "hashes": [
                "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d",
                "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b",
                "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"
            ],
            "version": "==1.0.4"
        },
        "python-http-client": {
            "hashes": [
                "sha256:10bfbc7ecd25e55215680ce2827b1a3bf4e06ba4a59758039d047d6104b6f169"
            ],
            "version": "==3.2.5"
        },
        "python-mimeparse": {
            "hashes": [
                "sha256:76e4b03d700a641fd7761d3cd4fdbbdcd787eade1ebfac43f877016328334f78",
                "sha256:a295f03ff20341491bfe4717a39cd0a8cc9afad619ba44b77e86b0ab8a2b8282"
            ],
            "version": "==1.6.0"
        },
        "pytz": {
            "hashes": [
                "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
                "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
            ],
            "version": "==2019.3"
        },
        "requests": {
            "hashes": [
                "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
                "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
            ],
            "index": "pypi",
            "version": "==2.23.0"
        },
        "requests-futures": {
            "hashes": [
                "sha256:35547502bf1958044716a03a2f47092a89efe8f9789ab0c4c528d9c9c30bc148"
            ],
            "index": "pypi",
            "version": "==1.0.0"
        },
        "sendgrid": {
            "hashes": [
                "sha256:8112a3e2edd4cef208ed46335f058d2782397b395b96a472dcfd5e2618cf621b",
                "sha256:e2b8bd90522f22a22d2557aee9cb77d0c372a8c4ca35e65d062b4ecaf0b9a4bd"
            ],
            "index": "pypi",
            "version": "==6.1.2"
        },
        "six": {
            "hashes": [
                "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
                "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
            ],
            "version": "==1.14.0"
        },
        "soupsieve": {
            "hashes": [
                "sha256:e914534802d7ffd233242b785229d5ba0766a7f487385e3f714446a07bf540ae",
                "sha256:fcd71e08c0aee99aca1b73f45478549ee7e7fc006d51b37bec9e9def7dc22b69"
            ],
            "version": "==2.0"
        },
        "sqlalchemy": {
            "hashes": [
                "sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb"
            ],
            "index": "pypi",
            "version": "==1.3.13"
        },
        "urllib3": {
            "hashes": [
                "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc",
                "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"
            ],
            "version": "==1.25.8"
        },
        "werkzeug": {
            "hashes": [
                "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096",
                "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16"
            ],
            "version": "==1.0.0"
        },
        "wtforms": {
            "hashes": [
                "sha256:0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61",
                "sha256:e3ee092c827582c50877cdbd49e9ce6d2c5c1f6561f849b3b068c1b8029626f1"
            ],
            "index": "pypi",
            "version": "==2.2.1"
        },
        "yarl": {
            "hashes": [
                "sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce",
                "sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6",
                "sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce",
                "sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae",
                "sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d",
                "sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f",
                "sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b",
                "sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b",
                "sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb",
                "sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462",
                "sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea",
                "sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70",
                "sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1",
                "sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a",
                "sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b",
                "sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080",
                "sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2"
            ],
            "version": "==1.4.2"
        }
    },
    "develop": {}
}

D Procfile => Procfile +0 -2
@@ 1,2 0,0 @@
web: python src/runserver.py
init: python src/manager.py db_create

M README.md => README.md +8 -15
@@ 10,14 10,14 @@ https://todo.sr.ht/~cedric/newspipe

## Main features

* can be easily deployed on Heroku or on your server;
* easy to deploy;
* multiple users can use a Newspipe instance;
* a RESTful API to manage your articles (or connect your own crawler);
* data liberation: export and import all your account with a JSON file;
* export and import feeds with OPML files;
* favorite articles;
* detection of inactive feeds;
* Pinboard and reddit;
* share on Pinboard and reddit;
* personal management of bookmarks (with import from Pinboard).

The core technologies are [Flask](http://flask.pocoo.org),


@@ 32,13 32,6 @@ A documentation is available [here](https://newspipe.readthedocs.io) and
provides different ways to
[install Newspipe](https://newspipe.readthedocs.io/en/latest/deployment.html).

Test Newspipe on Heroku:

[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://builds.sr.ht/~cedric/Stegano)

It is important to specify an application name and the URL of your instance
(*PLATFORM_URL*) through the Heroku form.


## Deployment



@@ 51,15 44,15 @@ $ sudo apt-get install postgresql npm
##  Configure and install the application

```bash
$ git clone https://git.sr.ht/~cedric/Newspipe
$ git clone https://git.sr.ht/~cedric/newspipe
$ cd newspipe/
$ pipenv install
$ poetry install
✨🍰✨
$ npm install
$ cp src/conf/conf.cfg-sample src/conf/conf.cfg
$ pipenv shell
$ python src/manager.py db_create
$ python src/runserver.py
$ cp newspipe/conf/conf.cfg-sample newspipe/conf/conf.cfg
$ poetry shell
$ python newspipe/manager.py db_create
$ python newspipe/runserver.py
  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
```


D app.json => app.json +0 -79
@@ 1,79 0,0 @@
{
    "name": "Newspipe",
    "description": "A news aggregator that can be deployed on Heroku.",
    "keywords": [
        "aggregator",
        "news",
        "RSS"
    ],
    "website": "https://git.sr.ht/~cedric/Newspipe",
    "repository": "https://git.sr.ht/~cedric/Newspipe",
    "logo": "https://git.sr.ht/~cedric/Newspipe/blob/master/src/web/static/img/newspipe.png",
    "scripts": {
        "postdeploy": "python src/manager.py db_create"
    },
    "addons": [
        "heroku-postgresql:hobby-dev",
        "scheduler:standard"
    ],
    "buildpacks": [
        {
            "url": "https://github.com/heroku/heroku-buildpack-nodejs"
        },
        {
            "url": "https://github.com/ejholmes/heroku-buildpack-bower"
        },
        {
            "url": "heroku/python"
        }
    ],
    "env": {
        "PLATFORM_URL": {
            "description": "Address of your Newspipe instance (for example: https://YOUR-APPLICATION-NAME.herokuapp.com/)",
            "required": true,
            "value": ""
        },
        "ADMIN_EMAIL": {
            "description": "Administrator email address.",
            "required": true,
            "value": ""
        },
        "ADMIN_PASSWORD": {
            "description": "Your password.",
            "required": true,
            "value": ""
        },
        "SECRET_KEY": {
            "description": "A secret token in order to use sessions.",
            "required": true,
            "value": "iYtWRvAl!S7+Gz8kabK3@CBvr"
        },
        "SELF_REGISTRATION": {
            "description": "If set to True, users will be able to create new accounts.",
            "required": true,
            "value": "false"
        },
        "SECURITY_PASSWORD_SALT": {
            "description": "A secret to confirm account creation with a link in an email.",
            "required": true,
            "value": "^HEpK@L&cP5dMR^kiz8IIZj8q"
        },
        "TOKEN_VALIDITY_PERIOD": {
            "description": "Validity period (in seconds) of the account confirmation link sent by email.",
            "required": true,
            "value": "3600"
        },
        "HEROKU": "1",
        "CDN_ADDRESS": "https://cdn.cedricbonhomme.org/",
        "NOTIFICATION_EMAIL": "newspipe@no-reply.com",
        "SENDGRID_API_KEY": "REDACTED",
        "CRAWLER_RESOLV": {
            "description": "Specify if the crawler should try to resolve link of articles behind proxies.",
            "value": "false"
        },
        "FEED_REFRESH_INTERVAL": {
            "description": "Feeds refresh interval (in minutes) for the crawler.",
            "value": "120"
        }
    }
}

M install.sh => install.sh +12 -12
@@ 9,13 9,13 @@

sudo apt-get install npm

pipenv install
poetry install
npm install

cp src/conf/conf.cfg-sample src/conf/conf.cfg
cp newspipe/conf/conf.cfg-sample newspipe/conf/conf.cfg
# Delete default database configuration
sed -i '/database/d' src/conf/conf.cfg
sed -i '/database_url/d' src/conf/conf.cfg
sed -i '/database/d' newspipe/conf/conf.cfg
sed -i '/database_url/d' newspipe/conf/conf.cfg

# Configuration of the database
if [ "$1" == postgres ]; then


@@ 30,21 30,21 @@ if [ "$1" == postgres ]; then
    echo "GRANT ALL PRIVILEGES ON DATABASE aggregator TO pgsqluser;" | sudo -u postgres psql

    # Add configuration lines for PostgreSQL
    echo '[database]' >> src/conf/conf.cfg
    echo 'database_url = postgres://pgsqluser:pgsqlpwd@127.0.0.1:5433/aggregator' >> src/conf/conf.cfg
    echo '[database]' >> newspipe/conf/conf.cfg
    echo 'database_url = postgres://pgsqluser:pgsqlpwd@127.0.0.1:5433/aggregator' >> newspipe/conf/conf.cfg
elif [ "$1" == sqlite ]; then
    # Add configuration lines for SQLite
    echo "Configuring the SQLite database..."

    echo '[database]' >> src/conf/conf.cfg
    echo 'database_url = sqlite:///newspipe.db' >> src/conf/conf.cfg
    echo '[database]' >> newspipe/conf/conf.cfg
    echo 'database_url = sqlite:///newspipe.db' >> newspipe/conf/conf.cfg
fi

pipenv shell
poetry shell

echo "Initialization of the database..."
python src/manager.py db_empty
python src/manager.py db_create
python newspipe/manager.py db_empty
python newspipe/manager.py db_create

echo "Launching Newspipe..."
python src/runserver.py
python newspipe/runserver.py

R src/bootstrap.py => newspipe/bootstrap.py +0 -0
R src/conf.py => newspipe/conf.py +0 -0
R src/conf/conf.cfg-sample => newspipe/conf/conf.cfg-sample +0 -0
R src/crawler/default_crawler.py => newspipe/crawler/default_crawler.py +0 -0
R src/lib/__init__.py => newspipe/lib/__init__.py +0 -0
R src/lib/article_utils.py => newspipe/lib/article_utils.py +0 -0
R src/lib/data.py => newspipe/lib/data.py +0 -0
R src/lib/feed_utils.py => newspipe/lib/feed_utils.py +0 -0
R src/lib/misc_utils.py => newspipe/lib/misc_utils.py +0 -0
R src/lib/utils.py => newspipe/lib/utils.py +0 -0
R src/manager.py => newspipe/manager.py +0 -0
R src/notifications/emails.py => newspipe/notifications/emails.py +0 -0
R src/notifications/notifications.py => newspipe/notifications/notifications.py +0 -0
R src/runserver.py => newspipe/runserver.py +0 -0
R src/web/__init__.py => newspipe/web/__init__.py +0 -0
R src/web/controllers/__init__.py => newspipe/web/controllers/__init__.py +0 -0
R src/web/controllers/abstract.py => newspipe/web/controllers/abstract.py +0 -0
R src/web/controllers/article.py => newspipe/web/controllers/article.py +0 -0
R src/web/controllers/bookmark.py => newspipe/web/controllers/bookmark.py +0 -0
R src/web/controllers/category.py => newspipe/web/controllers/category.py +0 -0
R src/web/controllers/feed.py => newspipe/web/controllers/feed.py +0 -0
R src/web/controllers/icon.py => newspipe/web/controllers/icon.py +0 -0
R src/web/controllers/tag.py => newspipe/web/controllers/tag.py +0 -0
R src/web/controllers/user.py => newspipe/web/controllers/user.py +0 -0
R src/web/decorators.py => newspipe/web/decorators.py +0 -0
R src/web/forms.py => newspipe/web/forms.py +0 -0
R src/web/js/actions/MenuActions.js => newspipe/web/js/actions/MenuActions.js +0 -0
R src/web/js/actions/MiddlePanelActions.js => newspipe/web/js/actions/MiddlePanelActions.js +0 -0
R src/web/js/actions/RightPanelActions.js => newspipe/web/js/actions/RightPanelActions.js +0 -0
R src/web/js/app.js => newspipe/web/js/app.js +0 -0
R src/web/js/components/MainApp.react.js => newspipe/web/js/components/MainApp.react.js +0 -0
R src/web/js/components/Menu.react.js => newspipe/web/js/components/Menu.react.js +0 -0
R src/web/js/components/MiddlePanel.react.js => newspipe/web/js/components/MiddlePanel.react.js +0 -0
R src/web/js/components/Navbar.react.js => newspipe/web/js/components/Navbar.react.js +0 -0
R src/web/js/components/RightPanel.react.js => newspipe/web/js/components/RightPanel.react.js +0 -0
R src/web/js/components/time.react.js => newspipe/web/js/components/time.react.js +0 -0
R src/web/js/constants/JarrConstants.js => newspipe/web/js/constants/JarrConstants.js +0 -0
R src/web/js/dispatcher/JarrDispatcher.js => newspipe/web/js/dispatcher/JarrDispatcher.js +0 -0
R src/web/js/dispatcher/__tests__/AppDispatcher-test.js => newspipe/web/js/dispatcher/__tests__/AppDispatcher-test.js +0 -0
R src/web/js/stores/MenuStore.js => newspipe/web/js/stores/MenuStore.js +0 -0
R src/web/js/stores/MiddlePanelStore.js => newspipe/web/js/stores/MiddlePanelStore.js +0 -0
R src/web/js/stores/RightPanelStore.js => newspipe/web/js/stores/RightPanelStore.js +0 -0
R src/web/js/stores/__tests__/TodoStore-test.js => newspipe/web/js/stores/__tests__/TodoStore-test.js +0 -0
R src/web/lib/__init__.py => newspipe/web/lib/__init__.py +0 -0
R src/web/lib/user_utils.py => newspipe/web/lib/user_utils.py +0 -0
R src/web/lib/view_utils.py => newspipe/web/lib/view_utils.py +0 -0
R src/web/models/__init__.py => newspipe/web/models/__init__.py +0 -0
R src/web/models/article.py => newspipe/web/models/article.py +0 -0
R src/web/models/bookmark.py => newspipe/web/models/bookmark.py +0 -0
R src/web/models/category.py => newspipe/web/models/category.py +0 -0
R src/web/models/feed.py => newspipe/web/models/feed.py +0 -0
R src/web/models/icon.py => newspipe/web/models/icon.py +0 -0
R src/web/models/right_mixin.py => newspipe/web/models/right_mixin.py +0 -0
R src/web/models/role.py => newspipe/web/models/role.py +0 -0
R src/web/models/tag.py => newspipe/web/models/tag.py +0 -0
R src/web/models/user.py => newspipe/web/models/user.py +0 -0
A newspipe/web/static/css/bootstrap-theme.min.css => newspipe/web/static/css/bootstrap-theme.min.css +1 -0
@@ 0,0 1,1 @@
../bower_components/bootstrap/dist/css/bootstrap-theme.min.css
\ No newline at end of file

A newspipe/web/static/css/bootstrap-theme.min.css.map => newspipe/web/static/css/bootstrap-theme.min.css.map +1 -0
@@ 0,0 1,1 @@
../bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map
\ No newline at end of file

A newspipe/web/static/css/bootstrap.min.css => newspipe/web/static/css/bootstrap.min.css +1 -0
@@ 0,0 1,1 @@
../bower_components/bootstrap/dist/css/bootstrap.min.css
\ No newline at end of file

A newspipe/web/static/css/bootstrap.min.css.map => newspipe/web/static/css/bootstrap.min.css.map +1 -0
@@ 0,0 1,1 @@
../bower_components/bootstrap/dist/css/bootstrap.min.css.map
\ No newline at end of file

R src/web/static/css/customized-bootstrap.css => newspipe/web/static/css/customized-bootstrap.css +0 -0
R src/web/static/css/one-page-app.css => newspipe/web/static/css/one-page-app.css +0 -0
A newspipe/web/static/fonts => newspipe/web/static/fonts +1 -0
@@ 0,0 1,1 @@
bower_components/bootstrap/dist/fonts/
\ No newline at end of file

R src/web/static/img/favicon.ico => newspipe/web/static/img/favicon.ico +0 -0
R src/web/static/img/newspipe.png => newspipe/web/static/img/newspipe.png +0 -0
R src/web/static/img/newspipe.svg => newspipe/web/static/img/newspipe.svg +0 -0
R src/web/static/img/pinboard.png => newspipe/web/static/img/pinboard.png +0 -0
R src/web/static/img/reddit.png => newspipe/web/static/img/reddit.png +0 -0
R src/web/static/img/twitter.png => newspipe/web/static/img/twitter.png +0 -0
R src/web/static/js/articles.js => newspipe/web/static/js/articles.js +0 -0
R src/web/static/js/feed.js => newspipe/web/static/js/feed.js +0 -0
R src/web/static/js/jquery.js => newspipe/web/static/js/jquery.js +0 -0
R src/web/templates/about.html => newspipe/web/templates/about.html +0 -0
R src/web/templates/about_more.html => newspipe/web/templates/about_more.html +0 -0
R src/web/templates/admin/create_user.html => newspipe/web/templates/admin/create_user.html +0 -0
R src/web/templates/admin/dashboard.html => newspipe/web/templates/admin/dashboard.html +0 -0
R src/web/templates/article.html => newspipe/web/templates/article.html +0 -0
R src/web/templates/article_pub.html => newspipe/web/templates/article_pub.html +0 -0
R src/web/templates/bookmarks.html => newspipe/web/templates/bookmarks.html +0 -0
R src/web/templates/categories.html => newspipe/web/templates/categories.html +0 -0
R src/web/templates/duplicates.html => newspipe/web/templates/duplicates.html +0 -0
R src/web/templates/edit_bookmark.html => newspipe/web/templates/edit_bookmark.html +0 -0
R src/web/templates/edit_category.html => newspipe/web/templates/edit_category.html +0 -0
R src/web/templates/edit_feed.html => newspipe/web/templates/edit_feed.html +0 -0
R src/web/templates/emails/account_activation.txt => newspipe/web/templates/emails/account_activation.txt +0 -0
R src/web/templates/emails/new_password.txt => newspipe/web/templates/emails/new_password.txt +0 -0
R src/web/templates/errors/404.html => newspipe/web/templates/errors/404.html +0 -0
R src/web/templates/errors/500.html => newspipe/web/templates/errors/500.html +0 -0
R src/web/templates/feed.html => newspipe/web/templates/feed.html +0 -0
R src/web/templates/feed_list.html => newspipe/web/templates/feed_list.html +0 -0
R src/web/templates/feed_list_per_categories.html => newspipe/web/templates/feed_list_per_categories.html +0 -0
R src/web/templates/feed_list_simple.html => newspipe/web/templates/feed_list_simple.html +0 -0
R src/web/templates/feeds.html => newspipe/web/templates/feeds.html +0 -0
R src/web/templates/history.html => newspipe/web/templates/history.html +0 -0
R src/web/templates/home.html => newspipe/web/templates/home.html +0 -0
R src/web/templates/inactives.html => newspipe/web/templates/inactives.html +0 -0
R src/web/templates/layout.html => newspipe/web/templates/layout.html +0 -0
R src/web/templates/login.html => newspipe/web/templates/login.html +0 -0
R src/web/templates/management.html => newspipe/web/templates/management.html +0 -0
R src/web/templates/opml.xml => newspipe/web/templates/opml.xml +0 -0
R src/web/templates/popular.html => newspipe/web/templates/popular.html +0 -0
R src/web/templates/profile.html => newspipe/web/templates/profile.html +0 -0
R src/web/templates/profile_public.html => newspipe/web/templates/profile_public.html +0 -0
R src/web/templates/signup.html => newspipe/web/templates/signup.html +0 -0
R src/web/templates/user_stream.html => newspipe/web/templates/user_stream.html +0 -0
R src/web/translations/babel.cfg => newspipe/web/translations/babel.cfg +0 -0
R src/web/translations/fr/LC_MESSAGES/messages.mo => newspipe/web/translations/fr/LC_MESSAGES/messages.mo +0 -0
R src/web/translations/fr/LC_MESSAGES/messages.po => newspipe/web/translations/fr/LC_MESSAGES/messages.po +0 -0
R src/web/translations/internationalization.sh => newspipe/web/translations/internationalization.sh +0 -0
R src/web/translations/messages.pot => newspipe/web/translations/messages.pot +0 -0
R src/web/views/__init__.py => newspipe/web/views/__init__.py +0 -0
R src/web/views/admin.py => newspipe/web/views/admin.py +0 -0
R src/web/views/api/__init__.py => newspipe/web/views/api/__init__.py +0 -0
R src/web/views/api/v2/__init__.py => newspipe/web/views/api/v2/__init__.py +0 -0
R src/web/views/api/v2/article.py => newspipe/web/views/api/v2/article.py +0 -0
R src/web/views/api/v2/category.py => newspipe/web/views/api/v2/category.py +0 -0
R src/web/views/api/v2/common.py => newspipe/web/views/api/v2/common.py +0 -0
R src/web/views/api/v2/feed.py => newspipe/web/views/api/v2/feed.py +0 -0
R src/web/views/api/v3/__init__.py => newspipe/web/views/api/v3/__init__.py +0 -0
R src/web/views/api/v3/article.py => newspipe/web/views/api/v3/article.py +0 -0
R src/web/views/api/v3/common.py => newspipe/web/views/api/v3/common.py +0 -0
R src/web/views/api/v3/feed.py => newspipe/web/views/api/v3/feed.py +0 -0
R src/web/views/article.py => newspipe/web/views/article.py +0 -0
R src/web/views/bookmark.py => newspipe/web/views/bookmark.py +0 -0
R src/web/views/category.py => newspipe/web/views/category.py +0 -0
R src/web/views/common.py => newspipe/web/views/common.py +0 -0
R src/web/views/feed.py => newspipe/web/views/feed.py +0 -0
R src/web/views/home.py => newspipe/web/views/home.py +0 -0
R src/web/views/icon.py => newspipe/web/views/icon.py +0 -0
R src/web/views/session_mgmt.py => newspipe/web/views/session_mgmt.py +0 -0
R src/web/views/user.py => newspipe/web/views/user.py +0 -0
R src/web/views/views.py => newspipe/web/views/views.py +0 -0
A poetry.lock => poetry.lock +923 -0
@@ 0,0 1,923 @@
[[package]]
category = "main"
description = "Async http client/server framework (asyncio)"
name = "aiohttp"
optional = false
python-versions = ">=3.5.3"
version = "3.6.2"

[package.dependencies]
async-timeout = ">=3.0,<4.0"
attrs = ">=17.3.0"
chardet = ">=2.0,<4.0"
multidict = ">=4.5,<5.0"
yarl = ">=1.0,<2.0"

[package.extras]
speedups = ["aiodns", "brotlipy", "cchardet"]

[[package]]
category = "main"
description = "A database migration tool for SQLAlchemy."
name = "alembic"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.4.0"

[package.dependencies]
Mako = "*"
SQLAlchemy = ">=1.1.0"
python-dateutil = "*"
python-editor = ">=0.3"

[[package]]
category = "main"
description = "A library for parsing ISO 8601 strings."
name = "aniso8601"
optional = false
python-versions = "*"
version = "8.0.0"

[[package]]
category = "main"
description = "Timeout context manager for asyncio programs"
name = "async-timeout"
optional = false
python-versions = ">=3.5.3"
version = "3.0.1"

[[package]]
category = "main"
description = "Classes Without Boilerplate"
name = "attrs"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "19.3.0"

[package.extras]
azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"]
dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"]
docs = ["sphinx", "zope.interface"]
tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]

[[package]]
category = "main"
description = "Internationalization utilities"
name = "babel"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.8.0"

[package.dependencies]
pytz = ">=2015.7"

[[package]]
category = "main"
description = "Screen-scraping library"
name = "beautifulsoup4"
optional = false
python-versions = "*"
version = "4.8.2"

[package.dependencies]
soupsieve = ">=1.2"

[package.extras]
html5lib = ["html5lib"]
lxml = ["lxml"]

[[package]]
category = "main"
description = "Fast, simple object-to-object and broadcast signaling"
name = "blinker"
optional = false
python-versions = "*"
version = "1.4"

[[package]]
category = "main"
description = "Python package for providing Mozilla's CA Bundle."
name = "certifi"
optional = false
python-versions = "*"
version = "2019.11.28"

[[package]]
category = "main"
description = "Universal encoding detector for Python 2 and 3"
name = "chardet"
optional = false
python-versions = "*"
version = "3.0.4"

[[package]]
category = "main"
description = "Composable command line interface toolkit"
name = "click"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "7.0"

[[package]]
category = "main"
description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds"
name = "feedparser"
optional = false
python-versions = "*"
version = "5.2.1"

[[package]]
category = "main"
description = "A simple framework for building complex web applications."
name = "flask"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "1.1.1"

[package.dependencies]
Jinja2 = ">=2.10.1"
Werkzeug = ">=0.15"
click = ">=5.1"
itsdangerous = ">=0.24"

[package.extras]
dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"]
docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"]
dotenv = ["python-dotenv"]

[[package]]
category = "main"
description = "Adds i18n/l10n support to Flask applications"
name = "flask-babel"
optional = false
python-versions = "*"
version = "1.0.0"

[package.dependencies]
Babel = ">=2.3"
Flask = "*"
Jinja2 = ">=2.5"
pytz = "*"

[[package]]
category = "main"
description = "User session management for Flask"
name = "flask-login"
optional = false
python-versions = "*"
version = "0.5.0"

[package.dependencies]
Flask = "*"

[[package]]
category = "main"
description = "SQLAlchemy database migrations for Flask applications using Alembic"
name = "flask-migrate"
optional = false
python-versions = "*"
version = "2.5.2"

[package.dependencies]
Flask = ">=0.9"
Flask-SQLAlchemy = ">=1.0"
alembic = ">=0.7"

[[package]]
category = "main"
description = "Simple paginate support for flask"
name = "flask-paginate"
optional = false
python-versions = "*"
version = "0.5.5"

[package.dependencies]
Flask = "*"

[[package]]
category = "main"
description = "Identity management for flask"
name = "flask-principal"
optional = false
python-versions = "*"
version = "0.4.0"

[package.dependencies]
Flask = "*"
blinker = "*"

[[package]]
category = "main"
description = "Simple framework for creating REST APIs"
name = "flask-restful"
optional = false
python-versions = "*"
version = "0.3.8"

[package.dependencies]
Flask = ">=0.8"
aniso8601 = ">=0.82"
pytz = "*"
six = ">=1.3.0"

[package.extras]
docs = ["sphinx"]

[[package]]
category = "main"
description = "A Flask extension for easy ReSTful API generation"
name = "flask-restless"
optional = false
python-versions = "*"
version = "0.17.0"

[package.dependencies]
flask = ">=0.10"
mimerender = ">=0.5.2"
python-dateutil = ">2.0"
sqlalchemy = ">=0.8"

[[package]]
category = "main"
description = "Scripting support for Flask"
name = "flask-script"
optional = false
python-versions = "*"
version = "2.0.6"

[package.dependencies]
Flask = "*"

[[package]]
category = "main"
description = "Adds SQLAlchemy support to your Flask application."
name = "flask-sqlalchemy"
optional = false
python-versions = ">= 2.7, != 3.0.*, != 3.1.*, != 3.2.*, != 3.3.*"
version = "2.4.1"

[package.dependencies]
Flask = ">=0.10"
SQLAlchemy = ">=0.8.0"

[[package]]
category = "main"
description = "Force SSL on your Flask app."
name = "flask-sslify"
optional = false
python-versions = "*"
version = "0.1.5"

[package.dependencies]
Flask = "*"

[[package]]
category = "main"
description = "Simple integration of Flask and WTForms."
name = "flask-wtf"
optional = false
python-versions = "*"
version = "0.14.3"

[package.dependencies]
Flask = "*"
WTForms = "*"
itsdangerous = "*"

[[package]]
category = "main"
description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "2.9"

[[package]]
category = "main"
description = "Various helpers to pass data to untrusted environments and back."
name = "itsdangerous"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.1.0"

[[package]]
category = "main"
description = "A very fast and expressive template engine."
name = "jinja2"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "2.11.1"

[package.dependencies]
MarkupSafe = ">=0.23"

[package.extras]
i18n = ["Babel (>=0.8)"]

[[package]]
category = "main"
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
name = "lxml"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
version = "4.5.0"

[package.extras]
cssselect = ["cssselect (>=0.7)"]
html5 = ["html5lib"]
htmlsoup = ["beautifulsoup4"]
source = ["Cython (>=0.29.7)"]

[[package]]
category = "main"
description = "A super-fast templating language that borrows the  best ideas from the existing templating languages."
name = "mako"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.1.1"

[package.dependencies]
MarkupSafe = ">=0.9.2"

[package.extras]
babel = ["babel"]
lingua = ["lingua"]

[[package]]
category = "main"
description = "Safely add untrusted strings to HTML/XML markup."
name = "markupsafe"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
version = "1.1.1"

[[package]]
category = "main"
description = "RESTful HTTP Content Negotiation for Flask, Bottle, web.py and webapp2 (Google App Engine)"
name = "mimerender"
optional = false
python-versions = "*"
version = "0.6.0"

[package.dependencies]
python_mimeparse = ">=0.1.4"

[[package]]
category = "main"
description = "multidict implementation"
name = "multidict"
optional = false
python-versions = ">=3.5"
version = "4.7.5"

[[package]]
category = "main"
description = "Lightweight OPML parsing."
name = "opml"
optional = false
python-versions = "*"
version = "0.5"

[package.dependencies]
lxml = "*"
setuptools = "*"

[[package]]
category = "main"
description = "psycopg2 - Python-PostgreSQL Database Adapter"
name = "psycopg2-binary"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
version = "2.8.4"

[[package]]
category = "dev"
description = "Python interface to Graphviz's Dot"
name = "pydot"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.4.1"

[package.dependencies]
pyparsing = ">=2.1.4"

[[package]]
category = "dev"
description = "Python parsing module"
name = "pyparsing"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
version = "2.4.6"

[[package]]
category = "main"
description = "Extensions to the standard Python datetime module"
name = "python-dateutil"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
version = "2.8.1"

[package.dependencies]
six = ">=1.5"

[[package]]
category = "main"
description = "Programmatically open an editor, capture the result."
name = "python-editor"
optional = false
python-versions = "*"
version = "1.0.4"

[[package]]
category = "main"
description = "HTTP REST client, simplified for Python"
name = "python-http-client"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "3.2.5"

[[package]]
category = "main"
description = "A module provides basic functions for parsing mime-type names and matching them against a list of media-ranges."
name = "python-mimeparse"
optional = false
python-versions = "*"
version = "1.6.0"

[[package]]
category = "main"
description = "World timezone definitions, modern and historical"
name = "pytz"
optional = false
python-versions = "*"
version = "2019.3"

[[package]]
category = "main"
description = "Python HTTP for Humans."
name = "requests"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "2.23.0"

[package.dependencies]
certifi = ">=2017.4.17"
chardet = ">=3.0.2,<4"
idna = ">=2.5,<3"
urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"

[package.extras]
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]

[[package]]
category = "main"
description = "Asynchronous Python HTTP for Humans."
name = "requests-futures"
optional = false
python-versions = "*"
version = "1.0.0"

[package.dependencies]
requests = ">=1.2.0"

[[package]]
category = "main"
description = "Twilio SendGrid library for Python"
name = "sendgrid"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "6.1.2"

[package.dependencies]
python-http-client = ">=3.2.1"

[[package]]
category = "main"
description = "Python 2 and 3 compatibility utilities"
name = "six"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
version = "1.14.0"

[[package]]
category = "main"
description = "A modern CSS selector implementation for Beautiful Soup."
name = "soupsieve"
optional = false
python-versions = ">=3.5"
version = "2.0"

[[package]]
category = "main"
description = "Database Abstraction Library"
name = "sqlalchemy"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "1.3.13"

[package.extras]
mssql = ["pyodbc"]
mssql_pymssql = ["pymssql"]
mssql_pyodbc = ["pyodbc"]
mysql = ["mysqlclient"]
oracle = ["cx-oracle"]
postgresql = ["psycopg2"]
postgresql_pg8000 = ["pg8000"]
postgresql_psycopg2binary = ["psycopg2-binary"]
postgresql_psycopg2cffi = ["psycopg2cffi"]
pymysql = ["pymysql"]

[[package]]
category = "dev"
description = "Turn SQLAlchemy DB Model into a graph"
name = "sqlalchemy-schemadisplay"
optional = false
python-versions = "*"
version = "1.3"

[package.dependencies]
pydot = "*"
setuptools = "*"

[[package]]
category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
version = "1.25.8"

[package.extras]
brotli = ["brotlipy (>=0.6.0)"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]

[[package]]
category = "main"
description = "The comprehensive WSGI web application library."
name = "werkzeug"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "1.0.0"

[package.extras]
dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"]
watchdog = ["watchdog"]

[[package]]
category = "main"
description = "A flexible forms validation and rendering library for Python web development."
name = "wtforms"
optional = false
python-versions = "*"
version = "2.2.1"

[package.extras]
locale = ["Babel (>=1.3)"]

[[package]]
category = "main"
description = "Yet another URL library"
name = "yarl"
optional = false
python-versions = ">=3.5"
version = "1.4.2"

[package.dependencies]
idna = ">=2.0"
multidict = ">=4.0"

[metadata]
content-hash = "6714462ca1b9ea98f6ec5d7ef69d7ddbed1ae0687cbff95accbcda74074714a2"
python-versions = "^3.8"

[metadata.files]
aiohttp = [
    {file = "aiohttp-3.6.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e"},
    {file = "aiohttp-3.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec"},
    {file = "aiohttp-3.6.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48"},
    {file = "aiohttp-3.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59"},
    {file = "aiohttp-3.6.2-cp36-cp36m-win32.whl", hash = "sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a"},
    {file = "aiohttp-3.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17"},
    {file = "aiohttp-3.6.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a"},
    {file = "aiohttp-3.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd"},
    {file = "aiohttp-3.6.2-cp37-cp37m-win32.whl", hash = "sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"},
    {file = "aiohttp-3.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654"},
    {file = "aiohttp-3.6.2-py3-none-any.whl", hash = "sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4"},
    {file = "aiohttp-3.6.2.tar.gz", hash = "sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326"},
]
alembic = [
    {file = "alembic-1.4.0.tar.gz", hash = "sha256:2df2519a5b002f881517693b95626905a39c5faf4b5a1f94de4f1441095d1d26"},
]
aniso8601 = [
    {file = "aniso8601-8.0.0-py2.py3-none-any.whl", hash = "sha256:c033f63d028b9a58e3ab0c2c7d0532ab4bfa7452bfc788fbfe3ddabd327b181a"},
    {file = "aniso8601-8.0.0.tar.gz", hash = "sha256:529dcb1f5f26ee0df6c0a1ee84b7b27197c3c50fc3a6321d66c544689237d072"},
]
async-timeout = [
    {file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"},
    {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"},
]
attrs = [
    {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"},
    {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"},
]
babel = [
    {file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"},
    {file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"},
]
beautifulsoup4 = [
    {file = "beautifulsoup4-4.8.2-py2-none-any.whl", hash = "sha256:e1505eeed31b0f4ce2dbb3bc8eb256c04cc2b3b72af7d551a4ab6efd5cbe5dae"},
    {file = "beautifulsoup4-4.8.2-py3-none-any.whl", hash = "sha256:9fbb4d6e48ecd30bcacc5b63b94088192dcda178513b2ae3c394229f8911b887"},
    {file = "beautifulsoup4-4.8.2.tar.gz", hash = "sha256:05fd825eb01c290877657a56df4c6e4c311b3965bda790c613a3d6fb01a5462a"},
]
blinker = [
    {file = "blinker-1.4.tar.gz", hash = "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"},
]
certifi = [
    {file = "certifi-2019.11.28-py2.py3-none-any.whl", hash = "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3"},
    {file = "certifi-2019.11.28.tar.gz", hash = "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"},
]
chardet = [
    {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"},
    {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"},
]
click = [
    {file = "Click-7.0-py2.py3-none-any.whl", hash = "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13"},
    {file = "Click-7.0.tar.gz", hash = "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"},
]
feedparser = [
    {file = "feedparser-5.2.1.tar.bz2", hash = "sha256:ce875495c90ebd74b179855449040003a1beb40cd13d5f037a0654251e260b02"},
    {file = "feedparser-5.2.1.tar.gz", hash = "sha256:bd030652c2d08532c034c27fcd7c85868e7fa3cb2b17f230a44a6bbc92519bf9"},
    {file = "feedparser-5.2.1.zip", hash = "sha256:cd2485472e41471632ed3029d44033ee420ad0b57111db95c240c9160a85831c"},
]
flask = [
    {file = "Flask-1.1.1-py2.py3-none-any.whl", hash = "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6"},
    {file = "Flask-1.1.1.tar.gz", hash = "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52"},
]
flask-babel = [
    {file = "Flask-Babel-1.0.0.tar.gz", hash = "sha256:d6a70468f9a8919d59fba2a291a003da3a05ff884275dddbd965f3b98b09ab3e"},
    {file = "Flask_Babel-1.0.0-py3-none-any.whl", hash = "sha256:247f4ec34cf605d03781f480bccb1a5acb719df1d1a2a743c091ab3db5d5fde2"},
]
flask-login = [
    {file = "Flask-Login-0.5.0.tar.gz", hash = "sha256:6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b"},
    {file = "Flask_Login-0.5.0-py2.py3-none-any.whl", hash = "sha256:7451b5001e17837ba58945aead261ba425fdf7b4f0448777e597ddab39f4fba0"},
]
flask-migrate = [
    {file = "Flask-Migrate-2.5.2.tar.gz", hash = "sha256:a96ff1875a49a40bd3e8ac04fce73fdb0870b9211e6168608cbafa4eb839d502"},
    {file = "Flask_Migrate-2.5.2-py2.py3-none-any.whl", hash = "sha256:6fb038be63d4c60727d5dfa5f581a6189af5b4e2925bc378697b4f0a40cfb4e1"},
]
flask-paginate = [
    {file = "flask_paginate-0.5.5-py2.py3-none-any.whl", hash = "sha256:d2aa07b4ef27f56f973482aaa06a0d93dc769a3e4d3e9c382a305ab72ac38ad9"},
]
flask-principal = [
    {file = "Flask-Principal-0.4.0.tar.gz", hash = "sha256:f5d6134b5caebfdbb86f32d56d18ee44b080876a27269560a96ea35f75c99453"},
]
flask-restful = [
    {file = "Flask-RESTful-0.3.8.tar.gz", hash = "sha256:5ea9a5991abf2cb69b4aac19793faac6c032300505b325687d7c305ffaa76915"},
    {file = "Flask_RESTful-0.3.8-py2.py3-none-any.whl", hash = "sha256:d891118b951921f1cec80cabb4db98ea6058a35e6404788f9e70d5b243813ec2"},
]
flask-restless = [
    {file = "Flask-Restless-0.17.0.tar.gz", hash = "sha256:1de47fe80abd47239c9a1804e0ba5da1d23b9f40cfc26202d16bed37f178c2b6"},
]
flask-script = [
    {file = "Flask-Script-2.0.6.tar.gz", hash = "sha256:6425963d91054cfcc185807141c7314a9c5ad46325911bd24dcb489bd0161c65"},
]
flask-sqlalchemy = [
    {file = "Flask-SQLAlchemy-2.4.1.tar.gz", hash = "sha256:6974785d913666587949f7c2946f7001e4fa2cb2d19f4e69ead02e4b8f50b33d"},
    {file = "Flask_SQLAlchemy-2.4.1-py2.py3-none-any.whl", hash = "sha256:0078d8663330dc05a74bc72b3b6ddc441b9a744e2f56fe60af1a5bfc81334327"},
]
flask-sslify = [
    {file = "Flask-SSLify-0.1.5.tar.gz", hash = "sha256:d33e1d3c09cd95154176aa8a7319418e52129fc482dd56d8a8ad7c24500d543e"},
]
flask-wtf = [
    {file = "Flask-WTF-0.14.3.tar.gz", hash = "sha256:d417e3a0008b5ba583da1763e4db0f55a1269d9dd91dcc3eb3c026d3c5dbd720"},
    {file = "Flask_WTF-0.14.3-py2.py3-none-any.whl", hash = "sha256:57b3faf6fe5d6168bda0c36b0df1d05770f8e205e18332d0376ddb954d17aef2"},
]
idna = [
    {file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"},
    {file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"},
]
itsdangerous = [
    {file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"},
    {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"},
]
jinja2 = [
    {file = "Jinja2-2.11.1-py2.py3-none-any.whl", hash = "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"},
    {file = "Jinja2-2.11.1.tar.gz", hash = "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250"},
]
lxml = [
    {file = "lxml-4.5.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0701f7965903a1c3f6f09328c1278ac0eee8f56f244e66af79cb224b7ef3801c"},
    {file = "lxml-4.5.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:06d4e0bbb1d62e38ae6118406d7cdb4693a3fa34ee3762238bcb96c9e36a93cd"},
    {file = "lxml-4.5.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5828c7f3e615f3975d48f40d4fe66e8a7b25f16b5e5705ffe1d22e43fb1f6261"},
    {file = "lxml-4.5.0-cp27-cp27m-win32.whl", hash = "sha256:afdb34b715daf814d1abea0317b6d672476b498472f1e5aacbadc34ebbc26e89"},
    {file = "lxml-4.5.0-cp27-cp27m-win_amd64.whl", hash = "sha256:585c0869f75577ac7a8ff38d08f7aac9033da2c41c11352ebf86a04652758b7a"},
    {file = "lxml-4.5.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:8a0ebda56ebca1a83eb2d1ac266649b80af8dd4b4a3502b2c1e09ac2f88fe128"},
    {file = "lxml-4.5.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:fe976a0f1ef09b3638778024ab9fb8cde3118f203364212c198f71341c0715ca"},
    {file = "lxml-4.5.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7bc1b221e7867f2e7ff1933165c0cec7153dce93d0cdba6554b42a8beb687bdb"},
    {file = "lxml-4.5.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:d068f55bda3c2c3fcaec24bd083d9e2eede32c583faf084d6e4b9daaea77dde8"},
    {file = "lxml-4.5.0-cp35-cp35m-win32.whl", hash = "sha256:e4aa948eb15018a657702fee0b9db47e908491c64d36b4a90f59a64741516e77"},
    {file = "lxml-4.5.0-cp35-cp35m-win_amd64.whl", hash = "sha256:1f2c4ec372bf1c4a2c7e4bb20845e8bcf8050365189d86806bad1e3ae473d081"},
    {file = "lxml-4.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:5d467ce9c5d35b3bcc7172c06320dddb275fea6ac2037f72f0a4d7472035cea9"},
    {file = "lxml-4.5.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:95e67224815ef86924fbc2b71a9dbd1f7262384bca4bc4793645794ac4200717"},
    {file = "lxml-4.5.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ebec08091a22c2be870890913bdadd86fcd8e9f0f22bcb398abd3af914690c15"},
    {file = "lxml-4.5.0-cp36-cp36m-win32.whl", hash = "sha256:deadf4df349d1dcd7b2853a2c8796593cc346600726eff680ed8ed11812382a7"},
    {file = "lxml-4.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f2b74784ed7e0bc2d02bd53e48ad6ba523c9b36c194260b7a5045071abbb1012"},
    {file = "lxml-4.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fa071559f14bd1e92077b1b5f6c22cf09756c6de7139370249eb372854ce51e6"},
    {file = "lxml-4.5.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:edc15fcfd77395e24543be48871c251f38132bb834d9fdfdad756adb6ea37679"},
    {file = "lxml-4.5.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd52e796fee7171c4361d441796b64df1acfceb51f29e545e812f16d023c4bbc"},
    {file = "lxml-4.5.0-cp37-cp37m-win32.whl", hash = "sha256:90ed0e36455a81b25b7034038e40880189169c308a3df360861ad74da7b68c1a"},
    {file = "lxml-4.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:df533af6f88080419c5a604d0d63b2c33b1c0c4409aba7d0cb6de305147ea8c8"},
    {file = "lxml-4.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4b2c63cc7963aedd08a5f5a454c9f67251b1ac9e22fd9d72836206c42dc2a72"},
    {file = "lxml-4.5.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e5d842c73e4ef6ed8c1bd77806bf84a7cb535f9c0cf9b2c74d02ebda310070e1"},
    {file = "lxml-4.5.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:63dbc21efd7e822c11d5ddbedbbb08cd11a41e0032e382a0fd59b0b08e405a3a"},
    {file = "lxml-4.5.0-cp38-cp38-win32.whl", hash = "sha256:4235bc124fdcf611d02047d7034164897ade13046bda967768836629bc62784f"},
    {file = "lxml-4.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:d5b3c4b7edd2e770375a01139be11307f04341ec709cf724e0f26ebb1eef12c3"},
    {file = "lxml-4.5.0.tar.gz", hash = "sha256:8620ce80f50d023d414183bf90cc2576c2837b88e00bea3f33ad2630133bbb60"},
]
mako = [
    {file = "Mako-1.1.1.tar.gz", hash = "sha256:2984a6733e1d472796ceef37ad48c26f4a984bb18119bb2dbc37a44d8f6e75a4"},
]
markupsafe = [
    {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"},
    {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"},
    {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"},
    {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"},
    {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"},
    {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"},
    {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"},
    {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"},
    {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"},
    {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"},
    {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"},
    {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"},
    {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"},
    {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"},
    {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"},
    {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"},
    {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"},
    {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"},
    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"},
    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"},
    {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"},
    {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"},
    {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"},
    {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
    {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
]
mimerender = [
    {file = "mimerender-0.6.0.tar.gz", hash = "sha256:e7f1377efee18c3f562cee54907a3329223c824332889fb74b745ddfd0a9b1c6"},
]
multidict = [
    {file = "multidict-4.7.5-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:fc3b4adc2ee8474cb3cd2a155305d5f8eda0a9c91320f83e55748e1fcb68f8e3"},
    {file = "multidict-4.7.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:42f56542166040b4474c0c608ed051732033cd821126493cf25b6c276df7dd35"},
    {file = "multidict-4.7.5-cp35-cp35m-win32.whl", hash = "sha256:7774e9f6c9af3f12f296131453f7b81dabb7ebdb948483362f5afcaac8a826f1"},
    {file = "multidict-4.7.5-cp35-cp35m-win_amd64.whl", hash = "sha256:c2c37185fb0af79d5c117b8d2764f4321eeb12ba8c141a95d0aa8c2c1d0a11dd"},
    {file = "multidict-4.7.5-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:e439c9a10a95cb32abd708bb8be83b2134fa93790a4fb0535ca36db3dda94d20"},
    {file = "multidict-4.7.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:85cb26c38c96f76b7ff38b86c9d560dea10cf3459bb5f4caf72fc1bb932c7136"},
    {file = "multidict-4.7.5-cp36-cp36m-win32.whl", hash = "sha256:620b37c3fea181dab09267cd5a84b0f23fa043beb8bc50d8474dd9694de1fa6e"},
    {file = "multidict-4.7.5-cp36-cp36m-win_amd64.whl", hash = "sha256:6e6fef114741c4d7ca46da8449038ec8b1e880bbe68674c01ceeb1ac8a648e78"},
    {file = "multidict-4.7.5-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:a326f4240123a2ac66bb163eeba99578e9d63a8654a59f4688a79198f9aa10f8"},
    {file = "multidict-4.7.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dc561313279f9d05a3d0ffa89cd15ae477528ea37aa9795c4654588a3287a9ab"},
    {file = "multidict-4.7.5-cp37-cp37m-win32.whl", hash = "sha256:4b7df040fb5fe826d689204f9b544af469593fb3ff3a069a6ad3409f742f5928"},
    {file = "multidict-4.7.5-cp37-cp37m-win_amd64.whl", hash = "sha256:317f96bc0950d249e96d8d29ab556d01dd38888fbe68324f46fd834b430169f1"},
    {file = "multidict-4.7.5-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:b51249fdd2923739cd3efc95a3d6c363b67bbf779208e9f37fd5e68540d1a4d4"},
    {file = "multidict-4.7.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ae402f43604e3b2bc41e8ea8b8526c7fa7139ed76b0d64fc48e28125925275b2"},
    {file = "multidict-4.7.5-cp38-cp38-win32.whl", hash = "sha256:bb519becc46275c594410c6c28a8a0adc66fe24fef154a9addea54c1adb006f5"},
    {file = "multidict-4.7.5-cp38-cp38-win_amd64.whl", hash = "sha256:544fae9261232a97102e27a926019100a9db75bec7b37feedd74b3aa82f29969"},
    {file = "multidict-4.7.5.tar.gz", hash = "sha256:aee283c49601fa4c13adc64c09c978838a7e812f85377ae130a24d7198c0331e"},
]
opml = [
    {file = "opml-0.5-py2.5.egg", hash = "sha256:9d92806e32068ae5eb2d8826b54d3eeaad1d57b9d6c9cbdc28b57369f85c1222"},
    {file = "opml-0.5.tar.gz", hash = "sha256:db1eef2a251b8af33e2eabb62baf922006dbd8c66c742931090e331a0362a770"},
]
psycopg2-binary = [
    {file = "psycopg2-binary-2.8.4.tar.gz", hash = "sha256:3a2522b1d9178575acee4adf8fd9f979f9c0449b00b4164bb63c3475ea6528ed"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:890167d5091279a27e2505ff0e1fb273f8c48c41d35c5b92adbf4af80e6b2ed6"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:dbc5cd56fff1a6152ca59445178652756f4e509f672e49ccdf3d79c1043113a4"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:7f42a8490c4fe854325504ce7a6e4796b207960dabb2cbafe3c3959cb00d1d7e"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27m-win32.whl", hash = "sha256:8578d6b8192e4c805e85f187bc530d0f52ba86c39172e61cd51f68fddd648103"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27m-win_amd64.whl", hash = "sha256:5dd90c5438b4f935c9d01fcbad3620253da89d19c1f5fca9158646407ed7df35"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9aadff9032e967865f9778485571e93908d27dab21d0fdfdec0ca779bb6f8ad9"},
    {file = "psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:659c815b5b8e2a55193ede2795c1e2349b8011497310bb936da7d4745652823b"},
    {file = "psycopg2_binary-2.8.4-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:2166e770cb98f02ed5ee2b0b569d40db26788e0bf2ec3ae1a0d864ea6f1d8309"},
    {file = "psycopg2_binary-2.8.4-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:7e6e3c52e6732c219c07bd97fff6c088f8df4dae3b79752ee3a817e6f32e177e"},
    {file = "psycopg2_binary-2.8.4-cp34-cp34m-win32.whl", hash = "sha256:040234f8a4a8dfd692662a8308d78f63f31a97e1c42d2480e5e6810c48966a29"},
    {file = "psycopg2_binary-2.8.4-cp34-cp34m-win_amd64.whl", hash = "sha256:69b13fdf12878b10dc6003acc8d0abf3ad93e79813fd5f3812497c1c9fb9be49"},
    {file = "psycopg2_binary-2.8.4-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:19dc39616850342a2a6db70559af55b22955f86667b5f652f40c0e99253d9881"},
    {file = "psycopg2_binary-2.8.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:9f24f383a298a0c0f9b3113b982e21751a8ecde6615494a3f1470eb4a9d70e9e"},
    {file = "psycopg2_binary-2.8.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:eaed1c65f461a959284649e37b5051224f4db6ebdc84e40b5e65f2986f101a08"},
    {file = "psycopg2_binary-2.8.4-cp35-cp35m-win32.whl", hash = "sha256:4c6717962247445b4f9e21c962ea61d2e884fc17df5ddf5e35863b016f8a1f03"},
    {file = "psycopg2_binary-2.8.4-cp35-cp35m-win_amd64.whl", hash = "sha256:84156313f258eafff716b2961644a4483a9be44a5d43551d554844d15d4d224e"},
    {file = "psycopg2_binary-2.8.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3b5deaa3ee7180585a296af33e14c9b18c218d148e735c7accf78130765a47e3"},
    {file = "psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5057669b6a66aa9ca118a2a860159f0ee3acf837eda937bdd2a64f3431361a2d"},
    {file = "psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:afd96845e12638d2c44d213d4810a08f4dc4a563f9a98204b7428e567014b1cd"},
    {file = "psycopg2_binary-2.8.4-cp36-cp36m-win32.whl", hash = "sha256:a73021b44813b5c84eda4a3af5826dd72356a900bac9bd9dd1f0f81ee1c22c2f"},
    {file = "psycopg2_binary-2.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:407af6d7e46593415f216c7f56ba087a9a42bd6dc2ecb86028760aa45b802bd7"},
    {file = "psycopg2_binary-2.8.4-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3aa773580f85a28ffdf6f862e59cb5a3cc7ef6885121f2de3fca8d6ada4dbf3b"},
    {file = "psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:eac8a3499754790187bb00574ab980df13e754777d346f85e0ff6df929bcd964"},
    {file = "psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7a1cb80e35e1ccea3e11a48afe65d38744a0e0bde88795cc56a4d05b6e4f9d70"},
    {file = "psycopg2_binary-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:086f7e89ec85a6704db51f68f0dcae432eff9300809723a6e8782c41c2f48e03"},
    {file = "psycopg2_binary-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b73ddf033d8cd4cc9dfed6324b1ad2a89ba52c410ef6877998422fcb9c23e3a8"},
    {file = "psycopg2_binary-2.8.4-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:4c3c09fb674401f630626310bcaf6cd6285daf0d5e4c26d6e55ca26a2734e39b"},
    {file = "psycopg2_binary-2.8.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:18ca813fdb17bc1db73fe61b196b05dd1ca2165b884dd5ec5568877cabf9b039"},
    {file = "psycopg2_binary-2.8.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:50446fae5681fc99f87e505d4e77c9407e683ab60c555ec302f9ac9bffa61103"},
    {file = "psycopg2_binary-2.8.4-cp38-cp38-win32.whl", hash = "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1"},
    {file = "psycopg2_binary-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f"},
]
pydot = [
    {file = "pydot-1.4.1-py2.py3-none-any.whl", hash = "sha256:67be714300c78fda5fd52f79ec994039e3f76f074948c67b5ff539b433ad354f"},
    {file = "pydot-1.4.1.tar.gz", hash = "sha256:d49c9d4dd1913beec2a997f831543c8cbd53e535b1a739e921642fe416235f01"},
]
pyparsing = [
    {file = "pyparsing-2.4.6-py2.py3-none-any.whl", hash = "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"},
    {file = "pyparsing-2.4.6.tar.gz", hash = "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f"},
]
python-dateutil = [
    {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"},
    {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"},
]
python-editor = [
    {file = "python-editor-1.0.4.tar.gz", hash = "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"},
    {file = "python_editor-1.0.4-py2-none-any.whl", hash = "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"},
    {file = "python_editor-1.0.4-py2.7.egg", hash = "sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522"},
    {file = "python_editor-1.0.4-py3-none-any.whl", hash = "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d"},
    {file = "python_editor-1.0.4-py3.5.egg", hash = "sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77"},
]
python-http-client = [
    {file = "python_http_client-3.2.5.tar.gz", hash = "sha256:10bfbc7ecd25e55215680ce2827b1a3bf4e06ba4a59758039d047d6104b6f169"},
]
python-mimeparse = [
    {file = "python-mimeparse-1.6.0.tar.gz", hash = "sha256:76e4b03d700a641fd7761d3cd4fdbbdcd787eade1ebfac43f877016328334f78"},
    {file = "python_mimeparse-1.6.0-py2.py3-none-any.whl", hash = "sha256:a295f03ff20341491bfe4717a39cd0a8cc9afad619ba44b77e86b0ab8a2b8282"},
]
pytz = [
    {file = "pytz-2019.3-py2.py3-none-any.whl", hash = "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d"},
    {file = "pytz-2019.3.tar.gz", hash = "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"},
]
requests = [
    {file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"},
    {file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"},
]
requests-futures = [
    {file = "requests-futures-1.0.0.tar.gz", hash = "sha256:35547502bf1958044716a03a2f47092a89efe8f9789ab0c4c528d9c9c30bc148"},
]
sendgrid = [
    {file = "sendgrid-6.1.2-py3-none-any.whl", hash = "sha256:e2b8bd90522f22a22d2557aee9cb77d0c372a8c4ca35e65d062b4ecaf0b9a4bd"},
    {file = "sendgrid-6.1.2-py3.6.egg", hash = "sha256:faa8105a36cc8a02be4f4bbe22816d1d1c8985bbc7cc9f8bb4195870d7cff7e5"},
    {file = "sendgrid-6.1.2.tar.gz", hash = "sha256:8112a3e2edd4cef208ed46335f058d2782397b395b96a472dcfd5e2618cf621b"},
]
six = [
    {file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"},
    {file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"},
]
soupsieve = [
    {file = "soupsieve-2.0-py2.py3-none-any.whl", hash = "sha256:fcd71e08c0aee99aca1b73f45478549ee7e7fc006d51b37bec9e9def7dc22b69"},
    {file = "soupsieve-2.0.tar.gz", hash = "sha256:e914534802d7ffd233242b785229d5ba0766a7f487385e3f714446a07bf540ae"},
]
sqlalchemy = [
    {file = "SQLAlchemy-1.3.13.tar.gz", hash = "sha256:64a7b71846db6423807e96820993fa12a03b89127d278290ca25c0b11ed7b4fb"},
]
sqlalchemy-schemadisplay = [
    {file = "sqlalchemy_schemadisplay-1.3.tar.gz", hash = "sha256:0a9f26d77be9d92c9564d87cc17668fe141a816036c5f5d7c8cb053b253957e0"},
    {file = "sqlalchemy_schemadisplay-1.3.zip", hash = "sha256:b38f0d5947bd3ed9e2b180b4d8c9cd44c9d09edc0ce26722d89be4cc264903b5"},
]
urllib3 = [
    {file = "urllib3-1.25.8-py2.py3-none-any.whl", hash = "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc"},
    {file = "urllib3-1.25.8.tar.gz", hash = "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"},
]
werkzeug = [
    {file = "Werkzeug-1.0.0-py2.py3-none-any.whl", hash = "sha256:6dc65cf9091cf750012f56f2cad759fa9e879f511b5ff8685e456b4e3bf90d16"},
    {file = "Werkzeug-1.0.0.tar.gz", hash = "sha256:169ba8a33788476292d04186ab33b01d6add475033dfc07215e6d219cc077096"},
]
wtforms = [
    {file = "WTForms-2.2.1-py2.py3-none-any.whl", hash = "sha256:e3ee092c827582c50877cdbd49e9ce6d2c5c1f6561f849b3b068c1b8029626f1"},
    {file = "WTForms-2.2.1.tar.gz", hash = "sha256:0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61"},
]
yarl = [
    {file = "yarl-1.4.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b"},
    {file = "yarl-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1"},
    {file = "yarl-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080"},
    {file = "yarl-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a"},
    {file = "yarl-1.4.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f"},
    {file = "yarl-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea"},
    {file = "yarl-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb"},
    {file = "yarl-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70"},
    {file = "yarl-1.4.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d"},
    {file = "yarl-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce"},
    {file = "yarl-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2"},
    {file = "yarl-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce"},
    {file = "yarl-1.4.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b"},
    {file = "yarl-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae"},
    {file = "yarl-1.4.2-cp38-cp38-win32.whl", hash = "sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462"},
    {file = "yarl-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6"},
    {file = "yarl-1.4.2.tar.gz", hash = "sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b"},
]

A pyproject.toml => pyproject.toml +44 -0
@@ 0,0 1,44 @@
[tool.poetry]
name = "newspipe"
version = "8.0.0"
description = "Newspipe is a web-based news aggregator and reader."
authors = ["Cédric Bonhomme <cedric@cedricbonhomme.org>"]
license = "AGPL-3.0-or-later"

[tool.poetry.dependencies]
python = "^3.8"
aiohttp = "^3.6.2"
requests = "^2.23.0"
chardet = "^3.0.4"
requests-futures = "^1.0.0"
feedparser = "^5.2.1"
beautifulsoup4 = "^4.8.2"
lxml = "^4.5.0"
opml = "^0.5"
SQLAlchemy = "^1.3.13"
alembic = "^1.4.0"
Flask = "^1.1.1"
Flask-SQLAlchemy = "^2.4.1"
Flask-Login = "^0.5.0"
Flask-Principal = "^0.4.0"
Flask-WTF = "^0.14.3"
Flask-RESTful = "^0.3.8"
Flask-Restless = "^0.17.0"
Flask-paginate = "^0.5.5"
Flask-Babel = "^1.0.0"
Flask-SSLify = "^0.1.5"
Flask-Migrate = "^2.5.2"
Flask-Script = "^2.0.6"
WTForms = "^2.2.1"
sendgrid = "^6.1.2"
python-dateutil = "^2.8.1"
psycopg2-binary = "^2.8.4"



[tool.poetry.dev-dependencies]
sqlalchemy-schemadisplay = "^1.3"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

D runtime.txt => runtime.txt +0 -1
@@ 1,1 0,0 @@
python-3.8.0

D src/web/static/css/bootstrap-theme.min.css => src/web/static/css/bootstrap-theme.min.css +0 -1
@@ 1,1 0,0 @@
../bower_components/bootstrap/dist/css/bootstrap-theme.min.css
\ No newline at end of file

D src/web/static/css/bootstrap-theme.min.css.map => src/web/static/css/bootstrap-theme.min.css.map +0 -1
@@ 1,1 0,0 @@
../bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map
\ No newline at end of file

D src/web/static/css/bootstrap.min.css => src/web/static/css/bootstrap.min.css +0 -1
@@ 1,1 0,0 @@
../bower_components/bootstrap/dist/css/bootstrap.min.css
\ No newline at end of file

D src/web/static/css/bootstrap.min.css.map => src/web/static/css/bootstrap.min.css.map +0 -1
@@ 1,1 0,0 @@
../bower_components/bootstrap/dist/css/bootstrap.min.css.map
\ No newline at end of file

D src/web/static/fonts => src/web/static/fonts +0 -1
@@ 1,1 0,0 @@
bower_components/bootstrap/dist/fonts/
\ No newline at end of file