from tamr_unify_client.project.attribute_mapping.resource import AttributeMapping
[docs]class AttributeMappingCollection:
    """Collection of :class:`~tamr_unify_client.project.attribute_mapping.resource.AttributeMapping`
    :param client: Client for API call delegation.
    :type client: :class:`~tamr_unify_client.Client`
    :param api_path: API path used to access this collection.
    :type api_path: str
    """
    def __init__(self, client, api_path):
        self.client = client
        self.api_path = api_path
[docs]    def stream(self):
        """Stream attribute mappings in this collection. Implicitly called when iterating
        over this collection.
        :returns: Stream of attribute mappings.
        :rtype: Python generator yielding :class:`~tamr_unify_client.project.attribute_mapping.resource.AttributeMapping`
        """
        all_maps = self.client.get(self.api_path).successful().json()
        for mapping in all_maps:
            yield AttributeMapping(self.client, mapping) 
[docs]    def by_resource_id(self, resource_id):
        """Retrieve an item in this collection by resource ID.
        :param resource_id: The resource ID.
        :type resource_id: str
        :returns: The specified attribute mapping.
        :rtype: :class:`~tamr_unify_client.project.attribute_mapping.resource.AttributeMapping`
        """
        maps = self.stream()
        for mapping in maps:
            split_id = mapping.resource_id
            if resource_id == split_id:
                return mapping
        raise LookupError("cannot locate mapping from resource ID") 
[docs]    def by_relative_id(self, relative_id):
        """Retrieve an item in this collection by relative ID.
       :param relative_id: The relative ID.
       :type relative_id: str
       :returns: The specified attribute mapping.
       :rtype: :class:`~tamr_unify_client.project.attribute_mapping.resource.AttributeMapping`
       """
        resource_id = relative_id.split("attributeMappings/")[1]
        return self.by_resource_id(resource_id) 
[docs]    def create(self, creation_spec):
        """Create an Attribute mapping in this collection
        :param creation_spec: Attribute mapping creation specification should be formatted as specified in the
            `Public Docs for adding an AttributeMapping <https://docs.tamr.com/reference#create-an-attribute-mapping>`_.
        :type creation_spec: dict[str, str]
        :returns: The created Attribute mapping
        :rtype: :class:`~tamr_unify_client.project.attribute_mapping.resource.AttributeMapping`
        """
        data = self.client.post(self.api_path, json=creation_spec).successful().json()
        return AttributeMapping(self.client, data) 
[docs]    def delete_by_resource_id(self, resource_id):
        """Delete an attribute mapping using its Resource ID.
        :param resource_id: the resource ID of the mapping to be deleted.
        :type resource_id: str
        :returns: HTTP response from the server
        :rtype: :class:`requests.Response`
         """
        path = self.api_path + "/" + resource_id
        response = self.client.delete(path).successful()
        return response