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
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
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
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
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)
def test_true_strings(self): nose.ok_(parse_bool('true') == True) nose.ok_(parse_bool('1') == True)
def test_false_strings(self): nose.ok_(parse_bool('false') == False) nose.ok_(parse_bool('0') == False) nose.ok_(parse_bool('') == False)
def test_none_raises_value_error(self): val = parse_bool(None)
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