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)
示例#4
0
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)
示例#5
0
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)