def get_assets_by_ids(self, asset_ids=None):
if asset_ids is None:<EOL><INDENT>raise NullArgument()<EOL><DEDENT>assets = []<EOL>for i in asset_ids:<EOL><INDENT>asset = None<EOL>url_path = construct_url('<STR_LIT>',<EOL>bank_id=self._catalog_idstr,<EOL>asset_id=i)<EOL>try:<EOL><INDENT>asset = self._get_request(url_path)<EOL><DEDENT>except (NotFound, OperationFailed):<EOL><INDENT>if self._objective_view == PLENARY:<EOL><INDENT>raise<EOL><DEDENT>else:<EOL><INDENT>pass<EOL><DEDENT><DEDENT>if asset:<EOL><INDENT>if not (self._asset_view == COMPARATIVE and<EOL>asset in assets):<EOL><INDENT>assets.append(asset)<EOL><DEDENT><DEDENT><DEDENT>return objects.AssetList(assets)<EOL>
Gets an ``AssetList`` corresponding to the given ``IdList``.

        In plenary mode, the returned list contains all of the assets
        specified in the ``Id`` list, in the order of the list,
        including duplicates, or an error results if an ``Id`` in the
        supplied list is not found or inaccessible. Otherwise,
        inaccessible ``Assets`` may be omitted from the list and may
        present the elements in any order including returning a unique
        set.

        :param asset_ids: the list of ``Ids`` to retrieve
        :type asset_ids: ``osid.id.IdList``
        :return: the returned ``Asset list``
        :rtype: ``osid.repository.AssetList``
        :raise: ``NotFound`` -- an ``Id`` was not found
        :raise: ``NullArgument`` -- ``asset_ids`` is ``null``
        :raise: ``OperationFailed`` -- unable to complete request
        :raise: ``PermissionDenied`` -- authorization failure

        *compliance: mandatory -- This method must be implemented.*