コード例 #1
0
ファイル: test_helpers.py プロジェクト: bbinet/PyGall
 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)
コード例 #2
0
ファイル: photos.py プロジェクト: bbinet/PyGall
    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
コード例 #3
0
ファイル: imageprocessing.py プロジェクト: bbinet/PyGall
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