Comments (15)
i would add a del self.document[field]
as alternate action instead of throwing an error if a purge_unknown=True
was provided (mind the schema-validation, allow and purge must not be True at the same time).
be aware that you have to fetch the result from Validator.document
after validation.
from cerberus.
sorry, my mistake, the validator-configuration doesn't relate to schema-validation. and on a second thought, i think it's okay to allow any combination:
allow_unknown
- throw an error or notpurge_unknown
- always silent
from cerberus.
del self.document[field]
operates on a copy of the original document so will not work :(
from cerberus.
yep, that's why you have to fetch the document
-property from the used Validator
-instance afterwards. Validator.validate
itself only returns a boolean.
the copying of the document has been introduced just recently to provide a non-destructable mechanism for 'value-coerce
ing'.
from cerberus.
Exactly, the only obvious way I saw how to get to the document was to wrap Validator.validate
, run the validation and then get the validated/coerced etc. document - afterwards as you say. Then loop through the unknown field
errors together with the document and remove fields where necessary, including updating the errors dict.
from cerberus.
i don't get it. can you post some snippet of the code that uses the validator?
from cerberus.
Sure, you can see what I've done here https://gist.github.com/misja/d9b88ea849b9ab86af95
from cerberus.
yes, i saw that. i mean the code that actually calls a document-validation. what would hinder you to access the document-property in that context?
from cerberus.
The validated
method doesn't really solve the issue. I've created a pull request which actually keeps a reference to and not a copy of the current document being validated. This then makes it possible to manipulate document fields, like removing unknown fields and renaming fields (both included in the pull request).
from cerberus.
why would the v.document
not be helpful? the copying of the document was introduced in the context of document-manipulation. i'd like to understand why this is unsatifactory in a similar use-case.
the _validate
-method seems more and more hackish to me where everyone puts his hack in order to get his use-case working, but it doesn't seem that there's a concept how it should operate. with your pr included, there would be 14 lines of code just to figure out what is to be validated. this seems unnecessary complicated and makes extending the code harder and harder in a straight-foward manner.
please also extend the documentation according to you changes. this also makes code-reviews much easier.
from cerberus.
I think my changes are very lightweight and don't change the essence much? The main issue is that _validate
iterates over a document recursively, and the only available context being the root document during each iteration. So a validating method will have access to the root document v.document
, but only receives a field and value, so how would it be able to tell which subdocument currently is being validated? My pull request keeps that subdocument reference to the root document via self.current
so that one can make changes in-place instead of having to traverse v.document
in search for the field.
I'll add some documention for the remove_unknown
flag and rename
validator.
from cerberus.
thanks for the elaboration. then i'd say that the current implementation of _validate
is not suitable at all. (see also #111 on that.)
from cerberus.
Just did a test with one of the problems mentioned in #111, think that by passing self.current
to _validate_required_fields
fixes the issue, just updated the pull request.
from cerberus.
@misja do you still plan on submitting a PR for this feature?
from cerberus.
@nicolaiarocci no, will be holding it off for the moment
from cerberus.
Related Issues (20)
- Unexpected normalization behavior with anyof_schema HOT 1
- Conditional validation for empty parameter
- Dependencies not being honored? HOT 1
- anyof does not respect nullable: True HOT 2
- install_requires=["setuptools"], in setup.py is wrong HOT 4
- Bug with rules_set_registry() for rule with type dict and included schema HOT 3
- Address DeprecationWarning errors to fix installation warning HOT 1
- Importing cerberus takes too long HOT 3
- Coercing fields does not work recursively HOT 2
- pyproject.toml does not specify requires-python HOT 1
- Rename and Coerce do not work together HOT 2
- anyof does not respect required: False HOT 4
- Inside oneof_schema not work default values for nested keys
- "anyof"/"oneof" and "nullable" do not behave as expected HOT 1
- ImportError: cannot import name 'Iterable' from 'collections' HOT 1
- Python 3.12 - SyntaxWarning HOT 1
- Dynamically set value for schema based on document values [Proposed label: feature_request
- Can't use 'oneof' for a list of complex elements
- Whitebox testing an error raising custom validation rule is not supported
- Custom data type validation does not support custom error generation
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 cerberus.