コード例 #1
0
    def get_items(self, field='target'):
        target_object = self.get_target_object(field)

        if ICollection.providedBy(target_object):
            return [x for x in target_object.queryCatalog(batch=False)]

        elif IDexterityContainer.providedBy(target_object):
            # Folder Contents
            listing = aq_inner(target_object).restrictedTraverse(
                '@@folderListing', None)

            if listing is None:
                return []

            _ = listing(batch=False)

            # Exclude default page
            _id = target_object.getDefaultPage()

            if _id:
                _ = [x for x in _ if _id != x.getId()]

                # If the box for hiding items that are excluded
                # from navigation is checked, filter them out.
                if self.get_valid_value('exclude_navigation'):
                    _ = [x for x in _ if not x.exclude_from_nav]

            return _
コード例 #2
0
    def query(self, start, limit, contentFilter):
        """ Make catalog query for the folder listing.

        @param start: First index to query

        @param limit: maximum number of items in the batch

        @param contentFilter: portal_catalog filtering dictionary with index ->
        value pairs.

        @return: Products.CMFPlone.PloneBatch.Batch object
        """

        # Batch size
        b_size = limit

        # We use different query method, depending on
        # whether we do listing for topic or folder
        if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context):
            # ATTopic like content
            # Call Products.ATContentTypes.content.topic.ATTopic.queryCatalog()
            # method
            # This method handles b_start internally and
            # grabs it from HTTPRequest object
            return self.context.queryCatalog(contentFilter)
        else:
            # Folder or Large Folder like content
            # Call CMFPlone(/skins/plone_scripts/getFolderContents Python
            # script This method handles b_start parameter internally and grabs
            # it from the request object
            return self.context.getFolderContents(contentFilter,
                                                  batch=True,
                                                  b_size=b_size)
コード例 #3
0
    def query(self, start, limit, contentFilter):
        """ Make catalog query for the folder listing.

        @param start: First index to query

        @param limit: maximum number of items in the batch

        @param contentFilter: portal_catalog filtering dictionary with index ->
        value pairs.

        @return: Products.CMFPlone.PloneBatch.Batch object
        """

        # Batch size
        b_size = limit

        # We use different query method, depending on
        # whether we do listing for topic or folder
        if IATTopic.providedBy(self.context) or ICollection.providedBy(
                self.context):
            # ATTopic like content
            # Call Products.ATContentTypes.content.topic.ATTopic.queryCatalog()
            # method
            # This method handles b_start internally and
            # grabs it from HTTPRequest object
            return self.context.queryCatalog(contentFilter)
        else:
            # Folder or Large Folder like content
            # Call CMFPlone(/skins/plone_scripts/getFolderContents Python
            # script This method handles b_start parameter internally and grabs
            # it from the request object
            return self.context.getFolderContents(contentFilter,
                                                  batch=True,
                                                  b_size=b_size)
コード例 #4
0
 def _set_collection(self):
     if ICollection.providedBy(self.context) or \
        (HAS_PAC and pac_ICollection.providedBy(self.context)):
         return self.context
     else:
         collection = getCurrentCollection(self.context)
         return collection
コード例 #5
0
 def query(self):
     """ 
     Make catalog query for the folder listing.
     """
     if ICollection.providedBy(self.context):
         return self.context.queryCatalog(batch=False)
     elif IFolderish.providedBy(self.context):
         return self.context.getFolderContents(batch=False)
コード例 #6
0
 def getCriteriaKeys(self):
     li = []
     if IATTopic.providedBy(self.context) or ICollection.providedBy(
             self.context) or IDXCollection.providedBy(self.context):
         criteria = IListBaseQueryCriteria(self.context)()
         for criterion in [a['i'] for a in criteria]:
             li.append(self.name + '.' + criterion)
     return li
コード例 #7
0
    def target(self):
        target = getattr(self.context, 'target', None)

        if target and hasattr(target, 'to_object'):
            target_object = target.to_object

            if ICollection.providedBy(target_object):
                return target_object
コード例 #8
0
 def getContents(self):
     if ICollection.providedBy(self.context):
         self.contents = [
             x.getObject()
             for x in self.context.queryCatalog({'portal_type': 'Image'})
         ]
     else:
         self.contents = self.context.listFolderContents(
             contentFilter={'portal_type': 'Image'})
コード例 #9
0
def get_collection_query(obj):
    """ return collection's query params
    """

    if IATTopic.providedBy(obj):
        # old style collection
        return obj.buildQuery()

    if ICollection.providedBy(obj):
        # new style collection
        return parse_new_collection_query(obj)
コード例 #10
0
ファイル: views.py プロジェクト: collective/Products.Doormat
    def getCollection(self, item):
        col = item.getCollection()
        if item.limit > 0:
            if HAS_COLLECTIONS and ICollection.providedBy(col) or \
                    HAS_PAC and IDXCollection.providedBy(col):
                results = col.queryCatalog(b_size=item.limit)
            else:
                results = col.queryCatalog(sort_limit=item.limit)[:item.limit]
        else:
            results = col.queryCatalog()

        return results
コード例 #11
0
 def query(self, obj=None):
     """
     Listing der Ordnerinhalte oder Ergebnisse der Kollektion
     """
     if obj:
         query_context = obj
     else:
         query_context = self.context
     if ICollection.providedBy(query_context):
         return query_context.queryCatalog(batch=False)
     elif IFolderish.providedBy(query_context):
         return query_context.getFolderContents(batch=False)
コード例 #12
0
ファイル: views.py プロジェクト: Python3pkg/Products.Doormat
    def getCollection(self, item):
        col = item.getCollection()
        if item.limit > 0:
            if HAS_COLLECTIONS and ICollection.providedBy(col) or \
                    HAS_PAC and IDXCollection.providedBy(col):
                results = col.queryCatalog(b_size=item.limit)
            else:
                results = col.queryCatalog(sort_limit=item.limit)[:item.limit]
        else:
            results = col.queryCatalog()

        return results
コード例 #13
0
 def _set_query_base_search(self):
     """ """
     query = {}
     form = self.request.form
     base_search_uid = form.get("base_search_uid", "").strip()
     if base_search_uid:
         element = uuidsToObjects(uuids=base_search_uid)
         if element and ICollection.providedBy(element[0]):
             collection = element[0]
             query = parseFormquery(collection, collection.query)
         elif element:
             self.context = element[0]
     return query
コード例 #14
0
 def test_collection_is_migrated(self):
     from plone.app.contenttypes.migration.migration import\
         CollectionMigrator
     from plone.app.contenttypes.interfaces import ICollection
     if 'Collection' in self.portal.portal_types.keys():
         self.portal.invokeFactory('Collection', 'collection')
         at_collection = self.portal['collection']
         applyProfile(self.portal, 'plone.app.contenttypes:default')
         migrator = self.get_migrator(at_collection, CollectionMigrator)
         migrator.migrate()
         dx_collection = self.portal['collection']
         self.assertTrue(ICollection.providedBy(dx_collection))
         self.assertTrue(at_collection is not dx_collection)
コード例 #15
0
ファイル: pressrelease.py プロジェクト: EU-OSHA/HWC14-15
 def get_local_press_releases(self):
     """ Looks in the current folder for Collection objects and then queries
         them for items.
     """
     items = []
     for child in self.context.values():
         if ICollection.providedBy(child):
             items = self.results(
                 child,
                 batch=False,
                 sort_on='Date',
                 brains=True)
     return items
コード例 #16
0
ファイル: pressrelease.py プロジェクト: erral/osha.hwccontent
 def get_local_press_releases(self):
     """ Looks in the current folder for Collection objects and then queries
         them for items.
     """
     items = []
     for child in self.context.values():
         if ICollection.providedBy(child):
             items = self.results(
                 child,
                 batch=False,
                 sort_on='Date',
                 brains=True)
     return items
コード例 #17
0
ファイル: __init__.py プロジェクト: tsimkins/agsci.common
    def parent_object(self):

        tag_root = self.tag_root

        if hasattr(tag_root, 'getDefaultPage'):
            default_page_id = tag_root.getDefaultPage()

            if default_page_id in tag_root.objectIds():
                default_page = tag_root[default_page_id]

                if ICollection.providedBy(default_page):
                    return default_page

        return tag_root
コード例 #18
0
ファイル: __init__.py プロジェクト: tsimkins/agsci.common
 def parent_object(self):
     
     tag_root = self.tag_root
     
     if hasattr(tag_root, 'getDefaultPage'):
         default_page_id = tag_root.getDefaultPage()
         
         if default_page_id in tag_root.objectIds():
             default_page = tag_root[default_page_id]
             
             if ICollection.providedBy(default_page):
                 return default_page
         
     return tag_root
コード例 #19
0
ファイル: test_migration.py プロジェクト: mingtak/prome
 def test_collection_is_migrated(self):
     try:
         from plone.app.collection.collection import Collection
     except ImportError:
         pass
     else:
         from plone.app.contenttypes.migration.migration import \
             CollectionMigrator
         from plone.app.contenttypes.interfaces import ICollection
         at_collection = self.createATCTobject(Collection, 'collection')
         migrator = self.get_migrator(at_collection, CollectionMigrator)
         migrator.migrate()
         new_collection = self.portal['collection']
         self.assertTrue(ICollection.providedBy(new_collection))
         self.assertTrue(at_collection is not new_collection)
コード例 #20
0
    def results(self,
                batch=True,
                b_start=0,
                b_size=None,
                sort_on=None,
                limit=None,
                brains=False,
                custom_query=None):
        if not b_size:
            b_size = self.item_count
        if not sort_on:
            sort_on = self.sort_on
        if not limit:
            limit = self.limit

        # Get all results
        collections = [
            collection for collection in self.listFolderContents()
            if ICollection.providedBy(collection)
        ]
        uuids = set()
        results = []
        for collection in collections:
            collection_results = collection.results(batch=False,
                                                    b_start=0,
                                                    b_size=limit,
                                                    sort_on=sort_on,
                                                    limit=limit,
                                                    brains=brains,
                                                    custom_query=custom_query)
            for result in collection_results:
                # Ensure we get each result only once
                if result.uuid() not in uuids:
                    uuids.add(result.uuid())
                    results.append(result)

        # Order the results and limit it
        if sort_on:
            results.sort(key=lambda o: getattr(o, sort_on, None),
                         reverse=self.sort_reversed)
        if limit:
            results = results[:limit]

        # Batch the results
        results = Batch(results, size=b_size, start=b_start)
        return results
コード例 #21
0
ファイル: __init__.py プロジェクト: casdr/plone.restapi
def SerializeToJson(context):
    result = {
        '@context': 'http://www.w3.org/ns/hydra/context.jsonld',
        '@id': context.absolute_url(),
        '@type': context.portal_type,
        'parent': {
            '@id': aq_parent(aq_inner(context)).absolute_url(),
            'title': aq_parent(aq_inner(context)).title,
            'description': aq_parent(aq_inner(context)).description
        }
    }
    if IFolderish.providedBy(context):
        result['member'] = [
            {
                '@id': member.absolute_url(),
                'title': member.title,
                'description': member.description
            }
            for member in context.objectValues()
        ]

    if HAS_PLONE_APP_CONTENTTYPES:
        # Conditional import in order to avoid a hard dependency on p.a.ct
        from plone.app.contenttypes.interfaces import ICollection

        if ICollection.providedBy(context):
            portal = getSite()
            result['member'] = [
                {
                    '@id': '{0}/{1}'.format(
                        portal.absolute_url(),
                        '/'.join(member.getPhysicalPath())
                    ),
                    'title': member.title,
                    'description': member.description
                }
                for member in context.results()
            ]

    for schema in iterSchemata(context):
        for field_name, field in getFields(schema).items():
            value = lookup_field_serializer(context, field)()
            result[json_compatible(field_name)] = value

    return result
コード例 #22
0
ファイル: __init__.py プロジェクト: tsimkins/agsci.common
    def get_items(self, tags):

        parent_object = self.parent_object
        path = '/'.join(self.tag_root.getPhysicalPath())

        if tags:

            if ICollection.providedBy(parent_object):

                return parent_object.results(batch=False,
                                             custom_query={'Tags': tags})

            else:

                return self.portal_catalog.searchResults({
                    'Tags': tags,
                    'path': path
                })

        return []
コード例 #23
0
ファイル: adapter.py プロジェクト: AnneGilles/plone.restapi
def SerializeToJson(context):
    result = {
        '@context': 'http://www.w3.org/ns/hydra/context.jsonld',
        '@id': context.absolute_url(),
        '@type': context.portal_type,
        'parent': {
            '@id': aq_parent(aq_inner(context)).absolute_url(),
            'title': aq_parent(aq_inner(context)).title,
            'description': aq_parent(aq_inner(context)).description
        }
    }
    if IFolderish.providedBy(context):
        result['member'] = [
            {
                '@id': member.absolute_url(),
                'title': member.title,
                'description': member.description
            }
            for member_id, member in context.objectItems()
        ]
    if ICollection.providedBy(context):
        portal = getSite()
        result['member'] = [
            {
                '@id': '{0}/{1}'.format(
                    portal.absolute_url(),
                    '/'.join(member.getPhysicalPath())
                ),
                'title': member.title,
                'description': member.description
            }
            for member in context.results()
        ]
    for title, schema_object in get_object_schema(context):
        value = getattr(context, title, None)
        if value is not None:
            # RichText
            if isinstance(schema_object, RichText):
                result[title] = value.output
            # DateTime
            elif isinstance(schema_object, Datetime):
                # Return DateTime in ISO-8601 format. See
                # https://pypi.python.org/pypi/DateTime/3.0 and
                # http://www.w3.org/TR/NOTE-datetime for details.
                # XXX: We might want to change that in the future.
                result[title] = value().ISO8601()
            # Tuple
            elif isinstance(value, tuple):
                result[title] = list(value)
            # List
            elif isinstance(value, list):
                result[title] = value
            # String
            elif isinstance(value, str):
                result[title] = value
            # Unicode
            elif isinstance(value, unicode):
                result[title] = value
            # Image
            elif isinstance(value, NamedBlobImage):
                result[title] = '{0}/@@images/{1}'.format(
                    context.absolute_url(),
                    title
                )
            # File
            elif isinstance(value, NamedBlobFile):
                result[title] = '{0}/{1}'.format(
                    context.absolute_url(),
                    value.filename
                )
            else:
                result[title] = str(value)

    # Operations
    # result["operation"] = [
    #     {
    #         "@type": "CreateResourceOperation",
    #         "name": "Create Resource",
    #         "method": "POST",
    #         "expects": {
    #             "supportedProperty": [
    #                 {
    #                     "@type": "PropertyValueSpecification",
    #                     "hydra:property": "id",
    #                     "hydra:required": "true",
    #                     "readOnlyValue": "true"
    #                 },
    #                 {
    #                     "@type": "PropertyValueSpecification",
    #                     "hydra:property": "title",
    #                     "hydra:required": "true",
    #                     "readOnlyValue": "false"
    #                 },
    #             ],
    #         }
    #     },
    #     {
    #         "@type": "ReplaceResourceOperation",
    #         "name": "Update Resource",
    #         "method": "PUT",
    #     },
    #     {
    #         "@type": "DeleteResourceOperation",
    #         "name": "Delete Resource",
    #         "method": "DELETE",
    #     }
    # ]

    if getattr(context, 'request', False):
        if context.request.get('append_json_to_hyperlinks', False):
            result = append_json_to_links(result)
    return json.dumps(result, indent=2, sort_keys=True)
コード例 #24
0
 def test_adding(self):
     self.folder.invokeFactory('Collection',
                               'collection1')
     p1 = self.folder['collection1']
     self.assertTrue(ICollection.providedBy(p1))
コード例 #25
0
 def test_factory(self):
     fti = queryUtility(IDexterityFTI,
                        name='Collection')
     factory = fti.factory
     new_object = createObject(factory)
     self.assertTrue(ICollection.providedBy(new_object))
コード例 #26
0
    def test_and_filter_type(self):
        self.assertEqual(len(self.collection.results()), 3)

        result = get_filter_items(self.collection_uid,
                                  'Subject',
                                  cache_enabled=False)

        self.assertEqual(len(result), 4)
        self.assertEqual(get_data_by_val(result, 'all')['count'], 3)
        self.assertEqual(get_data_by_val(result, 'all')['selected'], True)
        self.assertEqual(get_data_by_val(result, u'Süper')['count'], 2)
        self.assertEqual(get_data_by_val(result, u'Evänt')['count'], 1)
        self.assertEqual(get_data_by_val(result, u'Dokumänt')['count'], 2)

        # Test url
        self.assertEqual(qs(result, u'Süper'), {'Subject': u'Süper'})

        catalog_results = ICollection(self.collection).results(
            batch=False,
            brains=True,
            custom_query=make_query(qs(result, u'Süper')))
        self.assertEqual(len(catalog_results), 2)

        result = get_filter_items(self.collection_uid,
                                  'Subject',
                                  request_params={'Subject': u'Süper'},
                                  filter_type="and",
                                  cache_enabled=False)

        self.assertEqual(len(result), 4)
        self.assertEqual(get_data_by_val(result, 'all')['count'], 3)

        # TODO: I'm not sure these counts are correct. It should represent how many results you will get if you click so should be smaller than this
        # but I guess you need to turn on narrow down for that?
        self.assertEqual(get_data_by_val(result, u'Süper')['count'], 2)
        self.assertEqual(get_data_by_val(result, u'Evänt')['count'], 1)
        self.assertEqual(get_data_by_val(result, u'Dokumänt')['count'], 2)

        self.assertEqual(get_data_by_val(result, u'Süper')['selected'], True)

        self.assertEqual(qs(result, u'Süper'), {})
        self.assertEqual(qs(result, u'Dokumänt'), {
            'Subject_op': 'and',
            'Subject': [u'Süper', u'Dokumänt']
        })
        self.assertEqual(qs(result, u'Evänt'), {
            'Subject_op': 'and',
            'Subject': [u'Süper', u'Evänt']
        })

        # Narrow down by 2

        catalog_results = ICollection(self.collection).results(
            batch=False,
            brains=True,
            custom_query=make_query(qs(result, u'Dokumänt')))
        self.assertEqual(len(catalog_results), 1)

        result = get_filter_items(
            self.collection_uid,
            'Subject',
            request_params={'Subject': [u'Süper', u'Dokumänt']},
            filter_type="and",
            cache_enabled=False)

        self.assertEqual(len(result), 4)
        self.assertEqual(get_data_by_val(result, 'all')['count'], 3)
        self.assertEqual(get_data_by_val(result, u'Süper')['count'], 2)

        self.assertEqual(get_data_by_val(result, u'Evänt')['count'], 1)
        self.assertEqual(get_data_by_val(result, u'Dokumänt')['count'], 2)

        self.assertEqual(get_data_by_val(result, u'Süper')['selected'], True)
        self.assertEqual(
            get_data_by_val(result, u'Dokumänt')['selected'], True)

        self.assertEqual(qs(result, u'Süper'), {'Subject': u'Dokumänt'})
        self.assertEqual(qs(result, u'Dokumänt'), {'Subject': u'Süper'})
        self.assertEqual(qs(result, u'Evänt'), {
            'Subject': [u'Süper', u'Dokumänt', u'Evänt'],
            'Subject_op': 'and'
        })

        # Clicking on Event we should get 0 results as none will be in common
        catalog_results = ICollection(self.collection).results(
            batch=False,
            brains=True,
            custom_query=make_query(qs(result, u'Evänt')))
        self.assertEqual(len(catalog_results), 0)
コード例 #27
0
 def add_to_parent(self):
     return ICollection.providedBy(self.context)
コード例 #28
0
def is_collection(obj):
    """ return true if given obj is a plone collection
    """
    return IATTopic.providedBy(obj) or \
        ICollection.providedBy(obj) or \
        IOldCollection.providedBy(obj)
コード例 #29
0
    def test_and_filter_type(self):
        self.assertEqual(len(self.collection.results()), 3)

        result = get_filter_items(self.collection_uid,
                                  "Subject",
                                  cache_enabled=False)

        self.assertEqual(len(result), 4)
        self.assertEqual(get_data_by_val(result, "all")["count"], 3)
        self.assertEqual(get_data_by_val(result, "all")["selected"], True)
        self.assertEqual(get_data_by_val(result, u"Süper")["count"], 2)
        self.assertEqual(get_data_by_val(result, u"Evänt")["count"], 1)
        self.assertEqual(get_data_by_val(result, u"Dokumänt")["count"], 2)

        # Test url
        self.assertEqual(qs(result, u"Süper"), {"Subject": u"Süper"})

        catalog_results = ICollection(self.collection).results(
            batch=False,
            brains=True,
            custom_query=make_query(qs(result, u"Süper")))
        self.assertEqual(len(catalog_results), 2)

        result = get_filter_items(
            self.collection_uid,
            "Subject",
            request_params={"Subject": u"Süper"},
            filter_type="and",
            cache_enabled=False,
        )

        self.assertEqual(len(result), 4)
        self.assertEqual(get_data_by_val(result, "all")["count"], 3)

        # TODO: I'm not sure these counts are correct. It should represent how many results you will get if you click
        # so should be smaller than this but I guess you need to turn on narrow down for that?
        self.assertEqual(get_data_by_val(result, u"Süper")["count"], 2)
        self.assertEqual(get_data_by_val(result, u"Evänt")["count"], 1)
        self.assertEqual(get_data_by_val(result, u"Dokumänt")["count"], 2)

        self.assertEqual(get_data_by_val(result, u"Süper")["selected"], True)

        self.assertEqual(qs(result, u"Süper"), {})
        self.assertEqual(
            qs(result, u"Dokumänt"),
            {
                "Subject_op": "and",
                "Subject": [u"Süper", u"Dokumänt"]
            },
        )
        self.assertEqual(qs(result, u"Evänt"), {
            "Subject_op": "and",
            "Subject": [u"Süper", u"Evänt"]
        })

        # Narrow down by 2

        catalog_results = ICollection(self.collection).results(
            batch=False,
            brains=True,
            custom_query=make_query(qs(result, u"Dokumänt")))
        self.assertEqual(len(catalog_results), 1)

        result = get_filter_items(
            self.collection_uid,
            "Subject",
            request_params={"Subject": [u"Süper", u"Dokumänt"]},
            filter_type="and",
            cache_enabled=False,
        )

        self.assertEqual(len(result), 4)
        self.assertEqual(get_data_by_val(result, "all")["count"], 3)
        self.assertEqual(get_data_by_val(result, u"Süper")["count"], 2)

        self.assertEqual(get_data_by_val(result, u"Evänt")["count"], 1)
        self.assertEqual(get_data_by_val(result, u"Dokumänt")["count"], 2)

        self.assertEqual(get_data_by_val(result, u"Süper")["selected"], True)
        self.assertEqual(
            get_data_by_val(result, u"Dokumänt")["selected"], True)

        self.assertEqual(qs(result, u"Süper"), {"Subject": u"Dokumänt"})
        self.assertEqual(qs(result, u"Dokumänt"), {"Subject": u"Süper"})
        self.assertEqual(
            qs(result, u"Evänt"),
            {
                "Subject": [u"Süper", u"Dokumänt", u"Evänt"],
                "Subject_op": "and"
            },
        )

        # Clicking on Event we should get 0 results as none will be in common
        catalog_results = ICollection(self.collection).results(
            batch=False,
            brains=True,
            custom_query=make_query(qs(result, u"Evänt")))
        self.assertEqual(len(catalog_results), 0)
コード例 #30
0
 def test_adding(self):
     self.folder.invokeFactory('Collection', 'collection1')
     p1 = self.folder['collection1']
     self.assertTrue(ICollection.providedBy(p1))
コード例 #31
0
 def test_factory(self):
     fti = queryUtility(IDexterityFTI, name='Collection')
     factory = fti.factory
     new_object = createObject(factory)
     self.assertTrue(ICollection.providedBy(new_object))
コード例 #32
0
 def test_adding(self):
     self.folder.invokeFactory("Collection", "collection1")
     p1 = self.folder["collection1"]
     self.assertTrue(ICollection.providedBy(p1))
コード例 #33
0
 def getCriteriaKeys(self):
     li = []
     if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context) or IDXCollection.providedBy(self.context):
         criteria = IListBaseQueryCriteria(self.context)()
         for criterion in [a['i'] for a in criteria]:
             li.append(self.name+'.'+criterion)
     return li
コード例 #34
0
 def getCriteria(self):
     if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context) or IDXCollection.providedBy(self.context):
         return IListBaseQueryCriteria(self.context)()
     return []
コード例 #35
0
 def getCriteria(self):
     if IATTopic.providedBy(self.context) or ICollection.providedBy(
             self.context) or IDXCollection.providedBy(self.context):
         return IListBaseQueryCriteria(self.context)()
     return []