Пример #1
0
    def update(self, user):
        if 'email' in request.form:
            email = request.form.get('email', '').strip()
            if not email:
                abort(HTTP.BAD_REQUEST)

            user.email = email

        if 'display_name' in request.form:
            user.display_name = request.form.get('display_name')

        if 'password' in request.form:
            user.password = request.form.get('password')

        if user.password == '':
            user.is_active = False
        else:
            if 'is_active' in request.form:
                user.is_active = parse_bool(request.form.get('is_active'))

        if 'is_admin' in request.form:
            is_admin = parse_bool(request.form.get('is_admin'))
            user.role = Roles.get('ADMIN' if is_admin else 'USER')

        return user
Пример #2
0
    def post(self, id=None):
        if id == 'me':
            abort(HTTP.METHOD_NOT_ALLOWED)

        if g.user is None:
            abort(HTTP.METHOD_NOT_ALLOWED)

        email = request.form.get('email')
        if not email:
            abort(HTTP.BAD_REQUEST)

        display_name = request.form.get('display_name')
        is_active = False
        password = request.form.get('password')
        if password:
            is_active = parse_bool(request.form.get('is_active', False))
        # FIXME: Check permissions
        is_admin = parse_bool(request.form.get('admin', False))

        try:
            user = self.create(display_name=display_name, email=email,
                               password=password, is_active=is_active,
                               is_admin=is_admin)
        except (IntegrityError, ObjectExistsError):
            abort(HTTP.CONFLICT)

        response = marshal(user, self.get_resource_fields())
        headers = {'Location': url_for('users', id=user.pk)}

        return response, 201, headers
Пример #3
0
    def post(self, id=None):
        if id == 'me':
            abort(HTTP.METHOD_NOT_ALLOWED)

        if g.user is None:
            abort(HTTP.METHOD_NOT_ALLOWED)

        email = request.form.get('email')
        if not email:
            abort(HTTP.BAD_REQUEST)

        display_name = request.form.get('display_name')
        is_active = False
        password = request.form.get('password')
        if password:
            is_active = parse_bool(request.form.get('is_active', False))
        # FIXME: Check permissions
        is_admin = parse_bool(request.form.get('admin', False))

        try:
            user = self.create(display_name=display_name, email=email,
                               password=password, is_active=is_active,
                               is_admin=is_admin)
        except (IntegrityError, ObjectExistsError):
            abort(HTTP.CONFLICT)

        response = marshal(user, self.get_resource_fields())
        headers = {'Location': url_for('users', id=user.pk)}

        return response, 201, headers
Пример #4
0
    def update(self, playlist):
        if 'name' in request.form:
            playlist.name = request.form.get('name')

        if 'read_only' in request.form:
            playlists.read_only = parse_bool(request.form.get('read_only'))

        return playlist
Пример #5
0
    def update(self, playlist):
        if 'name' in request.form:
            playlist.name = request.form.get('name')

        if 'read_only' in request.form:
            playlists.read_only = parse_bool(request.form.get('read_only'))

        return playlist
Пример #6
0
    def full_tree(self, result):
        if not hasattr(self, 'get_full_tree'):
            return result

        options = request.args.to_dict()
        full_tree = parse_bool(options.get('fulltree', ''))

        if full_tree:
            return self.get_full_tree(result)

        return result
Пример #7
0
    def full_tree(self, result):
        if not hasattr(self, 'get_full_tree'):
            return result

        options = request.args.to_dict()
        full_tree = parse_bool(options.get('fulltree', ''))

        if full_tree:
            return self.get_full_tree(result)

        return result
Пример #8
0
 def test_random_strings(self):
     nose.ok_(parse_bool('derp') == True)
     nose.ok_(parse_bool('_') == True)
     nose.ok_(parse_bool('.') == True)
     nose.ok_(parse_bool('$') == True)
Пример #9
0
 def test_true_strings(self):
     nose.ok_(parse_bool('true') == True)
     nose.ok_(parse_bool('1') == True)
Пример #10
0
 def test_false_strings(self):
     nose.ok_(parse_bool('false') == False)
     nose.ok_(parse_bool('0') == False)
     nose.ok_(parse_bool('') == False)
Пример #11
0
 def test_none_raises_value_error(self):
     val = parse_bool(None)
Пример #12
0
class TrackResource(Resource):
    """ The resource responsible for tracks. """

    db_model = Track

    def get_resource_fields(self):
        return {
            'id': fields.String(attribute='pk'),
            'uri': InstanceURI('tracks'),
            'files': TrackFiles,
            'bitrate': fields.Integer,
            'length': fields.Integer,
            'title': fields.String,
            'slug': fields.String,
            'artists': ManyToManyField(Artist, {
                'id': fields.String(attribute='pk'),
                'uri': InstanceURI('artists'),
            }),
            'albums': ManyToManyField(Album, {
                'id': fields.String(attribute='pk'),
                'uri': InstanceURI('albums'),
            }),
            'ordinal': fields.Integer,
        }

    def post(self):
        params = {
            'title': request.form.get('title', '').strip(),
            'artists': request.form.getlist('artist_id'),
            'albums': request.form.getlist('album_id'),
            'ordinal': request.form.get('ordinal'),
        }

        if 'track' not in request.files:
            abort(HTTP.BAD_REQUEST)

        try:
            track = self.create(**params)
        except (IntegrityError, ObjectExistsError):
            abort(HTTP.CONFLICT)

        response = marshal(track, self.get_resource_fields())
        headers = {'Location': url_for('tracks', id=track.pk)}

        return response, 201, headers

    def create(self, title, artists, albums, ordinal):
        UploadHandler = app.config.get('UPLOAD_HANDLER')
        try:
            handler = UploadHandler(track=request.files.get('track'))
        except InvalidFileTypeError, e:
            abort(HTTP.UNSUPPORTED_MEDIA_TYPE)

        handler.save()

        hash_file = parse_bool(request.args.get('hash_file', True))
        no_metadata = parse_bool(request.args.get('no_metadata', False))

        track = Track(path=handler.path, hash_file=hash_file,
                      no_metadata=no_metadata)
        db.session.add(track)

        # If an artist (or album) is given as argument, it will take precedence
        # over whatever the file's metadata say.
        artist_list = []
        if artists:
            try:
                artist_list.extend(get_list(Artist, artists))
            except ValueError:
                abort(HTTP.BAD_REQUEST)
        else:
            if handler.artist:
                artist_list.append(get_by_name(Artist, handler.artist))

        album_list = []
        if albums:
            try:
                album_list.extend(get_list(Album, albums))
            except ValueError:
                abort(HTTP.BAD_REQUEST)
        else:
            if handler.album:
                artist_list.append(get_by_name(Album, handler.album))

        for artist in artist_list:
            db.session.add(artist)
            artist.tracks.append(track)

        for album in album_list:
            db.session.add(album)
            album.tracks.append(track)

        db.session.commit()

        return track