def test_override_headers(client, deployment_schema, mocker, response_klass):
    extra_headers = {"custom-serialization": "application/x-avro-json"}
    client = SchemaRegistryClient("https://127.0.0.1:65534",
                                  extra_headers=extra_headers)

    assert client.session.headers.get(
        "custom-serialization") == "application/x-avro-json"

    subject = "test"
    override_header = {"custom-serialization": "application/avro"}

    request_patch = mocker.patch.object(httpx.Client,
                                        "request",
                                        return_value=response_klass(
                                            200, content={"id": 1}))
    client.register(subject, deployment_schema, headers=override_header)

    prepare_headers = client.prepare_headers(body="1")
    prepare_headers["custom-serialization"] = "application/avro"

    request_patch.assert_called_once_with("POST",
                                          mocker.ANY,
                                          headers=prepare_headers,
                                          json=mocker.ANY,
                                          timeout=UNSET)
Example #2
0
def client():
    client = SchemaRegistryClient("http://my-dummy-schema.com")
    client.register = MagicMock(name="register")
    client.get_by_id = MagicMock(name="get_by_id")
    client.register.return_value = 1
    client.get_by_id.return_value = AvroSchema(UserModel._schema)
    return client
Example #3
0
def lambda_handler(event, context):
    responseData = {}
    print(event)
    if 'SCHEMA_REEGISTRY_URI' in os.environ:
        SchemaRegistryURI = os.environ['SCHEMA_REEGISTRY_URI']
        print('SchemaRegistryURI is: {}'.format(SchemaRegistryURI))
    else: 
        responseData['cause'] = "Schema registry URI not provided"
        cfnresponse.send(event, context, cfnresponse.FAILED, responseData)

    if 'SchemaConfig' in event['ResourceProperties']:
        json_content = json.loads(event['ResourceProperties']['SchemaConfig'])
        print("Loaded AVRO schema from file {}".format(json_content))
    else:
        responseData['status'] = "Location of Schema file not provided"
        responseData['cause'] = event['ResourceProperties']
        print('SchemaFile not provided')
        cfnresponse.send(event, context, cfnresponse.FAILED, responseData)

    if event['RequestType'] == 'Create':
        if 'type' in json_content:
            print("Looks like we got valide AVRO schema")
            try:
                client = SchemaRegistryClient(url=SchemaRegistryURI)
            except Exception as e:
                responseData['cause'] = "Schema registry client cannot be created {} \
                    ".format(e.__class__.__name__)
                print(responseData['cause'])
                cfnresponse.send(event, context, cfnresponse.FAILED, responseData)
            print('Schema registry client created')  
            avro_schema = schema.AvroSchema(json_content)
            print('AVRO schema object created')
            ###Get subjects, just for debug
            list_registered_subjects = requests.get(SchemaRegistryURI + "/subjects")
            print("Native http rest response, list of current subjects {}, \
                ".format(list_registered_subjects.json()))
            try:
                schema_id = client.register(json_content['name'] + "-value", avro_schema, timeout=10)
                responseData['cause'] = "Schema {} created successfully, schema id is {} \
                    ".format(json_content['name'], schema_id)
                print(responseData['cause'])
                cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData)
            except Exception as e:
                responseData['cause'] = "Some exception in request to schema register happened, {}\
                    ".format(format(e.__class__.__name__))
                print (responseData['cause'])
                cfnresponse.send(event, context, cfnresponse.FAILED, responseData)
        else:
            responseData['cause'] = 'Provided file not an AVRO schema, \
                there are no /"type/" field in request object'
            print(responseData['cause'])
            cfnresponse.send(event, context, cfnresponse.FAILED, responseData)

    else:
        #if event['RequestType'] == 'Delete' or event['RequestType'] == 'Update':
        responseData['cause'] = 'CloudFormation Delete and Update method not implemented, \
            just return cnfresponse=SUCCSESS without any job/modifications'
        cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData)
def test_override_headers(client, deployment_schema, mocker):
    extra_headers = {"custom-serialization": "application/x-avro-json"}
    client = SchemaRegistryClient(
        "https://127.0.0.1:65534", extra_headers=extra_headers
    )

    assert (
        client.prepare_headers().get("custom-serialization")
        == "application/x-avro-json"
    )

    class Response:
        def __init__(self, status_code, content=None):
            self.status_code = status_code

            if content is None:
                content = {}

            self.content = content

        def json(self):
            return self.content

    subject = "test"
    override_header = {"custom-serialization": "application/avro"}

    request_patch = mocker.patch.object(
        requests.sessions.Session,
        "request",
        return_value=Response(200, content={"id": 1}),
    )
    client.register(subject, deployment_schema, headers=override_header)

    prepare_headers = client.prepare_headers(body="1")
    prepare_headers["custom-serialization"] = "application/avro"

    request_patch.assert_called_once_with(
        "POST", mocker.ANY, headers=prepare_headers, json=mocker.ANY
    )
Example #5
0
## Needs testing

client = SchemaRegistryClient(url="http://127.0.0.1:8081")

deployment_schema = {
    "type":
    "record",
    "namespace":
    "com.kubertenes",
    "name":
    "AvroDeployment",
    "fields": [
        {
            "name": "image",
            "type": "string"
        },
        {
            "name": "replicas",
            "type": "int"
        },
        {
            "name": "port",
            "type": "int"
        },
    ],
}

avro_schema = schema.AvroSchema(deployment_schema)

schema_id = client.register("test-deployment", avro_schema)
Example #6
0
    "akira.data",
    "name":
    "AvroTicker",
    "fields": [{
        "name": "data",
        "type": "string"
    }, {
        "name": "symbol",
        "type": "string"
    }, {
        "name": "index",
        "type": "string",
        "doc": "should be in datetime format"
    }]
})
schema_id = client.register(avro_ticker_schema.name.lower(),
                            avro_ticker_schema)

avro_ticker_serializer = FaustSerializer(client,
                                         avro_ticker_schema.name.lower(),
                                         avro_ticker_schema)

avro_metadata_schema = schema.AvroSchema({
    "type":
    "record",
    "namespace":
    "akira.data",
    "name":
    "AvroMetadata",
    "fields": [{
        "name": "metadata",
        "type": {