{ "info": { "author": "Joao Coutinho", "author_email": "me at joaoubaldo.com", "bugtrack_url": null, "classifiers": [ "Framework :: Pyramid", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application" ], "description": "dirshare\n========\n\nDescription\n-----------\n**dirshare** is a HTTP WSGI Python application to rapidly share images within \na specific root path, leverages thumbnail caching, instantaneous image \nresizing, file meta data extraction and zip file creation.\n\nThe motivation to create this application is that occasionally I must browse a \nlarge collection of photos, WITHOUT a dedicated server software, loading of \nfull sized images or modifying original files.\n\n\nRequirements\n------------\n- Setuptools (for installing dirshare and its Python dependencies)\n- (optional) Access to a mongo database server\n\n**Note** Pillow library uses system libraries to decode specific type of files.\nIf you get \"IOError: decoder XXX not available\" while loading some images, \nyou're probably missing some libraries (ex. libjpeg).\n\nInstallation\n------------\nFrom PyPI:\n> pip install dirshare\n\nOr:\n> python setup.py install\n\n\n\nUsage\n-----\n```bash\nUsage: dirshare [options]\n\nOptions:\n -h, --help show this help message and exit\n -r IMAGES_ROOT, --images-root=IMAGES_ROOT\n Root directory to share (default: \".\")\n -s IMAGE_SIZES, --image-sizes=IMAGE_SIZES\n Available sizes as a string (default: \"128x128 600x600\n 1000x1000 full\")\n -f RESIZE_FORMAT, --resize-format=RESIZE_FORMAT\n Resize encoder to use (default: \"PNG\")\n -q RESIZE_QUALITY, --resize-quality=RESIZE_QUALITY\n Resize quality value to pass to encoder (default: 90)\n -d DB_URI, --db-uri=DB_URI\n DB uri (default: \"mongodb://localhost:27017/dirshare\")\n -p HTTP_PORT, --http-port=HTTP_PORT\n HTTP listen port (default: 6543)\n -b HTTP_IP, --http-ip=HTTP_IP\n HTTP bind ip (default: \"127.0.0.1\")\n```\n\nExample:\n```bash\n dirshare -r /home/myuser -s \"128x128 500x500 full\" -d \"sqlite://:memory:\"\n```\n\n\n0.8\n---\nupdated: _waitForThumbs timeout set to 50ms\nupdated: default view set to grid\nnew: image count badge added to breadcrumb\nfixed: $scope.setSize was calling cacheSized instead of setImage\nupdated: when image is de/selected, page is scrolled to correct position\nnew: util function to rotate image from string data\nupdated: all watches removed from controller. Actions are now taken inside setter methods.\nupdated: added readyImage flag to check if selected image is preloaded\nupdated: listDir and image requests are now retried when fail\nfixed: some buttons now Select are now available even if there are no images in current path\nnew: loading image for listDir request added\nfixed: loading bar was showing wrong values; image cant be changed while previously is being loaded\nupdated: dont allow path changes when isLoading()\nnew: images service. image cache is now controlled in specific service. (code updated to use it)\nupdated: files_paths is now returned from list dir view.\nupdated: variables renamed to camelCase\nupdated: .basket is now a list of full_path's\nupdated: listdir returns 404 when unknown directory\nupdated: $scope.image is a string again, to obey single-source-of-truth ($scope.images)\nupdated: refreshImage() now loads cache when needed; fixed: nav_path doesnt add empty entry when / is last character; updated: buttonsare hidden when loading or no image in current path\nupdated: metadata is no longer created inside stream_image for performance; logging added\nupdated: metadata is only loaded when image is loaded;\nupdated: when page section is changed, deferred received images are discarded\nupdated: images are now structured in an JS object\nnew: preloading thums with progress bar\nnew: previous and next buttons for easy navigation\nupdated: $scope.image is an object now\nupdated: bool variables to control loading created.\nupdated: keypress event captured to handle left and right keys.\nupdated: split app.js into js files\nupdated: manage panel, nav pills used for directories again\nnew: polling routine\nupdate: app.js: path variable doesnt allow '//' anymore (should fix Windows problems)\n\n\n0.7\n---\n- mongodb is no longer mandatory. sqlite interface is available.\n- new cli, without the need of ini files to start dirshare.\n- new: data access interface class used for multiple dbs support\n- new: sqlite data access implementation complete\n- new: cli is now a module. New cli app with waitress http server, without pastedeploy ini\n- updated: unit tests cover all data access methods, both mongodb and sqlite\n- updated: variables renamed. They make more sense\n- updated: added ensure_index to mongo DA setup()\n- updated: config now uses db_uri instead of mongo db specific variables (preparation for sqlite integration)\n- updated: utils.db removed. data access is centralized in IDirshareDataAccess implementations\n- updated: thumbnails click area is corrected\n- updated: better image file condition check\n- updated: view flow is set in a LIFO stack ($scope.view_stack)\n- updated: When there's no exif info for an image, don't resize image viewer ($scope.isEmptyExif())\n- updated: selected thumbnails style is only applied in Select Mode.\n- fixed: mongo da: save_metadata and save_resize were not updating correctly\n- fixed: correct mimetype is returned in content-type http header for resizes\n- fixed: correct content-disposition header for resizes\n- fixed: javascript local function variables are marked local with 'var'\n- fixed: When image is changed ($watch), $scope.refreshing is toggled until data is retrieved.\n\n0.6\n---\n- Major change: The whole application is now a single page, built with AngularJS and Bootstrap framework.\n- New: ETag header is now used. Performance is significantly improved.\n- New: Two view modes. Grid: useful for desktops. Scroll: better display for mobile devices.\n- New: Select mode: Add any image to the basket. At any time, go to the basket to view or export (zip) the whole selection.\n- New: EXIF information is now read and saved, for each image file.\n- New: Content-disposition http header is now used for zip and images.\n- New: unit tests created.\n\n0.3\n---\n- First public release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://b.joaoubaldo.com", "keywords": "web pyramid pylons gallery share", "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "dirshare", "package_url": "https://pypi.org/project/dirshare/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dirshare/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://b.joaoubaldo.com" }, "release_url": "https://pypi.org/project/dirshare/0.8/", "requires_dist": null, "requires_python": null, "summary": "dirshare", "version": "0.8" }, "last_serial": 1226969, "releases": { "0.3": [ { "comment_text": "", "digests": { "md5": "7ab5401952037f2ea1e9a431f5845715", "sha256": "837270a94be8ca2a143593dd856339f21357b4d6970fc7847d9bde2b288cb294" }, "downloads": -1, "filename": "dirshare-0.3.tar.gz", "has_sig": false, "md5_digest": "7ab5401952037f2ea1e9a431f5845715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57493, "upload_time": "2014-05-19T17:18:53", "url": "https://files.pythonhosted.org/packages/08/9b/ef7d2a91725562fd7071c84341c78bceea1389b8076829475e73f25901dd/dirshare-0.3.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "0168e3c56126d9fd0882729db643d78a", "sha256": "f4a0ce3fc9411e60c599e2d8ea5d5b8ca4c332c9f96f2e35ffeab1507b612634" }, "downloads": -1, "filename": "dirshare-0.6.tar.gz", "has_sig": false, "md5_digest": "0168e3c56126d9fd0882729db643d78a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 251925, "upload_time": "2014-08-26T10:42:26", "url": "https://files.pythonhosted.org/packages/c0/a4/e893c82bf74286326bf7e66fa33977cfe0f4276c12f039e3ad142258584d/dirshare-0.6.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "bf95023884ee1670ed9a3b16464806cb", "sha256": "14dc9e3cfb90779dd116e7e26c376ce71023e97bda7cf9571ef3baf0ab5e9ab8" }, "downloads": -1, "filename": "dirshare-0.8.tar.gz", "has_sig": false, "md5_digest": "bf95023884ee1670ed9a3b16464806cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 420632, "upload_time": "2014-09-16T17:07:08", "url": "https://files.pythonhosted.org/packages/f9/57/13d9d11c851ada2530f4c113198be39d265fb501a5b7ff5c163b0c4ddc35/dirshare-0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bf95023884ee1670ed9a3b16464806cb", "sha256": "14dc9e3cfb90779dd116e7e26c376ce71023e97bda7cf9571ef3baf0ab5e9ab8" }, "downloads": -1, "filename": "dirshare-0.8.tar.gz", "has_sig": false, "md5_digest": "bf95023884ee1670ed9a3b16464806cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 420632, "upload_time": "2014-09-16T17:07:08", "url": "https://files.pythonhosted.org/packages/f9/57/13d9d11c851ada2530f4c113198be39d265fb501a5b7ff5c163b0c4ddc35/dirshare-0.8.tar.gz" } ] }