def get_all_asset_metadata(self, course_key, asset_type, start=0, maxresults=-1, sort=None, **kwargs): """ Returns a list of asset metadata for all assets of the given asset_type in the course. Args: course_key (CourseKey): course identifier asset_type (str): the block_type of the assets to return start (int): optional - start at this asset number. Zero-based! maxresults (int): optional - return at most this many, -1 means no limit sort (array): optional - None means no sort (sort_by (str), sort_order (str)) sort_by - one of 'uploadDate' or 'displayname' sort_order - one of SortOrder.ascending or SortOrder.descending Returns: List of AssetMetadata objects. """ course_assets = self._find_course_assets(course_key) if course_assets is None: # If no course assets are found, return None instead of empty list # to distinguish zero assets from "not able to retrieve assets". return None # Determine the proper sort - with defaults of ('displayname', SortOrder.ascending). sort_field = 'filename' sort_order = ModuleStoreEnum.SortOrder.ascending if sort: if sort[0] == 'uploadDate': sort_field = 'edited_on' if sort[1] == ModuleStoreEnum.SortOrder.descending: sort_order = ModuleStoreEnum.SortOrder.descending all_assets = SortedListWithKey(course_assets.get(asset_type, []), key=itemgetter(sort_field)) num_assets = len(all_assets) start_idx = start end_idx = min(num_assets, start + maxresults) if maxresults < 0: # No limit on the results. end_idx = num_assets step_incr = 1 if sort_order == ModuleStoreEnum.SortOrder.descending: # Flip the indices and iterate backwards. step_incr = -1 start_idx = (num_assets - 1) - start_idx end_idx = (num_assets - 1) - end_idx ret_assets = [] for idx in xrange(start_idx, end_idx, step_incr): raw_asset = all_assets[idx] new_asset = AssetMetadata(course_key.make_asset_key(asset_type, raw_asset['filename'])) new_asset.from_mongo(raw_asset) ret_assets.append(new_asset) return ret_assets
def find_asset_metadata(self, asset_key, **kwargs): """ Find the metadata for a particular course asset. Arguments: asset_key (AssetKey): key containing original asset filename Returns: asset metadata (AssetMetadata) -or- None if not found """ course_assets, asset_idx = self._find_course_asset(asset_key) if asset_idx is None: return None info = asset_key.block_type mdata = AssetMetadata(asset_key, asset_key.path, **kwargs) all_assets = course_assets[info] mdata.from_mongo(all_assets[asset_idx]) return mdata