def get_ep_comment(uc,
                   object_id,
                   ver='2.3',
                   **kwargs):
    """
    Return the comments for an ePortfolio object identified by its ID.

    Parameters:
        uc: user context, from d2lvalence.auth.fashion_user_context
        object_id: an ePortfolio object's unique identifier
        ver (optional): ePortfolio API version as a String

    Return data includes two properties:

    PagingInfo: dict containing:
        Bookmark: number (int) of last item of PagedResultSet returned for
         passing to get remaining items in PagedResultSet
        HasMoreItems: boolean,  True if more items in PagedResultSet to return

    Items: list containing dictionaries of the following properties for each
     comment:
        ObjectId: unique int ePortfolio identifier
        CommentId: unique int ePortfolio comment identifier
        UserId: unique int D2L user identifier
        CreatedDate: string containing creation date of comment
        Body: string containing the comment body in HTML
    """
    route = '/d2l/api/eP/{0}/object/{1}/comments/'.format(ver, object_id)
    r = d2l_service._get(route, uc, **kwargs)
    return d2l_data.PagedResultSet(r)
def get_ep_object_content(uc,
                          object_id,
                          ver='2.3',
                          **kwargs):
    """
    Return the associated file(s) of an ePortfolio object as a file stream.

    Parameters:
        uc: user context, from d2lvalence.auth.fashion_user_context
        object_id: an ePortfolio object's unique identifier
        ver (optional): ePortfolio API version as a String
    """
    route = '/d2l/api/eP/{0}/object/{1}/content'.format(ver, object_id)
    return d2l_service._get(route, uc, **kwargs)
def get_ep_tag(uc,
               object_id,
               ver='2.3',
               **kwargs):
    """
    Return the tags for an ePortfolio object identified by its ID.

    Parameters:
        uc: user context, from d2lvalence.auth.fashion_user_context
        object_id: an ePortfolio object's unique identifier
        ver (optional): ePortfolio API version as a String

    Return data is a list of dictionaries. Each dictionary contains:
        Type: int value 0 for public tags, 1 for private tags
        Text: string containing tag text
    """
    route = '/d2l/api/eP/{0}/object/{1}/tags/'.format(ver, object_id)
    r = d2l_service._get(route, uc, **kwargs)
    return r
def get_ep_presentation(uc,
                        object_id,
                        ver='2.3',
                        c=False,
                        **kwargs):
    """
    Return an ePortfolio presentation by ID.

    Parameters:
        uc: user context, from d2lvalence.auth.fashion_user_context
        object_id: an ePortfolio object's unique identifier
        ver (optional): ePortfolio API version as a String
        c (optional): include comments attached to object if true
    """
    kwargs.setdefault('params', {})
    if c:
        kwargs['params'].update({'c': c})
    route = '/d2l/api/eP/{0}/presentation/{1}'.format(ver, object_id)
    r = d2l_service._get(route, uc, **kwargs)
    return epPresentation(r)
def get_ep_objects(uc,
                   ver='2.3',
                   c=False,
                   q='',
                   bookmark='',
                   pagesize=None,
                   **kwargs):
    """
    Return all ePortfolio objects owned by the current user context.

    Parameters:
        uc: user context, from d2lvalence.auth.fashion_user_context
        ver (optional): ePortfolio API version as a String
        c (optional): set to True to include comments
        q (optional): query filter expression as a String to filter results,
         (docs.valence.desire2learn.com/res/epobject.html#object-query-filters)
        bookmark (optional): ObjectId of last item in data segment, passed to
         start the next data segment with the following ObjectId
        pagesize (optional): int number of entries to return per data segment

    Return data includes two properties:
    PagingInfo (dict):
        Bookmark: number (int) of last item of PagedResultSet returned for
         passing to get remaining items in PagedResultSet
        HasMoreItems: boolean,  True if more items in PagedResultSet to return
    Items: list containing all of the relevant ePortfolio object properties
     for each item.
    """
    route = '/d2l/api/eP/{0}/objects/my/'.format(ver)
    kwargs.setdefault('params', {})
    if c:
        kwargs['params'].update({'c': c})
    if q:
        kwargs['params'].update({'q': q})
    if bookmark:
        kwargs['params'].update({'bookmark': bookmark})
    if pagesize:
        kwargs['params'].update({'pagesize': pagesize})
    r = d2l_service._get(route, uc, **kwargs)
    return d2l_data.PagedResultSet(r)
def get_ep_object_properties(uc,
                             object_id,
                             ver='2.3',
                             c=False,
                             **kwargs):
    """
    Return an ePortfolio object by ID. Checks whether this is a specific type
    of ePortfolio object and return appropriate data corresponding to type.

    Parameters:
        uc: user context, from d2lvalence.auth.fashion_user_context
        object_id: an ePortfolio object's unique identifier
        ver (optional): ePortfolio API version as a String
        c (optional): include comments attached to object if true
    """
    kwargs.setdefault('params', {})
    if c:
        kwargs['params'].update({'c': c})
    route = '/d2l/api/eP/{0}/object/{1}'.format(ver, object_id)
    # Gets generic ePortfolio object properties
    r = d2l_service._get(route, uc, **kwargs)

    # Gets specific object properties for unique epObject types
    if r['ObjectTypeId'] == EPOBJ_T.get('file_artifact'):
        return get_ep_file_artifact(uc, object_id, ver, c, **kwargs)

    elif r['ObjectTypeId'] == EPOBJ_T.get('url_artifact'):
        return get_ep_url_artifact(uc, object_id, ver, c, **kwargs)

    elif r['ObjectTypeId'] == EPOBJ_T.get('collection'):
        return get_ep_collection(uc, object_id, ver, c, **kwargs)

    elif r['ObjectTypeId'] == EPOBJ_T.get('presentation'):
        return get_ep_presentation(uc, object_id, ver, c, **kwargs)

    else:
        return epObject(r)