示例#1
0
文件: track.py 项目: yjarosz/pygdv
    def traceback(self, id):
        user = handler.user.get_user_in_session(request)

        if not checker.user_own_track(user.id, id) and not checker.is_admin(user):

            flash("You haven't the right to look at any tracks which is not yours", 'error')
            raise redirect('/tracks')
        track = DBSession.query(Track).filter(Track.id == id).first()
        return track.traceback
示例#2
0
文件: project.py 项目: yjarosz/pygdv
    def delete(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        if len(args) > 0:
            project_id = args[0]
            if not checker.check_permission(
                    user=user,
                    project_id=project_id,
                    right_id=constants.right_upload_id
            ) and not checker.is_admin(user=user):
                return reply.error(
                    request,
                    "You must have %s permission to delete the project." %
                    constants.right_upload, '/tracks',
                    {'error': 'wrong credentials'})

        handler.project.delete(project_id=project_id)
        return reply.normal(request, 'Project successfully deleted.',
                            '/tracks', {'success': 'project deleted'})
示例#3
0
文件: project.py 项目: yjarosz/pygdv
    def edit(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        if request.method == 'GET':
            project_id = args[0]
        else:
            project_id = kw.get('pid')
        debug("check permission", 1)
        if not checker.check_permission(
                user=user,
                project_id=project_id,
                right_id=constants.right_upload_id) and not checker.is_admin(
                    user=user):
            flash(
                'You must have %s permission to edit the project.' %
                constants.right_upload, 'error')
            raise redirect('/tracks/', {'pid': project_id})
        #if checker.is_admin(user=user):
        #user = DBSession.query(User).join(Project).filter(Project.id == project_id).first()

        widget = form.EditProject(action=url('/projects/edit/%s' %
                                             project_id)).req()
        widget.value = {'pid': project_id}
        project = DBSession.query(Project).filter(
            Project.id == project_id).first()

        # prendre les user tracks du meme sequence id
        tracks = DBSession.query(Track).join(User.tracks).filter(
            and_(User.id == user.id, Track.sequence_id == project.sequence_id,
                 not_(Track.id.in_([t.id for t in project.tracks])))).all()

        # prendre les sared tracks du meme sequence id
        shared_tracks = handler.user.shared_tracks(
            user.id, constants.rights['download']['id'])
        shared_tracks = [
            t for t in shared_tracks
            if (t.sequence_id == project.sequence_id
                and t.id not in [tr.id for tr in project.tracks])
        ]

        tracks.extend(shared_tracks)

        if request.method == 'GET':
            debug("GET", 2)
            widget.child.children[1].value = project.name
            widget.child.children[2].options = [('', '')] + [
                (t.id, t.name) for t in tracks
            ] + [(t.id, t.name, {
                'selected': True
            }) for t in project.tracks]
            return dict(page='tracks', widget=widget, project_id=project_id)
        debug("POST", 2)
        try:
            debug("validate post", 2)
            widget.validate(kw)
        except twc.ValidationError as e:
            debug("error", 2)
            w = e.widget
            w.child.children[1].value = project.name
            w.child.children[2].options = [(t.id, t.name) for t in tracks
                                           ] + [(t.id, t.name, {
                                               'selected': True
                                           }) for t in project.tracks]
            return dict(page='tracks', widget=w, project_id=project_id)
        debug("validation passed")
        track_ids = kw.get('tracks', [])
        if not track_ids:
            track_ids = []
        if not isinstance(track_ids, list):
            track_ids = [track_ids]
        if len(track_ids) > 0 and '' in track_ids:
            track_ids.remove('')

        # if the project is shared, some track cannot be removed
        for t in project.tracks:
            if not checker.user_own_track(
                    user.id, track=t) and t.id not in track_ids and t.id in [
                        s.id for s in shared_tracks
                    ]:
                track_ids.append(t.id)

        handler.project.e(project_id=project_id,
                          name=kw.get('name'),
                          track_ids=track_ids)
        raise redirect('/tracks/', {'pid': project_id})
示例#4
0
文件: project.py 项目: yjarosz/pygdv
    def share(self, *args, **kw):
        user = handler.user.get_user_in_session(request)

        if request.method == 'GET':
            project_id = args[0]
        else:
            project_id = kw.get('pid')

        if not checker.check_permission(
                user=user,
                project_id=project_id,
                right_id=constants.right_upload_id) and not checker.is_admin(
                    user=user):
            flash('You must have %s permission to share the project',
                  'error') % constants.right_upload
            raise redirect('/tracks', {'pid': project_id})

        project = DBSession.query(Project).filter(
            Project.id == project_id).first()
        widget = form.ShareProject(action=url('/projects/share/%s' %
                                              project_id))

        # public url
        pub = url('/public/project', {'id': project_id, 'k': project.key})
        # download url
        if project.download_key is None:
            project.download_key = project.setdefaultkey()
        down = url('/public/project', {
            'id': project_id,
            'k': project.download_key
        })

        widget.value = {'pid': project_id}

        tl = handler.help.help_address(url('help'), '#share',
                                       'sharing projects')

        if request.method == 'POST':
            if kw.has_key('rights'):
                rights_checkboxes = kw.get('rights_checkboxes', None)
                if rights_checkboxes is not None:
                    if not isinstance(rights_checkboxes, list):
                        rights_checkboxes = [rights_checkboxes]
                    handler.project.change_rights(kw.get('pid'),
                                                  kw.get('cid'),
                                                  rights=rights_checkboxes)
                else:
                    handler.project.change_rights(kw.get('pid'), kw.get('cid'))

            else:
                circle_ids = kw.get('circles', [])
                if not circle_ids: circle_ids = []
                if not isinstance(circle_ids, list):
                    circle_ids = [circle_ids]
                if len(circle_ids) > 0 and '' in circle_ids:
                    circle_ids.remove('')
                handler.project.e(project=project, circle_ids=circle_ids)

        debug(project.get_circle_with_right_display)

        cr_data = [
            util.to_datagrid(datagrid.project_sharing, project.circles_rights,
                             "Sharing",
                             len(project.circles_rights) > 0)
        ]

        widget.child.children[1].options =  [('','')] + [(c.id, c.name) for c in user.circles_sharing if c not in project.shared_circles] +\
                                            [(c.id, c.name, {'selected': True}) for c in project.shared_circles]

        return dict(page='projects',
                    public=pub,
                    download=down,
                    name=project.name,
                    tooltip_links=tl,
                    widget=widget,
                    items=cr_data,
                    project_id=project_id)
示例#5
0
文件: project.py 项目: bbcf/pygdv
    def edit(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        if request.method == 'GET':
            project_id = args[0]
        else:
            project_id = kw.get('pid')
        debug("check permission", 1)
        if not checker.check_permission(user=user, project_id=project_id, right_id=constants.right_upload_id) and not checker.is_admin(user=user):
            flash('You must have %s permission to edit the project.' % constants.right_upload, 'error')
            raise redirect('/tracks/', {'pid': project_id})
        #if checker.is_admin(user=user):
            #user = DBSession.query(User).join(Project).filter(Project.id == project_id).first()

        widget = form.EditProject(action=url('/projects/edit/%s' % project_id)).req()
        widget.value = {'pid': project_id}
        project = DBSession.query(Project).filter(Project.id == project_id).first()

        # prendre les user tracks du meme sequence id
        tracks = DBSession.query(Track).join(User.tracks).filter(
            and_(User.id == user.id, Track.sequence_id == project.sequence_id,
                not_(Track.id.in_([t.id for t in project.tracks])))
        ).all()

        # prendre les sared tracks du meme sequence id
        shared_tracks = handler.user.shared_tracks(user.id, constants.rights['download']['id'])
        shared_tracks = [t for t in shared_tracks if (t.sequence_id == project.sequence_id and t.id not in [tr.id for tr in project.tracks])]

        tracks.extend(shared_tracks)

        if request.method == 'GET':
            debug("GET", 2)
            widget.child.children[1].value = project.name
            widget.child.children[2].options = [('', '')] + [(t.id, t.name) for t in tracks] + [(t.id, t.name, {'selected': True}) for t in project.tracks]
            return dict(page='tracks', widget=widget, project_id=project_id)
        debug("POST", 2)
        try:
            debug("validate post", 2)
            widget.validate(kw)
        except twc.ValidationError as e:
            debug("error", 2)
            w = e.widget
            w.child.children[1].value = project.name
            w.child.children[2].options = [(t.id, t.name) for t in tracks] + [(t.id, t.name, {'selected': True}) for t in project.tracks]
            return dict(page='tracks', widget=w, project_id=project_id)
        debug("validation passed")
        track_ids = kw.get('tracks', [])
        if not track_ids:
            track_ids = []
        if not isinstance(track_ids, list):
            track_ids = [track_ids]
        if len(track_ids) > 0 and '' in track_ids:
            track_ids.remove('')

        # if the project is shared, some track cannot be removed
        for t in project.tracks:
            if not checker.user_own_track(user.id, track=t) and t.id not in track_ids and t.id in [s.id for s in shared_tracks]:
                track_ids.append(t.id)

        handler.project.e(project_id=project_id, name=kw.get('name'), track_ids=track_ids)
        raise redirect('/tracks/', {'pid': project_id})
示例#6
0
文件: project.py 项目: bbcf/pygdv
    def share(self, *args, **kw):
        user = handler.user.get_user_in_session(request)

        if request.method == 'GET':
            project_id = args[0]
        else:
            project_id = kw.get('pid')

        if not checker.check_permission(user=user, project_id=project_id, right_id=constants.right_upload_id) and not checker.is_admin(user=user):
            flash('You must have %s permission to share the project', 'error') % constants.right_upload
            raise redirect('/tracks', {'pid': project_id})

        project = DBSession.query(Project).filter(Project.id == project_id).first()
        widget = form.ShareProject(action=url('/projects/share/%s' % project_id))

        # public url
        pub = url('/public/project', {'id': project_id, 'k': project.key})
        # download url
        if project.download_key is None:
            project.download_key = project.setdefaultkey()
        down = url('/public/project', {'id': project_id, 'k': project.download_key})

        widget.value = {'pid': project_id}

        tl = handler.help.help_address(url('help'), '#share', 'sharing projects')

        if request.method == 'POST':
            if kw.has_key('rights'):
                rights_checkboxes = kw.get('rights_checkboxes', None)
                if rights_checkboxes is not None:
                    if not isinstance(rights_checkboxes,list):
                        rights_checkboxes = [rights_checkboxes]
                    handler.project.change_rights(kw.get('pid'), kw.get('cid'), rights=rights_checkboxes)
                else: handler.project.change_rights(kw.get('pid'), kw.get('cid'))


            else:
                circle_ids = kw.get('circles', [])
                if not circle_ids: circle_ids = []
                if not isinstance(circle_ids, list):
                    circle_ids = [circle_ids]
                if len(circle_ids) > 0 and '' in circle_ids: circle_ids.remove('')
                handler.project.e(project=project, circle_ids=circle_ids)

        debug(project.get_circle_with_right_display)

        cr_data = [util.to_datagrid(datagrid.project_sharing, project.circles_rights, "Sharing", len(project.circles_rights)>0)]

        widget.child.children[1].options =  [('','')] + [(c.id, c.name) for c in user.circles_sharing if c not in project.shared_circles] +\
                                            [(c.id, c.name, {'selected': True}) for c in project.shared_circles]

        return dict(page='projects', public=pub, download=down, name=project.name,
            tooltip_links=tl, widget=widget, items=cr_data, project_id=project_id)
示例#7
0
文件: project.py 项目: bbcf/pygdv
    def delete(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        if len(args) > 0:
            project_id = args[0]
            if not checker.check_permission(user=user, project_id=project_id, right_id=constants.right_upload_id) and not checker.is_admin(user=user):
                return reply.error(request, "You must have %s permission to delete the project." % constants.right_upload,
                        '/tracks', {'error': 'wrong credentials'})

        handler.project.delete(project_id=project_id)
        return reply.normal(request, 'Project successfully deleted.', '/tracks', {'success': 'project deleted'})