{ "info": { "author": "Nathan Henrie", "author_email": "nate@n8henrie.com", "bugtrack_url": null, "classifiers": [ "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "EyeFlask\n========\n\n|Build Status|\n\nSimple `Flask `__-based Python3 EyeFi server\n\n- Documentation:\n `eyeflask.readthedocs.org `__\n\nIntroduction\n------------\n\nI use an Eye-Fi SD card in my portable scanner. Unfortunately, it used\nto upload directly to Evernote, but no longer supports uploading\ndirectly to any service that suits my needs. Additionally, they don't\nprovide a Linux version of their server software.\n\nEyeFlask is a simple Flask-based Eye-Fi server written for Python >=\n3.4. The Eye-Fi card can connect to it and will upload images to the\nfolder specified in the config. EyeFlask attempts to verify the file\nintegrity using the same security protocols used by Eye-Fi Server.\n\nDependencies\n------------\n\n- Python >= 3.4\n- See ``requirements.txt``\n\nQuickstart\n----------\n\nUsing a virtual env is highly recommended. Since EyeFlask is Python 3.4+\nonly, there's no excuse not to use one!\n\n1. ``python3 -m venv venv`` on some systems may need to install venv for\n Python3.4 (e.g. ``sudo apt-get install python3.4-venv``)\n2. ``venv/bin/pip3 install eyeflask``\n3. Copy ``eyeflask/extras/eyeflask-sample.cfg`` to ``eyeflask.cfg``,\n modify with your values, and put it in `your instance\n folder `__\n4. Run: ``venv/bin/eyeflask``\n5. Scan some stuff, see if it ends up in your uploads folder\n\nDevelopment Setup\n~~~~~~~~~~~~~~~~~\n\n1. Clone the repo:\n ``git clone https://github.com/n8henrie/eyeflask && cd eyeflask``\n2. Make a virtualenv: ``python3 -m venv venv``\n3. Make an instance folder: ``mkdir -p instance``\n4. Copy the config sample:\n ``cp eyeflask/extras/eyeflask-sample.cfg instance/eyeflask.cfg``\n5. Edit the config to include your upload directory and upload\\_key (see\n below): ``vim instance/eyeflask.cfg``\n6. Install with dev dependencies: ``venv/bin/pip install .[dev]``\n7. Run: ``eyeflask`` (or ``venv/bin/python -m eyeflask.cli``)\n8. Scan some stuff, see if it ends up in your uploads folder\n\nConfiguration\n-------------\n\n- ``UPLOAD_KEY``: See FAQ, below\n- ``UPLOAD_FOLDER``: Destination folder for uploads. May optionally be\n a\n `strftime `__\n string to specify a subfolder format (e.g.\n \\`/path/to/eyeflask-uploads/%Y/%m-%d/')\n\nExtras\n------\n\nEyeFlask will help get the images uploaded and extracted to your server\n(e.g. a Raspberry Pi in my case), but what do to from there? If you're\nrunning Raspbian Jessie (and using systemd), I've included in the\n``extras`` folder a few files that may be of interested.\n\n- ``upload_scans.service`` will run a given script when called (e.g.\n ``sudo systemctl start upload_scans.service``)\n- ``upload_scans.timer`` is an example `systemd timer\n unit `__\n that will call ``upload_scans.service`` every 10 minutes\n- ``upload_scans.path`` is an example `systemd path\n unit `__\n that will call ``upload_scans.service`` every time a file changes in\n a watched directory\n\nPut together, this makes it *really* easy to put together a script to\n`upload new scans to a Dropbox\nfolder `__\nwhenever a new one is added, or whatever command you'd like to run on\nall your scans.\n\nI've also included ``eyeflask/extras/eyeflask.service``, which is a\nsample `systemd service\nfile `__\nto run EyeFlask at startup and restart it on errors.\n\nAcknowledgements\n----------------\n\nMuch of the code for EyeFlask came from or was inspired by the following\nprojects / links. Many thanks to the authors for their work! If I've\nforgotten anyone, let me know.\n\n- https://github.com/tachang/EyeFiServer\n- https://github.com/dgrant/eyefiserver2\n- https://code.google.com/archive/p/sceye-fi/wikis/UploadProtocol.wiki\n- https://launchpad.net/eyefi\n- https://code.google.com/archive/p/eyefiserver/\n- https://github.com/BrentSouza/WP7EyeFiConnector\n\nTroubleshooting / FAQ\n---------------------\n\nWhere do I find my upload key?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou'll need a supported platform (OS X or Windows) with\n``Eye-Fi Center.app`` installed, and need to have uploaded photos to\nthat computer at least once. This ensures everything is working, and\ngenerates the ``Settings.xml`` file, from which you need to copy the\nupload key into ``eyeflask.cfg``.\n\n- OS X: ``~/Library/Eye-Fi/Settings.xml``\n- Windows 7: ``C:\\Users\\[user]\\AppData\\Roaming\\Eye-Fi\\Settings.xml``\n (`source `__)\n- Windows XP:\n ``C:\\Documents and Settings\\[user]\\Application Data\\Eye-Fi\\Settings.xml``\n (`source `__)\n\nIs it okay to be running this with the built-in Flask server?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIt's not perfect, but it seems to work okay for me and my single Eye-Fi\ncard setup. You'd probably be better off running it behind\n`gunicorn `__ or a gunicorn / nginx setup, but I'm\nrunning it behind Flask alone for simplicity and because I haven't had\nany issues so far.\n\nIf you want to give it a go with gunicorn / nginx, I've included an\n*extremely* simplified nginx configuration file:\n``eyeflask/extras/nginx.conf``. After installing ``gunicorn`` into your\nvirtualenv, hopefully you'll be able to get it running behind nginx\nwithout much trouble with something like:\n\n::\n\n venv/bin/pip install gunicorn\n venv/bin/gunicorn 'eyeflask:create_app(\"instance/eyeflask.cfg\")'\n\nFor debugging you can also use the flags\n``--log-file=- --log-level=debug``.\n\nNB: I do **not** plan on providing support for nginx / gunicorn setups,\nas I don't know enough about it to be particularly helpful. I just\nverified that it seemed to work. (Just FYI, Gunicorn *without* nginx did\n**not** seem to work unless I used one of the async workers, kept\ngetting timeouts.)\n\nWhy am I getting repeat or unreliable file uploads on my Raspberry Pi?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nI'm not sure. I was getting *excellent* reliability when running\nEyeFlask on my Macbook Air and *very* poor reliability on my Raspberry\nPi B+ with EyeFlask 0.1.0. It seemed like the file would be uploaded\nexctracted without issue, but the EyeFi card kept sending the same file\nover and over, leading me to believe that the confirmation response\nwasn't getting received every time. I thought it might have something to\ndo with slow response times, so I did a little code optimization with\n0.1.1 which seems to have helped. I also gave up and put EyeFlask behind\na gunicorn / nginx setup, and between the two of these changes I have\nmuch better upload reliability.\n\n.. |Build Status| image:: https://travis-ci.org/n8henrie/eyeflask.svg?branch=master\n :target: https://travis-ci.org/n8henrie/eyeflask\n\n\n`Changelog `__\n=========================================\n\n0.1.3 :: 20170310\n-----------------\n\n- Add strftime based subfolders to config (see issue #2)\n- Encourage use of virtualenv in the README\n- Test docs creation in Travis\n- Fix some flake8 compliants\n\n0.1.2 :: 20170303\n-----------------\n\n- Python 3.6 compatibility\n- Stop using ``src/`` subdirectory\n- Try to fix some Pandoc exceptions\n\n0.1.1 :: 20160318\n-----------------\n\n- Use ``array.array`` instead of ``struct.iter_unpack`` for modest\n speed boost\n- Rename ``start_session`` to ``handle_SOAP`` -- because that's what it\n does\n- Extract the image from the tarfile data prior to writing to disk\n (eliminating the need to delete the tarfile afterwards)\n\n0.1.0 :: 20160227\n-----------------\n\n- Initial release to GitHub, PyPI\n\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/n8henrie/eyeflask", "keywords": "eyeflask eyefi flask", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "eyeflask", "package_url": "https://pypi.org/project/eyeflask/", "platform": "", "project_url": "https://pypi.org/project/eyeflask/", "project_urls": { "Homepage": "https://github.com/n8henrie/eyeflask" }, "release_url": "https://pypi.org/project/eyeflask/0.1.3/", "requires_dist": [ "Flask (==0.12)", "defusedxml (==0.5.0)", "Sphinx (==1.5.3); extra == 'dev'", "docutils (==0.13.1); extra == 'dev'", "flake8 (==3.3.0); extra == 'dev'", "pypandoc (==1.3.3); extra == 'dev'", "pytest (==3.0.6); extra == 'dev'", "recommonmark (==0.4.0); extra == 'dev'", "sphinx-rtd-theme (==0.2.4); extra == 'dev'", "tox (==2.6.0); extra == 'dev'", "twine (==1.8.1); extra == 'dev'" ], "requires_python": "", "summary": "Flask-based EyeFi Server", "version": "0.1.3" }, "last_serial": 2697779, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "05a93a7f9dfac8105af8e7eaab030674", "sha256": "a66a5f50195c1cdc550ed93c655de0b45469514a3ed5901d925ccf4fbf0bcf50" }, "downloads": -1, "filename": "eyeflask-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "05a93a7f9dfac8105af8e7eaab030674", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15896, "upload_time": "2016-02-27T21:58:01", "url": "https://files.pythonhosted.org/packages/2c/0e/e390851b5165c34df720cc15990732d481efb04e4208180b22b7ef31150a/eyeflask-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e8e8f53de496b0bddbd62da7f560cc9", "sha256": "e374f05ecfb2cb3b578c197cb08bb11c85862c4e59c6ed880058a77e6218635e" }, "downloads": -1, "filename": "eyeflask-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1e8e8f53de496b0bddbd62da7f560cc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20059, "upload_time": "2016-02-27T21:58:09", "url": "https://files.pythonhosted.org/packages/67/c6/3b30d5fd78e0b3f05355a73b2376c35de88e7b9e504fcb770ad91a160fc0/eyeflask-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "86ff3c6be299abc3b7c2138ed0ce493e", "sha256": "613c71546c107288ea1c5fc4bd6eccc4a4300c4e70d9b7845d10cd647c136951" }, "downloads": -1, "filename": "eyeflask-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "86ff3c6be299abc3b7c2138ed0ce493e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17102, "upload_time": "2016-06-27T19:32:53", "url": "https://files.pythonhosted.org/packages/ea/96/2f3ecb7be118fb9679e57f9a65b54fe1ac7ecf25ea5c222a3b7e592e1b4c/eyeflask-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea372aca22226f751fba028dad230bf1", "sha256": "ccce811ea4acc7d28d1067ce9a4de6cc81eb06225113c22f9ee60dffb5fe334e" }, "downloads": -1, "filename": "eyeflask-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ea372aca22226f751fba028dad230bf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21465, "upload_time": "2016-06-27T19:32:57", "url": "https://files.pythonhosted.org/packages/fb/38/a4f5e1e0c603731e4de4da9de6571f81c51a5311e8c51b6b14c60162fd2f/eyeflask-0.1.1.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "2e940bc4c433400b512da87100497824", "sha256": "fbcb7b5c877091b6aa8273fc8c2ad8d2bcb718c3dd578d9fdbdcb443cf57d508" }, "downloads": -1, "filename": "eyeflask-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2e940bc4c433400b512da87100497824", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20564, "upload_time": "2017-03-10T19:34:16", "url": "https://files.pythonhosted.org/packages/c2/61/dba21c7b8a2930fcecdb368a83b6eb5573c9277d0d13051ab7cae10b5e8e/eyeflask-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b916aaabc26238f2ac7b472b032087c5", "sha256": "be3bbc11816b79b2d88f9c9a6c52433d6896c2cf9e8fa3711a93aa58f617996f" }, "downloads": -1, "filename": "eyeflask-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b916aaabc26238f2ac7b472b032087c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23763, "upload_time": "2017-03-10T19:34:20", "url": "https://files.pythonhosted.org/packages/af/5a/9afde56485bcf8265977de3207609d884b05588d97f29a41f3303e645bab/eyeflask-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2e940bc4c433400b512da87100497824", "sha256": "fbcb7b5c877091b6aa8273fc8c2ad8d2bcb718c3dd578d9fdbdcb443cf57d508" }, "downloads": -1, "filename": "eyeflask-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2e940bc4c433400b512da87100497824", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20564, "upload_time": "2017-03-10T19:34:16", "url": "https://files.pythonhosted.org/packages/c2/61/dba21c7b8a2930fcecdb368a83b6eb5573c9277d0d13051ab7cae10b5e8e/eyeflask-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b916aaabc26238f2ac7b472b032087c5", "sha256": "be3bbc11816b79b2d88f9c9a6c52433d6896c2cf9e8fa3711a93aa58f617996f" }, "downloads": -1, "filename": "eyeflask-0.1.3.tar.gz", "has_sig": false, "md5_digest": "b916aaabc26238f2ac7b472b032087c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23763, "upload_time": "2017-03-10T19:34:20", "url": "https://files.pythonhosted.org/packages/af/5a/9afde56485bcf8265977de3207609d884b05588d97f29a41f3303e645bab/eyeflask-0.1.3.tar.gz" } ] }