def get_injected_value(field_metadata, source):
    """ First try for attr, then key, then call, else source """
    if 'attr' in field_metadata:
        return getattr(source, field_metadata['attr'], None)
    elif 'key' in field_metadata:
        target_key = field_metadata['key']
        return source[target_key]
    elif field_metadata['call'] is True:
        return source()
    return source
