blob: aa1581d86df26979f3a6c6bb798ea7b0f6ab3bd0 [file] [log] [blame]
#!/usr/bin/env/python
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from apache_atlas.model.typedef import AtlasBusinessMetadataDef
from apache_atlas.model.typedef import AtlasClassificationDef
from apache_atlas.model.typedef import AtlasEntityDef
from apache_atlas.model.typedef import AtlasEnumDef
from apache_atlas.model.typedef import AtlasRelationshipDef
from apache_atlas.model.typedef import AtlasStructDef
from apache_atlas.model.typedef import AtlasTypesDef
from apache_atlas.utils import API
from apache_atlas.utils import BASE_URI
from apache_atlas.utils import HTTPMethod
from apache_atlas.utils import HTTPStatus
class TypeDefClient:
TYPES_API = BASE_URI + "v2/types/"
TYPEDEFS_API = TYPES_API + "typedefs/"
TYPEDEF_BY_NAME = TYPES_API + "typedef/name"
TYPEDEF_BY_GUID = TYPES_API + "typedef/guid"
GET_BY_NAME_TEMPLATE = TYPES_API + "{path_type}/name/{name}"
GET_BY_GUID_TEMPLATE = TYPES_API + "{path_type}/guid/{guid}"
GET_TYPEDEF_BY_NAME = API(TYPEDEF_BY_NAME, HTTPMethod.GET, HTTPStatus.OK)
GET_TYPEDEF_BY_GUID = API(TYPEDEF_BY_GUID, HTTPMethod.GET, HTTPStatus.OK)
GET_ALL_TYPE_DEFS = API(TYPEDEFS_API, HTTPMethod.GET, HTTPStatus.OK)
GET_ALL_TYPE_DEF_HEADERS = API(TYPEDEFS_API + "headers", HTTPMethod.GET, HTTPStatus.OK)
CREATE_TYPE_DEFS = API(TYPEDEFS_API, HTTPMethod.POST, HTTPStatus.OK)
DELETE_TYPE_DEFS = API(TYPEDEFS_API, HTTPMethod.DELETE, HTTPStatus.NO_CONTENT)
DELETE_TYPE_DEF_BY_NAME = API(TYPEDEF_BY_NAME, HTTPMethod.DELETE, HTTPStatus.NO_CONTENT)
def __init__(self, client):
self.client = client
def get_all_typedefs(self, search_filter):
return self.client.call_api(TypeDefClient.GET_ALL_TYPE_DEFS, AtlasTypesDef, search_filter.params)
def get_all_typedef_headers(self, search_filter):
return self.client.call_api(TypeDefClient.GET_ALL_TYPE_DEF_HEADERS, list, search_filter.params)
def type_with_guid_exists(self, guid):
try:
obj = self.client.call_api(TypeDefClient.GET_TYPEDEF_BY_GUID.format_path_with_params(guid), str)
if obj is None:
return False
except Exception:
return False
return True
def type_with_name_exists(self, name):
try:
obj = self.client.call_api(TypeDefClient.GET_TYPEDEF_BY_NAME.format_path_with_params(name), str)
if obj is None:
return False
except Exception:
return False
return True
def get_enumdef_by_name(self, name):
return self.__get_typedef_by_name(name, AtlasEnumDef)
def get_enumdef_by_guid(self, guid):
return self.__get_typedef_by_guid(guid, AtlasEntityDef)
def get_structdef_by_name(self, name):
return self.__get_typedef_by_name(name, AtlasStructDef)
def get_structdef_by_guid(self, guid):
return self.__get_typedef_by_guid(guid, AtlasStructDef)
def get_classificationdef_by_name(self, name):
return self.__get_typedef_by_name(name, AtlasClassificationDef)
def get_Classificationdef_by_guid(self, guid):
return self.__get_typedef_by_guid(guid, AtlasClassificationDef)
def get_entitydef_by_name(self, name):
return self.__get_typedef_by_name(name, AtlasEntityDef)
def get_entitydef_by_guid(self, guid):
return self.__get_typedef_by_guid(guid, AtlasEntityDef)
def get_relationshipdef_by_name(self, name):
return self.__get_typedef_by_name(name, AtlasRelationshipDef)
def get_relationshipdef_by_guid(self, guid):
return self.__get_typedef_by_guid(guid, AtlasRelationshipDef)
def get_businessmetadatadef_by_name(self, name):
return self.__get_typedef_by_name(name, AtlasBusinessMetadataDef)
def get_businessmetadatadef_by_guid(self, guid):
return self.__get_typedef_by_guid(guid, AtlasBusinessMetadataDef)
def create_atlas_typedefs(self, types_def):
return self.client.call_api(TypeDefClient.CREATE_TYPE_DEFS, AtlasTypesDef, None, types_def)
def update_atlas_typedefs(self, types_def):
return self.client.call_api(TypeDefClient.UPDATE_TYPE_DEFS, AtlasTypesDef, None, types_def)
def delete_atlas_typedefs(self, types_def):
return self.client.call_api(TypeDefClient.DELETE_TYPE_DEFS, None, types_def)
def delete_type_by_name(self, type_name):
return self.client.call_api(TypeDefClient.DELETE_TYPE_DEF_BY_NAME.format_path_with_params(type_name))
def __get_typedef_by_name(self, name, typedef_class):
path_type = self.__get_path_for_type(typedef_class)
api = API(TypeDefClient.GET_BY_NAME_TEMPLATE, HTTPMethod.GET, HTTPStatus.OK)
return self.client.call_api(api.format_path({'path_type': path_type, 'name': name}), typedef_class)
def __get_typedef_by_guid(self, guid, typedef_class):
path_type = self.__get_path_for_type(typedef_class)
api = API(TypeDefClient.GET_BY_GUID_TEMPLATE, HTTPMethod.GET, HTTPStatus.OK)
return self.client.call_api(api.format_path({'path_type': path_type, 'guid': guid}), typedef_class)
def __get_path_for_type(self, typedef_class):
if issubclass(AtlasEnumDef, typedef_class):
return "enumdef"
if issubclass(AtlasEntityDef, typedef_class):
return "entitydef"
if issubclass(AtlasClassificationDef, typedef_class):
return "classificationdef"
if issubclass(AtlasStructDef, typedef_class):
return "structdef"
if issubclass(AtlasRelationshipDef, typedef_class):
return "relationshipdef"
if issubclass(AtlasBusinessMetadataDef, typedef_class):
return "businessmetadatadef"
return ""