import json
import avesterra as av
[docs]
def examples_of_get_facets_by_retrieve(entity: av.AvEntity,
                                       auth: av.AvAuthorization):
    """
    This function shows how to get facets from an entity.
    :param entity: The entity ID of the  entity to get the facts.
    :param auth: The Orchestra server authorization that allows entity operations.
    """
    print("")
    print("----------------Examples of get facets by retrieve:----------------")
    print("------------------------------------------------------------------")
    object_as_json = json.loads(av.retrieve_facts(entity, auth))
    for fact in object_as_json['Facts']:
        attribute = fact[0]
        facets = fact[2]
        for facet in facets:
            print(f"Fact: {attribute} Fact Value: {fact[1].get('STRING', None)}, "
                  f"Facet: {facet}")
    print("------------------------------------------------------------------\n") 
[docs]
def examples_of_get_facets_by_brute_force(entity: av.AvEntity,
    auth: av.AvAuthorization):
    """
    This function shows how to get facets from an entity, by specifying which
    attributes you want to get.
    :param entity: The entity ID of the  entity to get the facts.
    :param auth: The Orchestra server authorization that allows entity operations.
    """
    # Get the address facets from entity - need to lookup by the facet names
    # Home Address and Work Address
    home_address = av.get_facet(entity=entity,
                                    attribute=av.AvAttribute.ADDRESS,
                                    name='Home Address',
                                    authorization=auth)
    work_address = av.get_facet(entity=entity,
                                    attribute=av.AvAttribute.ADDRESS,
                                    name='Work Address',
                                    authorization=auth)
    print("")
    print("----------------Examples of get facets by brute force:----------------")
    print(f"Entity: {entity} home address: {home_address} work address: {work_address}")
    print("------------------------------------------------------------------\n") 
[docs]
def examples_of_get_factors_by_retrieve(entity: av.AvEntity, auth: av.AvAuthorization):
    """
    This function shows how to get factors from an entity.
    :param entity: The entity ID of the  entity to get the factors.
    :param auth: The Orchestra server authorization that allows entity operations.
    """
    print("")
    print("----------------Examples of get factors by retrieve:----------------")
    object_as_json = json.loads(av.retrieve_entity(entity=entity,
                                                      authorization=auth).decode())
    for fact in object_as_json['Facts']:
        m_facets = fact[2]
        for facet in m_facets:
            m_factors = facet[2]
            for factor in m_factors:
                print(f"Fact: {fact[0]} Fact Value: {fact[1].get('STRING', None)},"
                      f"Facet: {facet[1]}, Factor: {factor} ")
    print("------------------------------------------------------------------\n") 
[docs]
def examples_of_get_factors_by_brute_force(entity: av.AvEntity, auth: av.AvAuthorization):
    """
    This function shows how to get factors from an entity, by specifying which
    attributes you want to get.
    :param entity: The entity ID of the  entity to get the facts.
    :param auth: The Orchestra server authorization that allows entity operations.
    """
    # Let's get the factors. Need to know the facet name and the factor key
    city = av.get_factor(entity=entity,
                              attribute=av.AvAttribute.ADDRESS,
                              name='Work Address',
                              key='city',
                              authorization=auth)
    state = av.get_factor(entity=entity,
                               attribute=av.AvAttribute.ADDRESS,
                               name='Work Address',
                               key='state',
                               authorization=auth)
    zip = av.get_factor(entity=entity,
                             attribute=av.AvAttribute.ADDRESS,
                             name='Work Address',
                             key='zip',
                             authorization=auth)
    print("")
    print("----------------Examples of get factors by brute force:----------------")
    print(f"Entity: {entity} Work address: city: {city}  state: {state}  zip: {zip}")
    print("------------------------------------------------------------------\n")