def patch_connection(connection_id, session, update_mask=None): """ Update a connection entry """ try: data = connection_schema.load(request.json, partial=True) except ValidationError as err: # If validation get to here, it is extra field validation. raise BadRequest(detail=str(err.messages)) non_update_fields = ['connection_id', 'conn_id'] connection = session.query(Connection).filter_by(conn_id=connection_id).first() if connection is None: raise NotFound("Connection not found") if data.get('conn_id', None) and connection.conn_id != data['conn_id']: raise BadRequest("The connection_id cannot be updated.") if update_mask: update_mask = [i.strip() for i in update_mask] data_ = {} for field in update_mask: if field in data and field not in non_update_fields: data_[field] = data[field] else: raise BadRequest(f"'{field}' is unknown or cannot be updated.") data = data_ for key in data: setattr(connection, key, data[key]) session.add(connection) session.commit() return connection_schema.dump(connection)
def test_serialize(self, session): connection_model = Connection( conn_id='mysql_default', conn_type='mysql', host='mysql', login='******', schema='testschema', port=80, password='******', extra="{'key':'string'}" ) session.add(connection_model) session.commit() connection_model = session.query(Connection).first() deserialized_connection = connection_schema.dump(connection_model) self.assertEqual( deserialized_connection[0], { 'connection_id': "mysql_default", 'conn_type': 'mysql', 'host': 'mysql', 'login': '******', 'schema': 'testschema', 'port': 80, 'extra': "{'key':'string'}" } )
def get_connection(*, connection_id: str, session: Session = NEW_SESSION) -> APIResponse: """Get a connection entry""" connection = session.query(Connection).filter(Connection.conn_id == connection_id).one_or_none() if connection is None: raise NotFound( "Connection not found", detail=f"The Connection with connection_id: `{connection_id}` was not found", ) return connection_schema.dump(connection)
def get_connection(connection_id, session): """Get a connection entry""" connection = session.query(Connection).filter( Connection.conn_id == connection_id).one_or_none() if connection is None: raise NotFound( "Connection not found", detail= f"The Connection with connection_id: `{connection_id}` was not found", ) return connection_schema.dump(connection)
def post_connection(*, session: Session = NEW_SESSION) -> APIResponse: """Create connection entry""" body = request.json try: data = connection_schema.load(body) except ValidationError as err: raise BadRequest(detail=str(err.messages)) conn_id = data['conn_id'] query = session.query(Connection) connection = query.filter_by(conn_id=conn_id).first() if not connection: connection = Connection(**data) session.add(connection) session.commit() return connection_schema.dump(connection) raise AlreadyExists(detail=f"Connection already exist. ID: {conn_id}")
def post_connection(session): """ Create connection entry """ body = request.json try: result = connection_schema.load(body) except ValidationError as err: raise BadRequest(detail=str(err.messages)) data = result.data conn_id = data['conn_id'] query = session.query(Connection) connection = query.filter_by(conn_id=conn_id).first() if not connection: connection = Connection(**data) session.add(connection) session.commit() return connection_schema.dump(connection) raise AlreadyExists("Connection already exist. ID: %s" % conn_id)