{ "info": { "author": "Aymeric Augustin", "author_email": "aymeric.augustin@m4x.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "mYk's gallery\n#############\n\nIntroduction\n============\n\n`myks-gallery`_ is a simple photo gallery with granular access control.\n\nIt powers my `humble photo gallery`_, allowing me to:\n\n- access my entire photo collection privately,\n- share some albums with family or friends,\n- make some albums public.\n\n.. _myks-gallery: https://github.com/aaugustin/myks-gallery\n.. _humble photo gallery: http://myks.org/photos/\n\nUse case\n========\n\nRather than use a photo manager, I just create a new directory for each event\nand put my photos inside. I include the date of the event in the name of the\ndirectory and I rename photos based on their date and time. Then I regularly\nsynchronize my collection to a remote storage. I serve my gallery from there.\n\nIf you have a similar workflow, you may find myks-gallery useful.\n\nWhenever I upload new photos, I re-scan the collection with ``./manage.py\nscanphotos`` or with the button in the admin. myks-gallery detects new albums\nand photos. Then I define users, groups and access policies in the admin.\n\nAlbum access policies control the visibility of albums. Most often, you'll\nenable the \"photos inherit album access policy\" option. If you need more\ncontrol, for instance to share only a subset of an album, you can disable this\noption and use photo access policies. You still need to define an album access\npolicy and it should be a superset of the photo access policies.\n\nObviously, requiring usernames and passwords doesn't work well for sharing\nphotos with relatives. You might want to use django-sesame_.\n\n.. _django-sesame: https://github.com/aaugustin/django-sesame\n\nSetup\n=====\n\nmyks-gallery is a pluggable Django application. It requires Django 1.11 (LTS)\nor 2.0 and Pillow. It works with any version of Python supported by Django.\n\nArchitecture\n------------\n\nmyks-gallery requires two storage areas:\n\n- The first one contains the original photos. It's a read-only reference. You\n can upload photos there with `aws s3 sync`_, `gsutil rsync`_, rsync_, etc.\n depending on the platform. (I don't know any such tool for Azure storage.)\n- The second one contains downscaled photos and ZIP archives of album exports.\n It's a read-write cache. You can set up expiry policies and clear it without\n affecting the gallery, aside from the cost of rescaling images again.\n\nmyks-gallery accesses them through Django's `file storage API`_, meaning that\nyou can use any storage for which a Django storage backend exists. You should\nuse a third-party storage backend if you're storing files in a cloud service\nand Djang's built-in ``FileSystemStorage`` if you're storing them locally on\nthe filesystem, typically for local development.\n\n.. _aws s3 sync: http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html\n.. _gsutil rsync: https://cloud.google.com/storage/docs/gsutil/commands/rsync\n.. _rsync: http://rsync.samba.org/\n.. _file storage API: https://docs.djangoproject.com/en/stable/ref/files/storage/\n\nInstallation guide\n------------------\n\nThis application isn't exactly plug'n'play. There are many moving pieces.\nHere's the general process for integrating myks-gallery into an existing\nwebsite:\n\n1. Download and install the package from PyPI::\n\n $ pip install myks-gallery\n\n2. Add ``gallery.apps.GalleryConfig`` to ``INSTALLED_APPS``::\n\n INSTALLED_APPS += 'gallery.apps.GalleryConfig',\n\n3. Configure the settings \u2014 see below for the list.\n\n4. Add the application to your URLconf with the ``gallery`` application\n namespace::\n\n urlpatterns += [\n path('gallery/', include('gallery.urls', namespace='gallery')),\n ]\n\n5. Create a suitable ``base.html`` template. It must provide three blocks:\n ``title``, ``extrahead``, ``content``, as shown in this `example`_.\n\n6. Optionally, if you're serving files from the local filesystem, enable\n `X-accel`_ (nginx) or `mod_xsendfile`_ (Apache) for your photo and cache\n directories.\n\n7. Scan your photos with the \"Scan photos\" button in the admin or the\n ``scanphotos`` management command and define access policies.\n\nThe source_ contains a sample application in the ``example`` directory. It can\nhelp you see how everything fits together. See below for how to run it.\n\n.. _example: https://github.com/aaugustin/myks-gallery/blob/master/example/example/templates/base.html\n.. _X-accel: http://wiki.nginx.org/X-accel\n.. _mod_xsendfile: https://tn123.org/mod_xsendfile/\n.. _source: https://github.com/aaugustin/myks-gallery\n\nPermissions\n-----------\n\nmyks-gallery defines two permissions:\n\n- \"Can scan the photos directory\" allows using the \"Scan photos\" button in the\n admin.\n- \"Can see all photos\" allows seeing all albums and all photos regardless of\n access policies.\n\nSettings\n--------\n\n``GALLERY_PHOTO_STORAGE``\n.........................\n\nDefault: *not defined*\n\nDotted Python path to the Django storage class for the original photos. It\nmust be readable by the application server but should not be writable.\n\nWhile ``GALLERY_PHOTO_STORAGE`` behaves like Django's ``DEFAULT_FILE_STORAGE``\nsetting, you'll usullay point it to a factory function that initializes and\nreturns a Django storage instance because you won't want to use globally\nconfigured values for settings such as the S3 bucket name.\n\nFor compatibility for versions prior to 0.5, if ``GALLERY_PHOTO_STORAGE``\nisn't defined but ``GALLERY_PHOTO_DIR`` is, the photo storage will be set to\n``FileSystemStorage(location=GALLERY_PHOTO_DIR)``.\n\n``GALLERY_CACHE_STORAGE``\n.........................\n\nDefault: *not defined*\n\nDotted Python path to the Django storage class for the thumbnails and album\narchives. It must be readable and writable by the application server.\n\nIt behaves like ``GALLERY_PHOTO_STORAGE``.\n\nFor compatibility for versions prior to 0.5, if ``GALLERY_CACHE_STORAGE``\nisn't defined but ``GALLERY_CACHE_DIR`` is, the photo storage will be set to\n``FileSystemStorage(location=GALLERY_CACHE_DIR)``.\n\n``GALLERY_PATTERNS``\n....................\n\nDefault: ``()``\n\nTuple of (category name, regular expression) defining how to extract album\ninformation \u2014 category, date, name \u2014 from the paths of photo files.\n\nThe regular expressions match paths relative to the root of the photo storage.\nThey contain the following captures:\n\n- ``a_name``: album name (mandatory) \u2014 to capture several bits, use\n ``a_name1``, ``a_name2``, etc.\n- ``a_year``, ``a_month``, ``a_day``: album date (mandatory)\n- ``p_year``, ``p_month``, ``p_day``, ``p_hour``, ``p_minute``, ``p_second``:\n photo date and time (optional)\n\nHere's an example, for photos stored with names such as ``2013/01_19_Snow in\nParis/2013-01-19_19-12-43.jpg``::\n\n GALLERY_PATTERNS = (\n ('Photos',\n r'(?P\\d{4})/(?P\\d{2})_(?P\\d{2})_'\n r'(?P[^_/]+)/'\n r'(?P\\d{4})-(?P\\d{2})-(?P\\d{2})_'\n r'(?P\\d{2})-(?P\\d{2})-(?P\\d{2})\\.jpg'),\n )\n\n``GALLERY_IGNORES``\n...................\n\nDefault: ``()``\n\nTuple of regular expressions matching paths within ``GALLERY_PHOTO_STORAGE``.\nFiles matching one of these expressions will be ignored when scanning photos.\n\n``GALLERY_RESIZE_PRESETS``\n..........................\n\nDefault: ``{}``\n\nDictionary mapping thumbnail presets names to ``(width, height, crop)``. If\n``crop`` is ``True``, the photo will be cropped and the thumbnail will have\nexactly the requested size. If ``crop`` is ``False``, the thumbnaill will be\nsmaller than the requested size in one dimension to preserve the photo's\naspect ratio.\n\nThe default templates assume the following values::\n\n GALLERY_RESIZE_PRESETS = {\n 'thumb': (128, 128, True),\n 'standard': (768, 768, False),\n }\n\nYou may double these sizes for better results on high DPI displays.\n\n``GALLERY_RESIZE_OPTIONS``\n..........................\n\nDefault: ``{}``\n\nDictionary mapping image formats names to to dictionaries of options for\nPillow's ``save`` method. Options are described for each file format in\nPillow's documentation.\n\nThe following a reasonable value for high-quality thumbnails and previews::\n\n GALLERY_RESIZE_OPTIONS = {\n 'JPEG': {'quality': 95, 'optimize': True},\n }\n\n.. _options:\n\n``GALLERY_SENDFILE_HEADER``\n............................\n\nDefault: ``''``\n\nName of the HTTP header that triggers ``sendfile`` on your web server. Use\n``'X-Accel-Redirect'`` for nginx and ``'X-SendFile'`` for Apache.\n\n``GALLERY_SENDFILE_ROOT``\n.........................\n\nDefault: ``''``\n\nPart to strip at the beginning of the paths in the ``sendfile`` header. The\nheader will contain the absolute path to files, minus this prefix. This is\ngenerally useful for nginx and not necessary for Apache.\n\n``GALLERY_TITLE``\n.................\n\nDefault: ``\"Gallery\"``\n\nTitle of your photo gallery. This is only used by the default templates of the\nindex and year views.\n\n``GALLERY_PREVIEW_COUNT``\n.........................\n\nDefault: ``5``\n\nNumber of thumbnails shown in the preview of each album.\n\n``GALLERY_ARCHIVE_EXPIRY``\n..........................\n\nDefault: ``None`` or ``60``\n\nDuration in days during which album archives are kept in cache. ``None``\ndisables expiration.\n\nWhen using a remote storage system such as S3, configuring an expiry policy\nfor the ``export`` folder directly on the storage system is more efficient.\n\nFor compatibility with versions prior to 0.5, if ``GALLERY_CACHE_DIR`` is\ndefined, ``GALLERY_ARCHIVE_EXPIRY`` defaults to ``60``.\n\n\nRunning the sample application\n==============================\n\n1. Make sure Django and Pillow are installed\n\n2. Download some pictures (warning: these files are large, total = 50MB; you\n can use photos of your own instead as long as you respect the format of\n the directory name: ``YYYY_MM_DD_album name``)::\n\n $ cd example\n $ mkdir cache\n $ mkdir photos\n $ mkdir \"photos/2013_01_01_Featured Pictures\"\n $ cd \"photos/2013_01_01_Featured Pictures\"\n $ wget http://upload.wikimedia.org/wikipedia/commons/5/51/2012-11-23_16-05-52-grande-cascade-tendon.jpg\n $ wget http://upload.wikimedia.org/wikipedia/commons/5/56/Crooked_Beak_of_Heaven_Mask.jpg\n $ wget http://upload.wikimedia.org/wikipedia/commons/a/a4/Iglesia_de_Nuestra_Se%C3%B1ora_de_La_Blanca%2C_Cardej%C3%B3n%2C_Espa%C3%B1a%2C_2012-09-01%2C_DD_02. JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/1/17/Iglesia_del_Esp%C3%ADritu_Santo%2C_Landshut%2C_Alemania%2C_2012-05-27%2C_DD_02.JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/3/33/Viru_Bog%2C_Parque_Nacional_Lahemaa%2C_Estonia%2C_2012-08-12%2C_DD_60.JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/d/d7/Castillo_Trausnitz%2C_Landshut%2C_Alemania%2C_2012-05-27%2C_DD_18.JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/b/b7/Catedral_de_Alejandro_Nevsky%2C_Tallin%2C_Estonia%2C_2012-08-11%2C_DD_46.JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/3/3f/Crassula_arborescens%2C_Jard%C3%ADn_Bot%C3%A1nico%2C_M%C3%BAnich%2C_Alemania_2012-04-21%2C_DD_01.JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/8/86/Plaza_del_ayuntamiento%2C_Set%C3%BAbal%2C_Portugal%2C_2012-08-17%2C_DD_01.JPG\n $ wget http://upload.wikimedia.org/wikipedia/commons/7/71/4_cilindros_y_museo_BMW%2C_M%C3%BAnich%2C_Alemania_2012-04-28%2C_DD_02.JPG\n $ cd ../..\n\n3. Run the development server::\n\n $ ./manage.py migrate\n $ ./manage.py runserver\n\n4. Go to http://localhost:8000/admin/gallery/album/ and log in. Click the\n \"Scan photos\" link at the top right, and the \"Scan photos\" button on the\n next page. You should see the following messages:\n\n * Scanning path/to/myks-gallery/example/photos\n * Adding album 2013_01_01_Featured Pictures (Photos) as Featured Pictures\n * Done (0.01s)\n\n Go to http://localhost:8000/ and enjoy!\n\n Since you're logged in as an admin user, you can view albums and photos\n even though you haven't defined any access policies yet.\n\nChangelog\n=========\n\n0.8\n---\n\n*Under development*\n\n0.7\n---\n\n* Updated for Django 2.0.\n\n0.6\n---\n\n* Added migrations for compatibility with Django 1.9.\n\nTo upgrade an existing project, run: ``django-admin migrate --fake-initial``.\n\n0.5\n---\n\nThis version uses the Django file storage API for all operations on files,\nmaking it possible to use services such as Amazon S3 or Google Cloud Storage\nfor storing photos and thumbnails. It introduces the ``GALLERY_PHOTO_STORAGE``\nand ``GALLERY_CACHE_STORAGE`` settings. They supersede ``GALLERY_PHOTO_DIR``\nand ``GALLERY_CACHE_DIR``.\n\nWhen upgrading to 0.5 or later, you should clear the cache directory.\nPreviously cached thumbnails and exports won't be used by this version.\n\nIt also include some smaller changes.\n\n* Switched ordering of albums to always show the most recent albums first.\n* Allowed customizing the number of photos in album previews.\n* Preserved original order of photos in album previews.\n* Added pagination on album preview pages.\n* Changed the hashing schema. This invalides the cache. You should clear it.\n* Fixed collision between zip archives containing photos with the same name.\n\n0.4\n---\n\n* Provided exports of albums as zip archives.\n* Fixed preview of photos affected by batch access policy changes.\n\n0.3\n---\n\n* Support for Python 3 and Django 1.6.\n* Hid public albums by default for logged-in users.\n* Switched the default styles to a responsive design.\n* Added an option to scanphotos to precompute thumbnails.\n* Added an option to scanphotos to resynchronize photo dates.\n* Fixed bugs in photo dates.\n\n0.2\n---\n\n* Made most settings optional for easier deployment.\n* Made \"sendfile\" optional and used streaming responses as a fallback.\n* Worked around a crash in libjpeg when creating large JPEG previews.\n* Added many tests.\n\n0.1\n---\n\n* Initial public release, with the history from my private repository.\n* Added documentation (README file).\n* Added a sample application.\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/aaugustin/myks-gallery", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "myks-gallery", "package_url": "https://pypi.org/project/myks-gallery/", "platform": "", "project_url": "https://pypi.org/project/myks-gallery/", "project_urls": { "Homepage": "https://github.com/aaugustin/myks-gallery" }, "release_url": "https://pypi.org/project/myks-gallery/0.7/", "requires_dist": null, "requires_python": "", "summary": "Photo gallery with granular access control", "version": "0.7" }, "last_serial": 3383100, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "2523059c8594ad6a4cc91d53953bffaa", "sha256": "ae2f363a712f12e4a78bc3a9271106ce626aa365aa72a1d4b9c7e3a3940be42d" }, "downloads": -1, "filename": "myks-gallery-0.1.tar.gz", "has_sig": false, "md5_digest": "2523059c8594ad6a4cc91d53953bffaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20129, "upload_time": "2013-01-19T22:01:44", "url": "https://files.pythonhosted.org/packages/84/97/2e0ee88f229c04dc4497ad1167b882d55f02e354e62e9cba21e0b7bd0f22/myks-gallery-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "8965d0f6234d7fda1a3aa8a795223850", "sha256": "58e5a226a50d1100dc412326a2000a4a61deb5cf2e4c43ca1acb224e0743e5fa" }, "downloads": -1, "filename": "myks-gallery-0.2.tar.gz", "has_sig": false, "md5_digest": "8965d0f6234d7fda1a3aa8a795223850", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22049, "upload_time": "2013-01-24T19:05:57", "url": "https://files.pythonhosted.org/packages/d9/89/99a1e5f317638ccb7884de11fb8fab6bbed50df6c503fadb5823b103c208/myks-gallery-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "4780e06c0c79bb7afdb247b7456c31a8", "sha256": "e856d1bda46832ab84e087cb50817e8303e0ab03a44b0d9daeff353aa1334436" }, "downloads": -1, "filename": "myks-gallery-0.3.tar.gz", "has_sig": false, "md5_digest": "4780e06c0c79bb7afdb247b7456c31a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23176, "upload_time": "2013-11-06T23:02:34", "url": "https://files.pythonhosted.org/packages/11/1c/9fc5e47d4ea2b6f2e33f15d4f079db12072beec1888c6d2d4f8c79be5dac/myks-gallery-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "1d50e107aa24fb1a95d1aef5248144bf", "sha256": "5b9173723a601e76162a790abb2ac2fdc24366b2724e9571bd6535d7f172066c" }, "downloads": -1, "filename": "myks-gallery-0.4.tar.gz", "has_sig": false, "md5_digest": "1d50e107aa24fb1a95d1aef5248144bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24265, "upload_time": "2014-08-24T20:26:04", "url": "https://files.pythonhosted.org/packages/29/66/2be7c9ed00357a0657c4153c8874dc14ed95228b6ca9f57e2e10a239cf2d/myks-gallery-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "b3993f839fb0a0e9f6e064b9712e428e", "sha256": "6ff5e954186b51c61a17d9f1e429d3645f6d99a475cec78cf53a3587e2445a82" }, "downloads": -1, "filename": "myks_gallery-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b3993f839fb0a0e9f6e064b9712e428e", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 34427, "upload_time": "2015-11-16T12:50:31", "url": "https://files.pythonhosted.org/packages/52/6f/761bdbe4f6417a0f1df9a152166bdca1b2b0232c465442a858bcf3c6e81e/myks_gallery-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a44d19c646fe22c82820a83929dccd2", "sha256": "287a81de9f700fd7c2f71814173028d9d4544face84a984b22b14665d96298a4" }, "downloads": -1, "filename": "myks-gallery-0.5.tar.gz", "has_sig": false, "md5_digest": "8a44d19c646fe22c82820a83929dccd2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28754, "upload_time": "2015-11-16T12:48:09", "url": "https://files.pythonhosted.org/packages/41/dc/0c2a4eb961ea88fed36d2d4666b3b6fdb56f10ff5f2671659ec2d52a8ae5/myks-gallery-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "48502cbbc7a3276e86abe1b1162dbca7", "sha256": "55617f1c02ecc979d233b6b0fbb2b97b492246c7b50aab92ccd0aaa57988b1cb" }, "downloads": -1, "filename": "myks_gallery-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "48502cbbc7a3276e86abe1b1162dbca7", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 44878, "upload_time": "2016-12-28T08:43:49", "url": "https://files.pythonhosted.org/packages/de/e0/0bc6079b31f8896b82ba8046964c49f96f22c3a7a997220be3d43420d1da/myks_gallery-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c481f740908b9ee92fa05c5ef1139157", "sha256": "6ae4197cdf87f91f629c84d1d8b525ba2d1046c201c0554fa84360125e7540df" }, "downloads": -1, "filename": "myks-gallery-0.6.tar.gz", "has_sig": false, "md5_digest": "c481f740908b9ee92fa05c5ef1139157", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29741, "upload_time": "2016-12-28T08:43:46", "url": "https://files.pythonhosted.org/packages/31/9b/f38ea0bbe09de85b4406ec12f2ca04d5ea7b8b31561e8f3added6fc023fe/myks-gallery-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "fb6d7a3a25608077e28efb46102347bc", "sha256": "9f5253d4000f3aa9655bf6972558a180c7944080b14c78df5959de8e4458702a" }, "downloads": -1, "filename": "myks_gallery-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fb6d7a3a25608077e28efb46102347bc", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 46131, "upload_time": "2016-12-28T09:34:59", "url": "https://files.pythonhosted.org/packages/f0/1d/ae7ae7e7a9816025c8f6249a989b241059b15daac67df6376ab9f6c3d8d4/myks_gallery-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e44a2c1e353a1b097c3642941e3695e0", "sha256": "b1be85031855b9a886bbc98627d781b41ffce4a6cbf4daf551e597ee5b3011b5" }, "downloads": -1, "filename": "myks-gallery-0.6.1.tar.gz", "has_sig": false, "md5_digest": "e44a2c1e353a1b097c3642941e3695e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30564, "upload_time": "2016-12-28T09:34:57", "url": "https://files.pythonhosted.org/packages/25/db/af44d00a20bd9bef67dfe68ccffac865ece36f79fb44479de936df78c8b4/myks-gallery-0.6.1.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "873a10cd45388d0594b28b29ebfb741b", "sha256": "492d7230fd1b1069d72cb146b4dcb0f71928259d409b44e79918868c809f2a80" }, "downloads": -1, "filename": "myks_gallery-0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "873a10cd45388d0594b28b29ebfb741b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 46103, "upload_time": "2017-12-02T20:35:20", "url": "https://files.pythonhosted.org/packages/28/63/02df56ec6818793a1ce18e64fd8966568a6ca58355d256c7e4d422b25b61/myks_gallery-0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aea9d084d3800ab54eb08aefa19f0b5d", "sha256": "ed430b394bc4fca59fa0c6a9a079a146b884d1f0c3d9a2661820d13f190ff6f1" }, "downloads": -1, "filename": "myks-gallery-0.7.tar.gz", "has_sig": false, "md5_digest": "aea9d084d3800ab54eb08aefa19f0b5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36234, "upload_time": "2017-12-02T20:35:22", "url": "https://files.pythonhosted.org/packages/40/9c/13d733b91172f06609f32c5dc850132e13651e5708b058817442332d31c5/myks-gallery-0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "873a10cd45388d0594b28b29ebfb741b", "sha256": "492d7230fd1b1069d72cb146b4dcb0f71928259d409b44e79918868c809f2a80" }, "downloads": -1, "filename": "myks_gallery-0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "873a10cd45388d0594b28b29ebfb741b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 46103, "upload_time": "2017-12-02T20:35:20", "url": "https://files.pythonhosted.org/packages/28/63/02df56ec6818793a1ce18e64fd8966568a6ca58355d256c7e4d422b25b61/myks_gallery-0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aea9d084d3800ab54eb08aefa19f0b5d", "sha256": "ed430b394bc4fca59fa0c6a9a079a146b884d1f0c3d9a2661820d13f190ff6f1" }, "downloads": -1, "filename": "myks-gallery-0.7.tar.gz", "has_sig": false, "md5_digest": "aea9d084d3800ab54eb08aefa19f0b5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36234, "upload_time": "2017-12-02T20:35:22", "url": "https://files.pythonhosted.org/packages/40/9c/13d733b91172f06609f32c5dc850132e13651e5708b058817442332d31c5/myks-gallery-0.7.tar.gz" } ] }