def _agave_listing(self, system, file_path, **kwargs):
        """Returns a "listing" dict constructed with the response from Agave.

        :param str sytem: System id
        :param str file_path: Path to list

        :returns: A dict with information of the listed file and, when possible, 
        a list of :class:`~designsafe.apps.api.data.agave.files.AgaveFile` objects
        dict in the key ``children``
        :rtype: dict

        Notes:
        -----

            This should not be called directly. See py:meth:`listing(file_id)`
            for more information.
        """
        listing = AgaveFile.listing(system, file_path, self.agave_client, source="public", **kwargs)

        root_file = filter(lambda x: x.full_path == file_path, listing)

        default_pems = [
            {
                "username": self.username,
                "permission": {"read": True, "write": False, "execute": True},
                "recursive": True,
            }
        ]

        list_data = root_file[0].to_dict(default_pems=default_pems)
        list_data["children"] = [o.to_dict(default_pems=default_pems) for o in listing if o.full_path != file_path]

        return list_data
    def test_listing(self):
        with open('designsafe/apps/api/fixtures/agave_home_listing.json') as f:
            listing_json = json.load(f)
        ac = mock.Mock(autospec = Agave)
        ac.files.list.return_value = listing_json
        file_path = '%s/%s' % (self.user.username, self.afile_json['path'])

        listing = AgaveFile.listing(settings.AGAVE_STORAGE_SYSTEM,
                                    file_path, agave_client = ac)

        ac.files.list.assert_called_with(systemId = settings.AGAVE_STORAGE_SYSTEM, filePath = file_path, limit = 100, offset = 0)
        for i, af in enumerate(listing):
            self.assertEqual(af.full_path, listing_json[i]['path'])
    def test_listing(self):
        with open('designsafe/apps/api/fixtures/agave_home_listing.json') as f:
            listing_json = json.load(f)
        ac = mock.Mock(autospec=Agave)
        ac.files.list.return_value = listing_json
        file_path = '%s/%s' % (self.user.username, self.afile_json['path'])

        listing = AgaveFile.listing(settings.AGAVE_STORAGE_SYSTEM,
                                    file_path,
                                    agave_client=ac)

        ac.files.list.assert_called_with(
            systemId=settings.AGAVE_STORAGE_SYSTEM,
            filePath=file_path,
            limit=100,
            offset=0)
        for i, af in enumerate(listing):
            self.assertEqual(af.full_path, listing_json[i]['path'])
    def _agave_listing(self, system, file_path, **kwargs):
        """Returns a "listing" dict constructed with the response from Agave.

        :param str sytem: System id
        :param str file_path: Path to list

        :returns: A dict with information of the listed file and, when possible,
        a list of :class:`~designsafe.apps.api.data.agave.files.AgaveFile` objects
        dict in the key ``children``
        :rtype: dict

        Notes:
        -----

            This should not be called directly. See py:meth:`listing(file_id)`
            for more information.
        """
        listing = AgaveFile.listing(system,
                                    file_path,
                                    self.agave_client,
                                    source='public',
                                    **kwargs)

        root_file = filter(lambda x: x.full_path == file_path, listing)

        default_pems = [{
            'username': self.username,
            'permission': {
                'read': True,
                'write': False,
                'execute': True
            },
            'recursive': True
        }]

        list_data = root_file[0].to_dict(default_pems=default_pems)
        list_data['children'] = [
            o.to_dict(default_pems=default_pems) for o in listing
            if o.full_path != file_path
        ]

        return list_data