I need to be able to set some metadata in some custom data types. For now, I'm just trying to set the value of the 'misc_info' field. The client script is this: put( sys.argv[1], sys.argv[2], { 'update_type' : 'metadata', 'misc_info' : 'meta data msg' } ) and my API method is as follows. It executes fine, but the values do not show on the next show() call. Disclaimer: Python is still quite new to me, and it's very likely I do not understand the metadata model and the way library dataset associates work. Any clues will be greatly appreaciated! @web.expose_api def update( self, trans, id, library_id, payload, **kwd ): """ PUT /api/libraries/{encoded_library_id}/contents/{encoded_content_type_and_id} Sets attributes (metadata) on a library item. """ update_type = None if 'update_type' not in payload: trans.response.status = 400 return "Missing required 'update_type' parameter. Please consult the API documentation for help." else: update_type = payload.pop( 'update_type' ) if update_type not in ( 'metadata' ): trans.response.status = 400 return "Invalid value for 'update_type' parameter ( %s ) specified. Please consult the API documentation for help." % update_type content_id = id decoded_type_and_id = trans.security.decode_string_id( content_id ) content_type, decoded_content_id = decoded_type_and_id.split( '.' ) if content_type not in ( 'file' ): trans.response.status = 400 return "Updates allowed only on files, not directories" try: content = trans.sa_session.query( trans.app.model.LibraryDatasetDatasetAssociation ).get( decoded_content_id ) except: content = None if not content or ( not trans.user_is_admin() and not trans.app.security_agent.can_modify_library_item( trans.get_current_user_roles(), content, trans.user ) ): trans.response.status = 400 return "Invalid %s id ( %s ) specified." % ( content_type, str( content_id ) ) metadata = content.get_metadata() content.datatype.before_setting_metadata(content) if not metadata: metadata = {} for name in payload: if name not in [ 'name', 'info', 'dbkey' ]: setattr( metadata, name, payload[name]) content.set_metadata(metadata) content.datatype.after_setting_metadata( content ) trans.sa_session.flush() return "OK" John Duddy Sr. Staff Software Engineer Illumina, Inc. 9885 Towne Centre Drive San Diego, CA 92121 Tel: 858-736-3584 E-mail: jduddy@illumina.com<mailto:jduddy@illumina.com>