Coder Social home page Coder Social logo

Comments (3)

tisto avatar tisto commented on July 20, 2024

@1letter thanks for reporting this!

@davisagli @robgietema I guess this is something we want to investigate...

from plone.restapi.

1letter avatar 1letter commented on July 20, 2024

@tisto @davisagli @robgietema

The Problem is the DefaultJSONSummarySerializer

In the QuerystringSearchGet Service the Get Paramter are copied to self.request["BODY"] but the Serializer use self.request.form to calculate the metadata fields.

def metadata_fields(self):
        query = self.request.form

        if not query:
            # maybe its a POST request
            query = json_body(self.request)
        
        print(query)
        """
        GET
        {'query': '%7B%22query%22%3A%20%5B%7B%22i%22%3A%20%22portal_type%22%2C%20%22o%22%3A%20%22plone.app.querystring.operation.selection.is%22%2C%20%22v%22%3A%20%5B%22News%20Item%22%5D%7D%5D%2C%20%22metadata_fields%22%3A%20%5B%22image_scales%22%2C%20%22getIcon%22%5D%7D'}
        {'query': '%7B%22query%22%3A%20%5B%7B%22i%22%3A%20%22portal_type%22%2C%20%22o%22%3A%20%22plone.app.querystring.operation.selection.is%22%2C%20%22v%22%3A%20%5B%22News%20Item%22%5D%7D%5D%2C%20%22metadata_fields%22%3A%20%5B%22image_scales%22%2C%20%22getIcon%22%5D%7D'}
        {'query': '%7B%22query%22%3A%20%5B%7B%22i%22%3A%20%22portal_type%22%2C%20%22o%22%3A%20%22plone.app.querystring.operation.selection.is%22%2C%20%22v%22%3A%20%5B%22News%20Item%22%5D%7D%5D%2C%20%22metadata_fields%22%3A%20%5B%22image_scales%22%2C%20%22getIcon%22%5D%7D'}

        POST
        {'query': [{'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['News Item']}], 'metadata_fields': ['image_scales', 'getIcon']}
        {'query': [{'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['News Item']}], 'metadata_fields': ['image_scales', 'getIcon']}
        {'query': [{'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.is', 'v': ['News Item']}], 'metadata_fields': ['image_scales', 'getIcon']}
        """
        
        additional_metadata_fields = query.get("metadata_fields", [])
        if not isinstance(additional_metadata_fields, list):
            additional_metadata_fields = [additional_metadata_fields]
        additional_metadata_fields = set(additional_metadata_fields)

        if "_all" in additional_metadata_fields:
            fields_cache = self.request.get("_summary_fields_cache", None)
            if fields_cache is None:
                catalog = getToolByName(self.context, "portal_catalog")
                fields_cache = set(catalog.schema()) | self.non_metadata_attributes
                self.request.set("_summary_fields_cache", fields_cache)
            additional_metadata_fields = fields_cache

        return self.default_metadata_fields | additional_metadata_fields

from plone.restapi.

1letter avatar 1letter commented on July 20, 2024

Sidenote:
self.request["BODY"] is an encoded string b'xxxx' not 'xxxxx'

Maybe that's the cleaner solution

class QuerystringSearchGet(Service):
    """Returns the querystring search results given a p.a.querystring data."""

    def reply(self):
        # We need to copy the JSON query parameters from the querystring
        # into the request body, because that's where other code expects to find them
        self.request["BODY"] = parse.unquote(
            self.request.form.get("query", "{}")
        ).encode(self.request.charset)
        querystring_search = QuerystringSearch(self.context, self.request)
        return querystring_search()

from plone.restapi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.