def create_picture(session, orga, name="testPicture"): picture = Picture(orga) picture.name = name picture.filename = name picture.radiotext = name picture.radiolink = name picture.image_url_prefix = name session.add(picture) session.commit() Channel.query.filter_by(id=1).first().default_picture_id = picture.id Channel.query.filter_by(id=2).first().default_picture_id = picture.id session.commit() time.sleep(config.SPI_GENERATION_INTERVAL * 3) return picture
def radiovis_gallery_edit(request, id): """Edit a channel.""" object = None errors = [] plugitapi = PlugItAPI(config.API_URL) orga = plugitapi.get_orga(request.args.get('ebuio_orgapk') or request.form.get('ebuio_orgapk')) sp = None if orga.codops: sp = ServiceProvider.query.filter_by(codops=orga.codops).order_by(ServiceProvider.codops).first() if id != '-': object = Picture.query.filter_by(orga=int(request.args.get('ebuio_orgapk') or request.form.get('ebuio_orgapk')), id=int(id)).first() if request.method == 'POST': if not object: object = Picture(int(request.form.get('ebuio_orgapk'))) if sp: object.image_url_prefix = sp.image_url_prefix object.name = request.form.get('name') object.radiotext = request.form.get('radiotext') object.radiolink = request.form.get('radiolink') def add_unique_postfix(fn): """__source__ = 'http://code.activestate.com/recipes/577200-make-unique-file-name/'""" if not os.path.exists(fn): return fn path, name = os.path.split(fn) name, ext = os.path.splitext(name) make_fn = lambda i: os.path.join(path, '%s(%d)%s' % (name, i, ext)) for i in xrange(2, sys.maxint): uni_fn = make_fn(i) if not os.path.exists(uni_fn): return uni_fn return None def unique_filename(fn): path, name = os.path.split(fn) name, ext = os.path.splitext(name) make_fn = lambda i: os.path.join(path, '%s%s' % (str(uuid.uuid4()), ext)) for i in xrange(2, sys.maxint): uni_fn = make_fn(i) if not os.path.exists(uni_fn): return uni_fn return None new_file = False if request.files: new_file = True file = request.files['file'] if file: filename = secure_filename(file.filename) full_path = unique_filename('media/uploads/radiovis/gallery/' + filename) path, name = os.path.split(full_path) file.save(full_path) if object.filename: try: os.unlink(object.filename) except: pass object.filename = name # Check errors if object.name == '': errors.append("Please set a name") if object.radiotext == '': errors.append("Please set a text") if object.radiolink == '': errors.append("Please set a link") if object.filename == '' or object.filename is None: errors.append("Please upload an image") else: if imghdr.what(full_path) not in ['jpeg', 'png']: errors.append("Image is not an png or jpeg image") os.unlink(full_path) object.filename = None else: im = Image.open(full_path) if im.size != (320, 240): errors.append("Image must be 320x240") del im os.unlink(full_path) object.filename = None pieces = urlparse.urlparse(object.radiolink) if pieces.scheme not in ['http', 'https', 'ftp']: errors.append("The link is not valid") # If no errors, save if not errors: # Upload to s3 if new_file: try: if config.STANDALONE: send_image_to_mock_api({name: open(full_path, 'rb')}) else: awsutils.upload_public_image(sp, name, full_path) except: pass # TODO Clean up old images on S3 if not object.id: db.session.add(object) db.session.commit() try: # Remove local copy os.unlink(full_path) except: pass return PlugItRedirect('radiovis/gallery/?saved=yes') try: # Remove local copy os.unlink(full_path) except: pass if object: object = object.json return {'object': object, 'errors': errors}
def radiovis_gallery_edit(request, id): """Edit a channel.""" object = None errors = [] if id != '-': object = Picture.query.filter_by(orga=int( request.args.get('ebuio_orgapk') or request.form.get('ebuio_orgapk')), id=int(id)).first() if request.method == 'POST': if not object: object = Picture(int(request.form.get('ebuio_orgapk'))) object.name = request.form.get('name') object.radiotext = request.form.get('radiotext') object.radiolink = request.form.get('radiolink') def add_unique_postfix(fn): """__source__ = 'http://code.activestate.com/recipes/577200-make-unique-file-name/'""" if not os.path.exists(fn): return fn path, name = os.path.split(fn) name, ext = os.path.splitext(name) make_fn = lambda i: os.path.join(path, '%s(%d)%s' % (name, i, ext)) for i in xrange(2, sys.maxint): uni_fn = make_fn(i) if not os.path.exists(uni_fn): return uni_fn return None file = request.files['file'] if file: filename = secure_filename(file.filename) full_path = add_unique_postfix('media/uploads/radiovis/gallery/' + filename) file.save(full_path) if object.filename: try: os.unlink(object.filename) except: pass object.filename = full_path # Check errors if object.name == '': errors.append("Please set a name") if object.radiotext == '': errors.append("Please set a text") if object.radiolink == '': errors.append("Please set a link") if object.filename == '' or object.filename is None: errors.append("Please upload an image") else: if imghdr.what(object.filename) not in ['jpeg', 'png']: errors.append("Image is not an png or jpeg image") os.unlink(object.filename) object.filename = None else: im = Image.open(object.filename) if im.size != (320, 240): errors.append("Image must be 320x240") del im os.unlink(object.filename) object.filename = None pieces = urlparse.urlparse(object.radiolink) if not pieces.scheme in ['http', 'https', 'ftp']: errors.append("The link is not valid") # If no errors, save if not errors: if not object.id: db.session.add(object) db.session.commit() return PlugItRedirect('radiovis/gallery/?saved=yes') if object: object = object.json return {'object': object, 'errors': errors}
def radiovis_gallery_edit(request, id): """Edit a channel.""" object = None errors = [] plugitapi = PlugItAPI(config.API_URL) orga = plugitapi.get_orga( request.args.get('ebuio_orgapk') or request.form.get('ebuio_orgapk')) sp = None if orga.codops: sp = ServiceProvider.query.filter_by(codops=orga.codops).order_by( ServiceProvider.codops).first() if id != '-': object = Picture.query.filter_by(orga=int( request.args.get('ebuio_orgapk') or request.form.get('ebuio_orgapk')), id=int(id)).first() if request.method == 'POST': if not object: object = Picture(int(request.form.get('ebuio_orgapk'))) if sp: object.image_url_prefix = sp.image_url_prefix object.name = request.form.get('name') object.radiotext = request.form.get('radiotext') object.radiolink = request.form.get('radiolink') def add_unique_postfix(fn): """__source__ = 'http://code.activestate.com/recipes/577200-make-unique-file-name/'""" if not os.path.exists(fn): return fn path, name = os.path.split(fn) name, ext = os.path.splitext(name) make_fn = lambda i: os.path.join(path, '%s(%d)%s' % (name, i, ext)) for i in xrange(2, sys.maxint): uni_fn = make_fn(i) if not os.path.exists(uni_fn): return uni_fn return None def unique_filename(fn): path, name = os.path.split(fn) name, ext = os.path.splitext(name) make_fn = lambda i: os.path.join(path, '%s%s' % (str(uuid.uuid4()), ext)) for i in xrange(2, sys.maxint): uni_fn = make_fn(i) if not os.path.exists(uni_fn): return uni_fn return None new_file = False if request.files: new_file = True file = request.files['file'] if file: filename = secure_filename(file.filename) full_path = unique_filename('media/uploads/radiovis/gallery/' + filename) path, name = os.path.split(full_path) file.save(full_path) if object.filename: try: os.unlink(object.filename) except: pass object.filename = name # Check errors if object.name == '': errors.append("Please set a name") if object.radiotext == '': errors.append("Please set a text") if object.radiolink == '': errors.append("Please set a link") if object.filename == '' or object.filename is None: errors.append("Please upload an image") else: if imghdr.what(full_path) not in ['jpeg', 'png']: errors.append("Image is not an png or jpeg image") os.unlink(full_path) object.filename = None else: im = Image.open(full_path) if im.size != (320, 240): errors.append("Image must be 320x240") del im os.unlink(full_path) object.filename = None pieces = urlparse.urlparse(object.radiolink) if pieces.scheme not in ['http', 'https', 'ftp']: errors.append("The link is not valid") # If no errors, save if not errors: # Upload to s3 if new_file: try: if config.STANDALONE: send_image_to_mock_api({name: open(full_path, 'rb')}) else: awsutils.upload_public_image(sp, name, full_path) except: pass # TODO Clean up old images on S3 if not object.id: db.session.add(object) db.session.commit() try: # Remove local copy os.unlink(full_path) except: pass return PlugItRedirect('radiovis/gallery/?saved=yes') try: # Remove local copy os.unlink(full_path) except: pass if object: object = object.json return {'object': object, 'errors': errors}
def uploads_posted(request): eventKey = request.matchdict['key'] event,permissions = eh.eventAndPermissionsForAccessKey(eventKey) storage_dir = '/data/pictobin/uploads' values = request.POST.values() if len(values) == 0: return json.dumps([]) outs = [] for v in values: picInfo = request.params.get('picInfo', {'name':'untitled', 'creator_name':'anonymous' }) fdata = v.file.read() newPicture = Picture(creator_name = picInfo['creator_name'], event = event, name = picInfo['name'], added = datetime.datetime.now(), ) Session.add(newPicture); Session.flush(); rowId = newPicture.id fpath_raw = fh.getFilePathByPictureId(rowId, 'raw') with open(fpath_raw,'w') as f: f.write(fdata) from models import PictureMeta from PIL import Image from PIL.ExifTags import TAGS def get_exif(fn): ret = {} i = Image.open(fn) info = i._getexif() for tag, value in info.items(): decoded = TAGS.get(tag, tag) ret[decoded] = value return ret filetags = get_exif(fpath_raw) for k,v in filetags.iteritems(): try: m = PictureMeta(key = k, value = json.dumps(v),source='exif', picture = newPicture) Session.add(m) except UnicodeDecodeError: continue fpath_800 = ih.makeC800(rowId) ih.updateThumbs(rowId) newPicture.filename = fpath_800 outs.append( { "picInfo":newPicture.toGalleryDict(), "name":picInfo['name'], "filename":fpath_800, "size":len(fdata), "url":fh.getFileAddressByPictureId(rowId), "thumbnail_url":fh.getThumbnailAddressByPictureId(rowId,'small'), "delete_url":"/uploads/deleteOne?id={0}".format(rowId), "delete_type":"DELETE" }) import transaction transaction.commit(); return outs