{ "info": { "author": "Brad Conte", "author_email": "brad@bradconte.com", "bugtrack_url": null, "classifiers": [], "description": "Copyright (c) [2017] [Brad Conte]\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nDescription: ===========\n FlickrSyncr\n ===========\n \n A Python library and command-line applications for syncing photos between a local directory and a Flickr album.\n \n Photos are matched by local filename and Flickr photo title with the option of also comparing the local and Flickr photo checksums. Mismatching content is synced in the direction the user specifies.\n \n * https://github.com/B-Con/flickrsyncr\n * https://bradconte.com/flickrsyncr\n * https://pypi.python.org/pypi/flickrsyncr\n \n Setup\n =====\n \n 1. Obtain a Flickr API KEY. Starting point: .\n \n 2. Save the API key and secret in a config file (unless you will provide it on the cmd-line or in the ``Settings()`` object).\n \n * The config file at ``~/.config/flickrsyncr/config.conf`` will used by default unless an alternative path is specified via ``--config_dir``. Sample config file content (there is also one in ``tests/config/config.conf``)::\n \n [DEFAULT]\n api_key = 0123456789abcdef0123456789abcdef\n api_secret = 0123456789abcdef\n \n * Multiple API key/secret pairs can be stored under different profile names. The ``DEFAULT`` profile will be used by default unless an alternative profile name is specified via ``--config_profile``.\n \n 3. On the first run, human involvement is necessary to authorize the app for Flickr OAuth access to the Flickr account. The app will provide a URL to visit in a web browser. Login to the Flickr account you want to associate the app with and then visit the displayed URL to grant the app permission.\n \n ``delete`` permissions are necessary for syncing and removing content.\n \n OAuth permissions are still checked and obtained in ``dryrun`` mode.\n \n Usage\n =====\n \n Command-line application\n ------------------------\n \n Basics:\n \n * Only the local ``--path`` and Flickr ``--album`` are required.\n * One of ``--push`` or ``--pull`` is required.\n * Use ``--help`` to list all options.\n \n Examples:\n \n * Force the Flickr album contents to exactly match local dir based only on file name::\n \n $ flickrsyncr --album=albumname --path=/my/dir --push --sync\n \n * Force the Flickr album contents to exactly match local dir based on file name and checksum::\n \n $ flickrsyncr --album=albumname --path=/my/dir --push --sync --checksum\n \n * Add local files into a Flickr album::\n \n $ flickrsyncr --album=albumname --path=/my/dir --push\n \n * Add local files into a Flickr album and tag them all::\n \n $ flickrsyncr --album=albumname --path=/my/dir --push --tag=mycustomtag\n \n * See what would change if a Flickr album were added to a local directory::\n \n $ flickrsyncr --album=albumname --path=/my/dir --pull --dryrun\n \n Library\n -------\n \n Objects of interest:\n \n * ``flickrsyncr.Settings`` - A class containing all necessary settings. Only the\n * ``flickrsyncr.sync`` - Main execution function. Takes a ``Settings()`` as the only argument.\n * ``flickrsyncr.SyncError`` - Generic exception thrown by the pacakge on fatal errors.\n \n Create a ``Settings()`` with the required settings in the constructor and pass it to ``sync()``.\n \n The cmd-line tool is basically just a wrapper to convert cmd-line arguments into a ``Settings()`` and then calls ``sync()``.\n \n See the cmd-line section for examples, the cmd-line arguments and ``Settings()`` arguments share the same names (except for the ``--`` hyphen prefix).\n \n Requirements\n ============\n \n Python Packages\n ---------------\n \n * Python3\n * Pip\n * FlickrApi\n * ConfigParser\n * SetupTools\n \n Flickr Access\n -------------\n \n * Flickr account\n * Flickr API key/secret pair\n \n Install\n =======\n \n $ pip install flickrsyncr\n \n This installs both the library and the cmd-line script.\n \n References\n ==========\n \n * https://stuvel.eu/flickrapi\n * https://www.flickr.com/services/api/\n \n Inner Workings\n ==============\n \n See the cmd-line prompt ``--help`` for the most detail on the settings/arguments.\n \n Local state\n -----------\n \n * ``~/.config/flickrsyncr/``, containing a user-created ``config.conf`` (if applicable) and ``oauth-tokens.sqlite`` (managed by the flickrapi library).\n \n Syncing\n -------\n \n * It builds a list of Flickr photos, filtered by the value of ``tag`` if it's specified.\n \n * It builds a list of local files.\n \n * Flickr photos and local files are matched by compare the local filename and the Flickr photo title.\n \n * A list of unique photos is made for local and for Flickr.\n \n * If ``checksum`` is specified, a list of photos with mismatched checksums is compiled. Flickr photos without checksums will always mismatch.\n \n * For ``push``:\n \n * unique local photos are uploaded.\n * if ``checksum`` is specified, mismatched photos are deleted from Flickr and then uploaded.\n * if ``sync`` is specified, all unique Flickr photos are deleted.\n \n * For ``pull``:\n \n * unique remote photos are downloaded.\n * if ``checksum`` is specified, mismatched photos are deleted from local path and then downloaded.\n * if ``sync`` is specified, all unique local photos are deleted.\n \n Uploads\n -------\n \n * If ``tag`` is specified, uploaded photos have the tag value added.\n * If ``checksum`` is specified, the file's checksum is stored on Flickr as a tag.\n * The photo's local file name is used as the Flickr photo title.\n * The album is created if it doesn't exist, with the banner of the first uploaded picture.\n \n Downloads\n ---------\n \n * If ``tag`` is specified, the app won't notice any Flickr photos without the tag value.\n * The Flickr photo title is used as the local file name.\n \n Edge-Cases & Gotchas\n ====================\n \n * Flickr's API calls an \"album\" a \"photoset\". They're the same thing.\n * Flickr automatically deletes an album when it has no pictures. During a sync, if all the photos are deleted before more are uploaded then the album will be deleted by Flickr and re-created by this script. You will lose your album metadata tweaks, sorry.\n * To delete a Flickr album and it's contents, ``--push`` and empty directory with the album name.\n * Tag values are not added retroactively (and cannot be by the app). ex: ``--push`` followed by ``--push --tag=mytag`` will cause the entire album to be re-uploaded because the initial photos are invisible when ``--tag=mytag`` was specified.\n * Checksums are not added retroactively (and cannot be by the app). ex: ``--push`` followed by ``--push --checksum`` will cause the entire album to be deleted and re-uploaded because the initial push had no checksum and no checksum mismatches with the real checksum in the second step.\n \nKeywords: flickr sync upload download backup photo album\nPlatform: UNKNOWN\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/B-Con/flickrsyncr", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "flickrsyncr", "package_url": "https://pypi.org/project/flickrsyncr/", "platform": "", "project_url": "https://pypi.org/project/flickrsyncr/", "project_urls": { "Homepage": "https://github.com/B-Con/flickrsyncr" }, "release_url": "https://pypi.org/project/flickrsyncr/0.1.5/", "requires_dist": [ "configparser", "flickrapi (==2.3.1)", "setuptools" ], "requires_python": "", "summary": "Syncs photos between local filesystem and Flickr album", "version": "0.1.5" }, "last_serial": 4558763, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "b98193bdbc229748723277385f450ca6", "sha256": "0e48f0f6702e08f96d9ebb50dcaf5fc41157afb38b83b18d4a49ec968f9e4b83" }, "downloads": -1, "filename": "flickrsyncr-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b98193bdbc229748723277385f450ca6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16939, "upload_time": "2017-11-17T11:08:48", "url": "https://files.pythonhosted.org/packages/2a/bd/d91c118a33e5e9f67258470005c7374b85c81b68cb4b2389e13c096c6892/flickrsyncr-0.1.0-py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "86bf464688c88932befb602a5220a272", "sha256": "16048c3c54c09c9a6787be0283327f3dca38f426944c120b36f8c69bb200c4fb" }, "downloads": -1, "filename": "flickrsyncr-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "86bf464688c88932befb602a5220a272", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16941, "upload_time": "2017-11-18T09:54:39", "url": "https://files.pythonhosted.org/packages/84/5c/57b6424933a62375187a9832fbaa6be6e379d1e1a4fe059220a4c59ec498/flickrsyncr-0.1.1-py3-none-any.whl" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f16a8653ba6e2ccc6433c28114c3be83", "sha256": "07c7f150ead36bf44dcb5a462f89cb7392818650898355b849ccd2e1e64a8cfe" }, "downloads": -1, "filename": "flickrsyncr-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f16a8653ba6e2ccc6433c28114c3be83", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16937, "upload_time": "2017-11-18T10:11:32", "url": "https://files.pythonhosted.org/packages/6e/bb/5fa136082d392acd53baec6ef32e8be076ce27e649cdcc7dc89b28b9611f/flickrsyncr-0.1.2-py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c0726e12502a32111bc4cf911bd3ab2a", "sha256": "36283839a246297cc4910c67ff947f874463284786675126312c4a2a5c1b53d7" }, "downloads": -1, "filename": "flickrsyncr-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c0726e12502a32111bc4cf911bd3ab2a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17964, "upload_time": "2017-11-20T10:23:44", "url": "https://files.pythonhosted.org/packages/84/84/8216eb9411676f394584051c1ac6a9533ce5bbbdb92117bd58c35a02718c/flickrsyncr-0.1.3-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "afe651ee1a7868de1871583eeadfd1aa", "sha256": "4690d3e56d6b385c2ceaeed843e381df13a082d82f56ff46931d53ed35a25ebc" }, "downloads": -1, "filename": "flickrsyncr-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "afe651ee1a7868de1871583eeadfd1aa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17962, "upload_time": "2017-12-02T08:25:25", "url": "https://files.pythonhosted.org/packages/e6/cf/ca76cb81d545762da1023eb21ea2f76ae97e5b4e6c9804df20e8c3b74e1c/flickrsyncr-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "041821811c1b82f6d7215783695c7117", "sha256": "778e77b7e5ef0d511ce2d11e3f23d8747b3cc4d5741ef922767d1411405b146b" }, "downloads": -1, "filename": "flickrsyncr-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "041821811c1b82f6d7215783695c7117", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15109, "upload_time": "2018-12-04T08:39:48", "url": "https://files.pythonhosted.org/packages/b2/e5/5c389937b9853719a69caff2945cbf5ddc85823c18843397dd9f4827fec7/flickrsyncr-0.1.5-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "041821811c1b82f6d7215783695c7117", "sha256": "778e77b7e5ef0d511ce2d11e3f23d8747b3cc4d5741ef922767d1411405b146b" }, "downloads": -1, "filename": "flickrsyncr-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "041821811c1b82f6d7215783695c7117", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15109, "upload_time": "2018-12-04T08:39:48", "url": "https://files.pythonhosted.org/packages/b2/e5/5c389937b9853719a69caff2945cbf5ddc85823c18843397dd9f4827fec7/flickrsyncr-0.1.5-py3-none-any.whl" } ] }