def test_get_size(self): from pygall.lib.helpers import get_size src = 'python.jpg' size = get_size(src) self.assertEqual(size, 63205) # test get_size of a file object with open(src, 'rb') as f: size = get_size(f) self.assertEqual(size, 63205)
def create(self): """POST /photos: Create a new item""" f = self.request.params.get("files[]", None) if not isinstance(f, cgi.FieldStorage): return HTTPBadRequest() done = [] settings = self.request.registry.settings # extract to a tmpdir that we should delete immediately # after import is done. tmpdir = mkdtemp(dir=settings["upload_dir"]) try: try: fn = f.filename extract(f.file, tmpdir, safe=True, filename=fn) log.debug("file '%s' has been correctly extracted" % fn) except UnrecognizedArchiveFormat as e: # seems to be a single file, save it try: fdst = open(os.path.join(tmpdir, os.path.basename(fn)), "wb") shutil.copyfileobj(f.file, fdst) log.debug("file '%s' has been correctly copied" % fn) finally: if fdst: fdst.close() # walk in import directory to import all image files for dirpath, dirs, files in os.walk(tmpdir, topdown=False): for filename in files: abspath = os.path.join(dirpath, filename) log.debug("Importing image: %s" % abspath) try: info = self._import(abspath) result = {"name": f.filename, "size": get_size(f.file), "delete_type": "DELETE"} uri = None if isinstance(info, Photo): uri = info.uri _ = self.request.translate result["error"] = _("File already exists on server") else: uri = info["uri"] result["url"] = (self.request.static_path(settings["photos_dir"] + "/orig/" + uri),) result["thumbnail_url"] = (self.request.static_path(settings["photos_dir"] + "/scaled/" + uri),) result["delete_url"] = (self.request.route_path("photos_delete", _query=[("uri", uri)]),) done.append(result) except Exception as e: # TODO: log error in session (flash message) log.exception("Error while importing image, skip" "file: %s" % abspath) except Exception, e: # TODO: log error in session (flash message) raise e
def get_info(img, info=None): """ Get infos about the given image """ if info is None: info = {} loc = seek(img, 0) im = Image.open(img) if 'date' not in info: try: exif = get_exif(im._getexif()) info['date'] = datetime.strptime( exif['DateTimeOriginal'], '%Y:%m:%d %H:%M:%S') except: info['date'] = None if 'md5sum' not in info: info['md5sum'] = img_md5(im) if 'ext' not in info: info['ext'] = im.format.lower() if 'size' not in info: info['size'] = get_size(img) if loc is not None: seek(img, loc) return info