def test_mobj_full_run(testidbmodel, jpgpath): url = "http://test.idigbio.org/idigbio_logo.jpg" mobj = MediaObject.fromobj(jpgpath.open('rb'), url=url) assert mobj.url == "http://test.idigbio.org/idigbio_logo.jpg" assert mobj.etag etag = mobj.etag mobj.derivatives = False mobj.insert_object(testidbmodel) mobj.last_status = 200 mobj.last_check = datetime.now() mobj.modified = datetime.now() mobj.ensure_media(testidbmodel) mobj.ensure_media_object(testidbmodel) mfe = MediaObject.frometag(etag, idbmodel=testidbmodel) assert mfe for s in mobj.__slots__: if s != 'modified': assert (getattr(mobj, s) == getattr(mfe, s)) mfu = MediaObject.fromurl(url, idbmodel=testidbmodel) assert mfu assert mfu.url == url for s in mobj.__slots__: if s != 'modified': assert (getattr(mobj, s) == getattr(mfu, s))
def lookup_etag(etag, format): deriv = None if "deriv" in request.args: deriv = request.args["deriv"] elif "size" in request.args: deriv = request.args["size"] r = MediaObject.frometag(etag, idbmodel=idbmodel) return respond_to_record(r, deriv=deriv, format=format)
def test_mobj_frometag(testidbmodel, testdata): mobj = MediaObject.frometag("3e17584bc43cf36617b6793515089656", idbmodel=testidbmodel) assert mobj assert mobj.type == 'images' assert mobj.mime == 'image/jpeg' == mobj.detected_mime assert mobj.etag == "3e17584bc43cf36617b6793515089656" assert mobj.url == 'http://hasbrouck.asu.edu/imglib/pollen/Seeds/Cornus-stolonifera-272.jpg' assert mobj.type == 'images' == mobj.bucket assert mobj.mime == 'image/jpeg' == mobj.detected_mime assert mobj.owner
def test_mobj_from_etag_None(testidbmodel): mobj = MediaObject.frometag("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", idbmodel=testidbmodel) assert mobj is None
def get_key_by_etag(self, etag, idbmodel=None): mo = MediaObject.frometag(etag, idbmodel=idbmodel) return self.get_key(mo.keyname, mo.bucketname)
def upload(): vals = {} j = request.get_json() if j is not None: vals.update(j) for k, v in request.values.iteritems(): vals[k] = v filereference = vals.get("filereference") if not filereference: logger.warning("No filereference specified") return json_error(400, "Missing filereference") obj = request.files.get('file') etag = vals.get('etag') media_type = vals.get("media_type") mime = vals.get("mime") try: mime, media_type = validate_mime_for_type(mime, media_type) except MediaValidationError as mve: logger.warning("Bad mime/media_type combo: %r/%r", mime, media_type) return json_error(400, str(mve)) r = MediaObject.fromurl(filereference, idbmodel=idbmodel) if r: logger.warning("Found existing object for %r", r.url) if r.owner != request.authorization.username: return json_error(403) if obj: # if either type or mime are null it will be ignored, if # present they change the behavior of fromobj try: mo = MediaObject.fromobj(obj, type=media_type, mime=mime, url=filereference, etag=etag) except MediaValidationError as mve: logger.warning("Validation failure, %r", mve) return json_error(400, str(mve)) mo.upload(IDigBioStorage(), obj) mo.insert_object(idbmodel) elif etag: mo = MediaObject.frometag(etag, idbmodel) if not mo or not mo.get_key(IDigBioStorage()).exists(): return json_error(404, "Unknown etag {0!r}".format(etag)) mo.last_status = 200 mo.last_check = datetime.now() mo.mime = mime or mo.detected_mime mo.type = media_type or mo.bucket else: mo = r or MediaObject() mo.last_status = None mo.last_check = None try: mo.mime, mo.type = validate_mime_for_type(mo.mime or mime, mo.type or media_type) if not (mo.mime and mo.type): logger.warning("Missing either mime(%r) or type(%r)", mo.mime, mo.type) return json_error(400, "Incomplete request") except MediaValidationError as mve: logger.warning("Validation Failure, %r", mve) return json_error(400, str(mve)) mo.url = filereference mo.owner = request.authorization.username if r: mo.update_media(idbmodel) else: mo.insert_media(idbmodel) if mo.etag: mo.ensure_media_object(idbmodel) idbmodel.commit() return respond_to_record(mo, format='json')