def register()

in functions/source/registerType/lambda_function.py [0:0]


def register(event, _):
    logger.error(f"event: {json.dumps(event)}")
    type_name = event['ResourceProperties']['TypeName'].replace("::", "-").lower()
    version = Version(event['ResourceProperties'].get('Version', '0.0.0'))
    if version != Version('0.0.0') and version <= get_current_version(type_name):
        print("version already registered is greater than this version, leaving as is.")
        if not cfn.list_type_versions(Type='RESOURCE', TypeName=event['ResourceProperties']['TypeName'])['TypeVersionSummaries']:
            print("resource missing, re-registering...")
        else:
            try:
                arn = cfn.describe_type(Type='RESOURCE', TypeName=event['ResourceProperties']['TypeName'])['Arn']
                return arn
            except cfn.exceptions.TypeNotFoundException:
                print("resource missing, re-registering...")
    execution_role_arn = put_role(type_name, event['ResourceProperties']['IamPolicy'], execution_trust_policy)
    log_role_arn = put_role('CloudFormationRegistryResourceLogRole', log_policy, log_trust_policy)
    kwargs = {
       "Type": 'RESOURCE',
       "TypeName": event['ResourceProperties']['TypeName'],
       "SchemaHandlerPackage": event['ResourceProperties']['SchemaHandlerPackage'],
        "LoggingConfig": {
            "LogRoleArn": log_role_arn,
            "LogGroupName": f"/cloudformation/registry/{type_name}"
        },
        "ExecutionRoleArn": execution_role_arn
    }
    retries = 3
    while True:
        try:
            try:
                response = cfn.register_type(**kwargs)
            except cfn.exceptions.CFNRegistryException as e:
                if "Maximum number of versions exceeded" not in str(e):
                    raise
                delete_oldest(event['ResourceProperties']['TypeName'])
                continue
            version_arn = stabilize(response['RegistrationToken'])
            break
        except Exception as e:
            if not retries:
                raise
            retries -= 1
            logger.error(e, exc_info=True)
            sleep(60)
    if version_arn:
        cfn.set_type_default_version(Arn=version_arn)
        set_version(type_name, event['ResourceProperties'].get('Version', '0.0.0'))
    return version_arn