如何在临时文件夹中使用CMIS repo.query

时间:2013-05-20 20:11:48

标签: python alfresco cmis

作为集成测试的一部分,我在子文件夹中创建文档:

class CmisTestBase(unittest.TestCase):
    def setUp(self):
        """ Create a root test folder for the test. """
        logger.debug("Creating client")
        self.cmis_client = CmisClient(REPOSITORY_URL, USERNAME, PASSWORD)
        logger.debug("Getting default repo")
        self.repo = self.cmis_client.getDefaultRepository()
        logger.debug("Getting root folder")
        self.root_folder = self.repo.getObjectByPath(TEST_ROOT_PATH)
        logger.debug("Creating test folder")
        self.folder_name = ".".join(['cmislib', self.__class__.__name__, str(time.time())])
        self.test_folder = self.root_folder.createFolder(self.folder_name)

    def tearDown(self):
        """ Clean up after the test. """
        logger.debug("Deleting test folder")
        self.test_folder.deleteTree()

在我的测试中,我创建文档,然后测试我可以使用repo.query查询它们:

class SearchNoauth(SearchTest):
    def setUp(self):
        super(SearchNoauth, self).setUp()

    def tearDown(self):
        super(SearchNoauth, self).tearDown()

    def test_noauth_empty(self):
        logger.debug("Calling test_noauth_empty")
        # Create a single document
        self.create_document_simple()
        # Retrieve all documents (No argument passed)
        response = self.client.profile_noauth()
        self.assertEqual(response.status_code, 200)
        result_data = response.json()
        logger.debug("results: {0}".format(pformat(result_data, indent=4)))
        self.assertEqual(len(result_data), 1)

但就我所知,我找不到在测试范围内创建的自定义内容,因为默认仓库不会搜索测试文件夹。

我期待一个API:

  • 允许搜索文件夹(不仅仅是回购)或

  • 支持在特定文件夹中查找对象的语法

如何构建在文件夹中查找匹配自定义文档的CMIS查询?


再多一点:

  • self.client.profile_noauth是对python客户端库中的profile_noauth方法的调用
  • 击中金字塔服务器
  • 聚合了许多服务,包括Alfresco,
  • 并最终针对Alfresco默认存储库调用repo.query

这个问题的大部分是如何修改外观服务的CMIS查询以查找文件夹。


后来:我想I may have an answer。基本思路是获取文件夹的ID并使用in_folder()

>>> folder = repo.getObjectByPath('/Sites/test-site-1/documentLibrary')
>>> query = """
        select cmis:objectId, cmis:name
        from cmis:document
        where in_folder('%s')
        order by cmis:lastModificationDate desc
    """ % folder.id

1 个答案:

答案 0 :(得分:3)

你在帖子中回答了这个问题。如果要查询特定文件夹中的文档,可以使用in folder子句,并且需要要搜索的文件夹的ID。