Exemplo n.º 1
0
class UploadManager(object):
    def __init__(self, app):
        self.videos = UploadSet('videos', (
            'mp4',
            'webm',
            'wmv',
            'avi',
            'mov',
        ))
        self.images = UploadSet('images', ('jpeg', ))
        configure_uploads(app, (
            self.videos,
            self.images,
        ))

    def save_image(self, image):
        filename = self.images.save(image)
        return {
            'url': self.images.url(filename),
            'path': self.images.path(filename)
        }

    def save_video(self, video):
        filename = self.videos.save(video)
        return filename

    def lookup_video(self, filename):
        url = self.videos.url(filename)
        path = self.videos.path(filename)
        return url, path
Exemplo n.º 2
0
Arquivo: views.py Projeto: v2up/queyue
def profile_handler(form, insti, req):
    insti.name = form.name.data
    insti.intro = form.intro.data
    logo = request.files.get('logo')
    if not (logo.filename is None or logo.filename == ''):
        logo_upload = UploadSet('logos', ('jpg', 'png'))
        configure_uploads(current_app, (logo_upload))
        try:
            filename = logo_upload.save(logo)
            logo_url = logo_upload.url(filename)
            insti.logo_url = logo_url
        except UploadNotAllowed:
            return (False, '上传LOGO时出错')
    poster = request.files.get('poster')
    if not (poster.filename is None or poster.filename == ''):
        poster_upload = UploadSet('posters', ('jpg', 'png'))
        configure_uploads(current_app, (poster_upload))
        try:
            filename = poster_upload.save(poster)
            poster_url = poster_upload.url(filename)
            insti.poster_url = poster_url
        except UploadNotAllowed:
            return (False, '上传海报时出错')
    db.session.add(insti)
    return (True, '资料更新成功')
Exemplo n.º 3
0
Arquivo: views.py Projeto: v2up/queyue
def member_edit():
    edit_form = EditForm()
    if request.method == 'POST' and edit_form.validate_on_submit():
        user = User.query.get(current_user.id)
        user.name = edit_form.username.data
        avatar = request.files.get('avatar')
        # print(avatar)   # <FileStorage: '' ('application/octet-stream')>
        # print(avatar.filename)
        if avatar.filename is not None:  # and avatar.filename!=''
            avatar_upload = UploadSet(name='avatars',
                                      extensions=('jpg', 'jpeg', 'png', 'bmp'))
            configure_uploads(current_app, (avatar_upload))  #加载上传集配置
            try:
                filename = avatar_upload.save(avatar)
                # avatar_upload.resolve_conflict(avatar_upload, fname)  #解决可能存在的文件名冲突问题
                user.avatar_url = avatar_upload.url(filename)
            except UploadNotAllowed:
                pass
        else:
            flash('头像上传失败', 'alert-warning')
        portrait = request.files.get('portrait')
        if portrait.filename is not None:
            portrait_upload = UploadSet(name='portraits',
                                        extensions=('jpg', 'jpeg', 'png',
                                                    'bmp'))
            configure_uploads(current_app, (portrait_upload))  #加载上传集配置
            try:
                filename = portrait_upload.save(portrait)
                # portrait_upload.resolve_conflict(portrait_upload, fname)  #解决可能存在的文件名冲突问题
                user.portrait_url = portrait_upload.url(filename)
            except UploadNotAllowed:
                pass
        else:
            flash('半身像上传失败', 'alert-warning')
        user.signature = edit_form.signature.data
        user.intro = edit_form.intro.data
        password = edit_form.password.data
        if password is not None and password != '':  #更改密码
            if user.verify_password(edit_form.old_password.data):
                if len(password) > 6 and len(password) < 24:
                    if password == edit_form.password2.data:
                        user.password = password
                        flash('密码更改成功!', 'alert-success')
                    else:
                        flash('两次密码输入不一致,密码未更改', 'alert-warning')
                else:
                    flash('密码长度必须 6-24 位,密码未更改', 'alert-warning')
            else:
                flash('当前密码错误,密码未更改', 'alert-danger')
        db.session.add(user)
        flash('个人资料更新成功!', 'alert-success')
        return redirect(url_for('member.member_page', userid=user.id))
    edit_form.username.data = current_user.name
    edit_form.signature.data = current_user.signature
    edit_form.intro.data = current_user.intro
    return render_template('member/edit.html', form=edit_form)
Exemplo n.º 4
0
    def post(self):
        if 'photo' in request.files:
            upload_type = 'photo'

            upload_files = UploadSet('photos',IMAGES)
            configure_uploads(app, upload_files)

            filename = upload_files.save(request.files[upload_type])
            splits = []
            for item in filename.split('.'):
                splits.append(item)
            extension = filename.split('.')[len(splits) - 1]
        else:
            return {'status':'error',
                    'description':'No attached Files'}, 400

        f = File(filename=filename, user_id=g.user.id, extension=extension, type=upload_type)
        try:
            db.session.add(f)
            db.session.commit()
        except:
            return {'status':'error',
                    'description':'Something went wrong'}, 500

        return {'status':'success',
                'description':'Upload Succeeded',
                'data':{'id':f.id,
                        'url':upload_files.url(f.name)}}, 201
Exemplo n.º 5
0
Arquivo: views.py Projeto: v2up/queyue
def edit_event(uurl, eid):
    event = Event.query.get_or_404(int(eid))
    edit_form = EditForm()
    if request.method == 'POST' and edit_form.validate_on_submit():
        event.detail = edit_form.detail.data
        poster = request.files.get('poster')
        if poster.filename is not None:
            poster_upload = UploadSet(name='posters',
                                      extensions=('jpg', 'jpeg', 'png', 'bmp'))
            configure_uploads(current_app, (poster_upload))  #加载上传集配置
            try:
                filename = poster_upload.save(poster)
                event.poster_url = poster_upload.url(filename)
            except UploadNotAllowed:
                pass
        else:
            flash('海报上传失败……', 'alert-warning')
        db.session.add(event)
        flash('更新成功', 'alert-success')
        return redirect(url_for('event.event_page', eid=event.id))
    edit_form.detail.data = event.detail
    return render_template('institution/event_edit.html',
                           insti=current_insti(),
                           event=event,
                           edit_form=edit_form)
Exemplo n.º 6
0
def group_new():
    group_form = GroupForm()
    if request.method == 'POST' and group_form.validate_on_submit():
        name = group_form.name.data
        intro = group_form.intro.data
        icon = request.files.get('icon')
        if not (icon is None or icon == ''):
            icon_upload = UploadSet('icons', ('jpg', 'png'))
            configure_uploads(current_app, (icon_upload))
            try:
                filename = icon_upload.save(icon)
                icon_url = icon_upload.url(filename)  #得到icon的URL
            except UploadNotAllowed:
                flash('请上传小组图标', 'alert-danger')
                return render_template('group/new.html', form=group_form)
        else:
            flash('小组图标没上传', 'alert-danger')
            return render_template('group/new.html', form=group_form)

        group = Group(name=name,
                      icon_url=icon_url,
                      intro=intro,
                      owner_id=current_user.id)  #_get_current_object()
        db.session.add(group)
        flash('新建小组 %s 成功!' % name, 'alert-success')
        return redirect(url_for('group.group_index'))
    return render_template('group/new.html', form=group_form)
Exemplo n.º 7
0
class UploadManager(object):
    def __init__(self, app):
        self.videos = UploadSet('videos', ('mp4','webm','wmv','avi','mov',))
        self.images = UploadSet('images', ('jpeg',))
        configure_uploads(app, (self.videos,self.images,))

    def save_image(self, image):
        filename = self.images.save(image)
        return {
            'url': self.images.url(filename),
            'path': self.images.path(filename)
        }

    def save_video(self, video):
        filename = self.videos.save(video)
        return filename

    def lookup_video(self, filename):
        url = self.videos.url(filename)
        path = self.videos.path(filename)
        return url, path
Exemplo n.º 8
0
 def file(self, file_content):
     uploader = UploadSet('surveyimg', IMAGES)
     configure_uploads(app, (uploader))
     patch_request_class(app, 16 * 1024 * 1024)  #: 16 MB limit.
     self.filename = uploader.save(file_content,
                                   name="{0}.".format(str(self)))
Exemplo n.º 9
0
 def file(self, file_content):
     uploader = UploadSet('surveyimg', IMAGES)
     configure_uploads(app, (uploader))
     patch_request_class(app, 16 * 1024 * 1024) #: 16 MB limit.
     self.filename = uploader.save(file_content,
                                   name = "{0}.".format(str(self)))
Exemplo n.º 10
0
    def post(self, bucket_id):
        b = Bucket.query.filter_by(id=bucket_id).first()
        if b is None:
            return {'status':'error',
                    'description':'There\'s no bucket with id: '+id}, 403

        if g.user.id != b.user_id:
            return {'status':'error',
                    'description':'Unauthorized'}, 401

        if request.json:
            params = request.json
        elif request.form:
            params = {}
            for key in request.form:
                params[key] = request.form[key]
        else:
            return {'status':'error','description':'Request Failed'}, 400

        # Replace blank value to None(null) in params
        for key in params:
            params[key] = None if params[key] == "" else params[key]

            if key in ['id', 'user_id', 'bucket_id', 'language', 'body', 'timestamp', 'reg_dt', 'lst_mod_dt']:
                return {'error': key + ' cannot be entered manually.'}, 401

        contents = []

        if 'text' in params and params['text'] is not None:
            contents.append('text')

        if 'url1' in params and params['url1'] is not None:
            contents.append('url1')

        if 'url2' in params and params['url2'] is not None:
            contents.append('url2')

        if 'url3' in params and params['url3'] is not None:
            contents.append('url3')

        if 'photo' in request.files:
            upload_type = 'photo'

            if len(request.files[upload_type].filename) > 64:
                return {'status':'error',
                        'description':'Filename is too long (Max 64bytes include extensions)'}, 403
            upload_files = UploadSet('photos',IMAGES)
            configure_uploads(app, upload_files)

            filename = upload_files.save(request.files[upload_type])
            splits = []

            for item in filename.split('.'):
                splits.append(item)
            extension = filename.split('.')[len(splits) -1]

            f = File(filename=filename, user_id=g.user.id, extension=extension, type=upload_type)
            db.session.add(f)
            db.session.flush()
            db.session.refresh(f)
        else:
            if len(contents) == 0:
                return {'status':'error',
                        'description':'Nothing to Post'}, 403

        p = Plan.query.filter_by(bucket_id=b.id).first()

        if p is None:
            plan = Plan(date=datetime.datetime.now().strftime('%Y%m%d'),
                        user_id=g.user.id,
                        bucket_id=b.id,
                        status=0,
                        lst_mod_dt=datetime.datetime.now())
            db.session.add(plan)

        post = Post(body=None,
                    date=params['date'] if 'date' in params else datetime.datetime.now().strftime('%Y%m%d'),
                    user_id=b.user_id,
                    language=None,
                    bucket_id=bucket_id,
                    text=params['text'] if 'text' in params else None,
                    img_id=f.id if 'photo' in request.files else None,
                    url1=params['url1'] if 'url1' in params else None,
                    url2=params['url2'] if 'url2' in params else None,
                    url3=params['url3'] if 'url3' in params else None,
                    reg_dt=datetime.datetime.now(),
                    lst_mod_dt=datetime.datetime.now())


        db.session.add(post)
        db.session.flush()
        db.session.refresh(post)

        db.session.commit()

        data = {'id':post.id,
                    'user_id':post.user_id,
                    'bucket_id':post.bucket_id,
                    'text':None if post.text is None else post.text,
                    'img_url':None if post.img_id is None else photos.url(File.query.filter_by(id=post.img_id).first().name),
                    'urls':[{'url1':None if post.url1 is None else post.url1},
                            {'url2':None if post.url2 is None else post.url2},
                            {'url3':None if post.url3 is None else post.url3},],
                    'reg_dt':post.reg_dt.strftime("%Y-%m-%d %H:%M:%S"),
                    'lst_mod_dt': None if post.lst_mod_dt is None else post.lst_mod_dt.strftime("%Y-%m-%d %H:%M:%S")}

        return {'status':'success',
                'description':'Successfully posted.',
                'data':data}, 201
Exemplo n.º 11
0
    def post(self, id):
        u = User.query.filter_by(id=id).first()
        if u.id != g.user.id:
            return {'status':'error',
                    'description':'Unauthorized'}, 401

        if request.json:
            params = request.json
        elif request.form:
            params = {}
            for key in request.form:
                params[key] = request.form[key]
        else:
            return {'status':'error','description':'Request Failed'}, 400

        # Replace blank value to None(null) in params
        for key in params:
            params[key] = None if params[key] == "" else params[key]

            if key in ['id', 'user_id', 'reg_dt', 'language']:
                return {'error': key + ' cannot be entered manually.'}, 401

        # Bucket Title required
        if not 'title' in params:
            return {'error':'Bucket title required'}, 401

        # Check ParentID is Valid & set level based on ParentID
        if not 'parent_id' in params or params['parent_id'] == None:
            level = 0
        else:
            b = Bucket.query.filter_by(id=params['parent_id']).first()
            if b is None:
                return {'error':'Invalid ParentID'}, 401
            elif b.user_id != g.user.id:
                return {'error':'Cannot make sub_bucket with other user\'s Bucket'}, 401
            else:
                level = int(b.level) + 1

        if 'rpt_cndt' in params:
            dayOfWeek = datetime.date.today().weekday()
            if params['rpt_type'] == 'WKRP':
                if params['rpt_cndt'][dayOfWeek] == '1':
                    p = Plan(date=datetime.date.today().strftime("%Y%m%d"),
                             user_id=g.user.id,
                             bucket_id=None,
                             status=0,
                             lst_mod_dt=datetime.datetime.now())
                    db.session.add(p)

        if 'photo' in request.files:
            upload_type = 'photo'

            if len(request.files[upload_type].filename) > 64:
                return {'status':'error','description':'Filename is too long (Max 64bytes include extensions)'}, 403
            upload_files = UploadSet('photos',IMAGES)
            configure_uploads(app, upload_files)

            filename = upload_files.save(request.files[upload_type])
            splits = []

            for item in filename.split('.'):
                splits.append(item)
            extension = filename.split('.')[len(splits) -1]

            f = File(filename=filename, user_id=g.user.id, extension=extension, type=upload_type)
            db.session.add(f)
            db.session.flush()
            db.session.refresh(f)


        bkt = Bucket(title=params['title'],
                     user_id=g.user.id,
                     level=str(level),
                     status= params['status'] if 'status' in params else True,
                     private=params['private'] if 'private' in params else False,
                     reg_dt=datetime.datetime.now(),
                     lst_mod_dt=datetime.datetime.now(),
                     deadline=datetime.datetime.strptime(params['deadline'],'%Y-%m-%d').date() if 'deadline' in params \
                                                                                      else datetime.datetime.now(),
                     description=params['description'] if 'description' in params else None,
                     parent_id=params['parent_id'] if 'parent_id' in params else None,
                     scope=params['scope'] if 'scope' in params else None,
                     range=params['range'] if 'range' in params else None,
                     rpt_type=params['rpt_type'] if 'rpt_type' in params else None,
                     rpt_cndt=params['rpt_cndt'] if 'rpt_cndt' in params else None,
                     cvr_img_id=f.id if 'photo' in request.files else None)
                     # cvr_img_id=f.id if 'cvr_img' in params and params['cvr_img'] == 'true' else None)
        db.session.add(bkt)
        db.session.flush()
        db.session.refresh(bkt)

        if 'rpt_cndt' in params:
            if params['rpt_type'] == 'WKRP' and params['rpt_cndt'][dayOfWeek] == '1':
                p.bucket_id = bkt.id

        if 'fb_share' in params:
            social_user = UserSocial.query.filter_by(user_id=u.id).first()
            graph = facebook.GraphAPI(social_user.access_token)
            resp = graph.put_object("me","feed",
                         message= g.user.username + " Posted " + params['title'].encode('utf-8'),
                         link="http://masunghoon.iptime.org:5001",
                         picture=photos.url(File.query.filter_by(id=bkt.cvr_img_id).first().name) if 'photo' in request.files else None,
                         caption="Dream Proj.",
                         description=None if bkt.description is None else bkt.description.encode('utf-8'),
                         name=bkt.title.encode('utf-8'),
                         privacy={'value':params['fb_share'].encode('utf-8')})

            bkt.fb_feed_id = resp['id']

        db.session.commit()

        data={
            'id': bkt.id,
            'user_id': bkt.user_id,
            'title': bkt.title,
            'description': bkt.description,
            'level': bkt.level,
            'status': bkt.status,
            'private': bkt.private,
            'parent_id': bkt.parent_id,
            'reg_dt': bkt.reg_dt.strftime("%Y-%m-%d %H:%M:%S"),
            'deadline': bkt.deadline.strftime("%Y-%m-%d"),
            'scope': bkt.scope,
            'range': bkt.range,
            'rpt_type': bkt.rpt_type,
            'rpt_cndt': bkt.rpt_cndt,
            'lst_mod_dt': None if bkt.lst_mod_dt is None else bkt.lst_mod_dt.strftime("%Y-%m-%d %H:%M:%S"),
            'cvr_img_url': None if bkt.cvr_img_id is None else photos.url(File.query.filter_by(id=bkt.cvr_img_id).first().name),
            'fb_feed_id':None if bkt.fb_feed_id is None else bkt.fb_feed_id
        }

        return {'status':'success',
                'description':'Bucket posted successfully.',
                'data':data}, 201
Exemplo n.º 12
0
    def put(self, id):
        if request.json:
            params = request.json
        elif request.form:
            params = {}
            for key in request.form:
                params[key] = request.form[key]
        else:
            return {'status':'error','description':'Request Failed'}, 500

        b = Bucket.query.filter_by(id=id).first()
        if b.user_id != g.user.id:
            return {'status':'error','description':'Unauthorized'}, 401

        for key in params:
            value = None if params[key]=="" else params[key]

            # Editable Fields
            if key not in ['title','status','private','deadline','description','parent_id','scope','range','rpt_type','rpt_cndt']:
                return {'status':'error','description':'Invalid key: '+key}, 403

            # Nobody can modify id, user_id, reg_dt
            # if key in ['id','user_id','reg_dt']:
            #     return {'status':'error','description':'Cannot change '+key}, 403

            # Just ROLE_ADMIN user can change 'language', 'level'
            if key in ['language','level'] and g.user.role == ROLE_USER:
                return {'status':'error','description':'Only Admin can change' + key}, 401

            # When modify user's parent_id adjusts its level
            if key == 'parent_id':
                if value == None:
                    params['level'] = '0'
                else:
                    pb = Bucket.query.filter_by(id=int(value)).first() # pb = parent bucket
                    if pb == None:
                        return {'status':'error','description':'Parent does not exists'}, 400
                    else:
                        params['level'] = str(int(pb.level)+1)

            # Set other key's validation
            if key == 'title' and len(value) > 128:
                return {'status':'error','description':'Title length must be under 128'}, 400

            if key == 'description' and len(value) > 512:
                return {'status':'error','description':'Description too long (512)'}, 400

            if key == 'deadline':
                value = datetime.datetime.strptime(value,'%Y-%m-%d')

            if key == 'scope' and value not in ['DECADE','YEARLY','MONTHLY']:
                return {'status':'error','description':'Invalid scope value'}, 400

            if key == 'rpt_type' and value not in ['WKRP','WEEK','MNTH']:
                return {'status':'error','description':'Invalid repeat-type value'}, 400

            if key == 'rpt_cndt':
                dayOfWeek = datetime.date.today().weekday()
                if b.rpt_type == 'WKRP' and b.rpt_cndt[dayOfWeek] != value[dayOfWeek]:
                    if value[dayOfWeek] == '1':
                        p = Plan(date=datetime.date.today().strftime("%Y%m%d"),
                                 user_id=b.user_id,
                                 bucket_id=id,
                                 status=0,
                                 lst_mod_dt=datetime.datetime.now())
                        db.session.add(p)
                    else:
                        p = Plan.query.filter_by(date=datetime.date.today().strftime("%Y%m%d"),bucket_id=id).first()
                        db.session.delete(p)

            setattr(b, key, value)

        if 'photo' in request.files:
            upload_type = 'photo'

            if len(request.files[upload_type].filename) > 64:
                return {'status':'error',
                        'description':'Filename is too long (Max 64bytes include extensions)'}, 403
            upload_files = UploadSet('photos',IMAGES)
            configure_uploads(app, upload_files)

            filename = upload_files.save(request.files[upload_type])
            splits = []

            for item in filename.split('.'):
                splits.append(item)
            extension = filename.split('.')[len(splits) -1]

            f = File(filename=filename, user_id=g.user.id, extension=extension, type=upload_type)
            db.session.add(f)
            db.session.flush()
            db.session.refresh(f)

            setattr(b, 'cvr_img_id', f.id)

        b.lst_mod_dt = datetime.datetime.now()
        try:
            db.session.commit()

        except:
            db.session.rollback()
            return {'error':'Something went wrong'}, 500

        data={'id': b.id,
              'user_id': b.user_id,
              'title': b.title,
              'description': b.description,
              'level': b.level,
              'status': b.status,
              'private': b.private,
              'parent_id': b.parent_id,
              'reg_dt': b.reg_dt.strftime("%Y-%m-%d %H:%M:%S"),
              'deadline': b.deadline.strftime("%Y-%m-%d"),
              'scope': b.scope,
              'range': b.range,
              'rpt_type': b.rpt_type,
              'rpt_cndt': b.rpt_cndt,
              'lst_mod_dt': None if b.lst_mod_dt is None else b.lst_mod_dt.strftime("%Y-%m-%d %H:%M:%S"),
              'cvr_img_url': None if b.cvr_img_id is None else photos.url(File.query.filter_by(id=b.cvr_img_id).first().name)}
        return {'status':'success',
                'description':'Bucket put success.',
                'data':data}, 201
Exemplo n.º 13
0
    def put(self,content_id):
        if request.json:
            params = request.json
        elif request.form:
            params = {}
            for key in request.form:
                params[key] = request.form[key]
        else:
            return {'status':'error','description':'Request Failed'}, 500

        post =  Post.query.filter_by(id=content_id).first()
        if post.user_id != g.user.id:
            return {'status':'error',
                    'description':'Unauthorized'}, 401

        for key in params:
            value = None if params[key] == "" else params[key]

            # Editable Fields
            if key not in ['text','url1','url2','url3']:
                return {'status':'error',
                        'description':key + ' field is not editable'}, 403

            # Just ROLE_ADMIN user can change 'language', 'level'
            if key in ['language'] and g.user.role == ROLE_USER:
                return {'status':'error','description':'Only Admin can change' + key}, 401

            # Set Key validataion
            # TODO: Make long url to shortened url
            if key in ['url1','url2','url3'] and len(value) > 512:
                return {'status':'error',
                        'description': key + ' is too long. (max 256 bytes)'}

            setattr(post, key, value)

        if 'photo' in request.files:
            upload_type = 'photo'

            if len(request.files[upload_type].filename) > 64:
                return {'status':'error',
                        'description':'Filename is too long (Max 64bytes include extensions)'}, 403
            upload_files = UploadSet('photos',IMAGES)
            configure_uploads(app, upload_files)

            filename = upload_files.save(request.files[upload_type])
            splits = []

            for item in filename.split('.'):
                splits.append(item)
            extension = filename.split('.')[len(splits) -1]

            f = File(filename=filename, user_id=g.user.id, extension=extension, type=upload_type)
            db.session.add(f)
            db.session.flush()
            db.session.refresh(f)

            setattr(post, 'img_id', f.id)

        post.lst_mod_dt = datetime.datetime.now()

        try:
            db.session.commit()
        except:
            db.session.rollback()
            return {'status':'error',
                    'description':'DB write error'}, 500

        data = {'id':post.id,
                'user_id':post.user_id,
                'date':post.date,
                'bucket_id':post.bucket_id,
                'text':None if post.text is None else post.text,
                'img_url':None if post.img_id is None else photos.url(File.query.filter_by(id=post.img_id).first().name),
                'urls':[{'url1':None if post.url1 is None else post.url1},
                        {'url2':None if post.url2 is None else post.url2},
                        {'url3':None if post.url3 is None else post.url3},],
                'reg_dt':post.reg_dt.strftime("%Y-%m-%d %H:%M:%S"),
                'lst_mod_dt': None if post.lst_mod_dt is None else post.lst_mod_dt.strftime("%Y-%m-%d %H:%M:%S")}

        return {'status':'success',
                'description':'Post PUT success',
                'data':data}, 201