Comments (3)
@1letter thanks for reporting this!
@davisagli @robgietema I guess this is something we want to investigate...
from plone.restapi.
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.
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)
- Add Spanish translation HOT 1
- CI Badge HOT 2
- Github Actions are skipped HOT 3
- Undeprecate comma separated expansion parameters HOT 8
- Undeprecate token parameter from vocabularies endpoint HOT 9
- Code that seems to do nothing HOT 2
- Drop Python 3.7 support HOT 1
- jwt_auth PAS plugin is active without being installed HOT 9
- Global Site tabs should also be customizable with customize_entry HOT 5
- navigation_base_url is not also used here HOT 2
- json_body should not read entire request BODY HOT 5
- debug-exceptions = on in instance part in buildout causes requests that return BadRequest to be returned as html instead of json
- KeyError: 'portal' in tests with Python 3.12.1 HOT 10
- Translate validation error messages
- IBlocks SearchableText indexer bypasses plone.textindexer behavior HOT 2
- relatedItems field returns None in the serializer if the related item is deleted HOT 1
- Site Administrator cannot add user to group
- Add remote_url(getRemoteUrl) to link content-types in navigation HOT 4
- Include release notes in Plone 6 Documentation
- Authentication error messages from PAS Plugins aren't returned by the restapi HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from plone.restapi.