Comments (9)
Currently YAMLError is what gets raised for normal parsing errors (syntax errors, etc.) whereas StrictYAMLError is what gets raised if your schema doesn't match the input or if you use one of the prohibited features of YAML.
Ideally there should be one root exception for all of this so users of the library can just put one try/except and get a nicely formatted error that clearly describes the issue that they face. This is why I inherit from YAMLError.
from strictyaml.
Actually that's a good point I should expose ruamel.yaml's YAMLError in strictyaml's init.py.
from strictyaml.
You should preferably not expose the API of ruamel.yaml, and should preferably declare your own exceptions hierarchy, and automatically convert all YAMLError
from ruamel.yaml to your own exceptions (of course keep the distinction between errors that are related to YAML and errors that are related to the validation process).
from strictyaml.
Why?
from strictyaml.
Because your package will look better as a YAML loader with type safety, less as a YAML validator that imposes to load YAML documents through its API and to manipulate it through one of its dependencies.
from strictyaml.
There's nothing particularly wrong with the way ruamel.yaml loads YAML. It adheres to the spec just fine and it validates what's in the spec just fine and the exceptions it raises are fine. This is why I used it - it's an excellent base to build upon.
strictyaml is not supposed to be a parser in its own right.
from strictyaml.
strictyaml is not supposed to be a parser in its own right.
Currently, it is not possible to:
- Validate a YAML without loading it with your tool (ala pykwalify).
- Validate a YAML after it has been loaded by ruamel.yaml or pyyaml (ala https://pypi.python.org/pypi/schema).
So either your provide a feature parity with ruamel.yaml in your load
function, or maybe you should not enforce the use of your load
function?
from strictyaml.
It's not, no. The reason for this is because I wanted to ensure that validation errors included line numbers (and in the future, code snippets) - these things would typically be lost if you used another tool to parse first and then passed the result on.
from strictyaml.
I understand, but that means that your validator implies a burden and is not a "drop-in" replacement for ruamel.yaml with a lot of cool stuff about type checking. ;-)
from strictyaml.
Related Issues (20)
- Problem loading document with a single string
- Repeated revalidate() raises Invalid state HOT 2
- Failed revalidation leads to inconsistant state
- Fasjo HOT 3
- Website fails to acknowledge that the Norway problem was fixed in YAML 1.2 HOT 2
- strictyaml does not act as "a near-drop in replacement for pyyaml" HOT 4
- The type order of optional arguments affects the results HOT 2
- Date vs Datetime HOT 2
- Support python2.7.18 HOT 2
- 1.7.0 is broken (cannot import name 'ruamel' from partially initialized module 'strictyaml') HOT 5
- Map containing only Optionals does not validate an empty dict
- as_document and load have dissimilar results for CommaSeparated(Int())
- Doesn't Work At All For Lists / Arrays? HOT 4
- New lines after comment line causes `NotImplementedError`
- Feature request/Question: "Optionalize" maps HOT 1
- Thoughts regarding case-sensitivity of keys HOT 6
- Why not: non-Turing complete configuration languages
- Cannot iterate on emtpy list
- BUG: MapCombined documentation different traceback
- Feature: strictyaml.scalar.Time
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 strictyaml.