Comments (7)
Hi @kmcquade.
This YAML is actually valid but not very common. You can try pasting it into a YAML validator to confirm this.
The YAML spec refers to this as a "complex map key" which we leverage here to denote an Endpoint which is a combination of a Path and a Method.
The YAML spec explains it but not very well unfortunately:
A question mark and space (“? ”) indicate a complex mapping key.
You can also see this related thread.
I hope this clarifies it.
Reuven
from oasdiff.
Oh wow I didn't know that. I guess you do learn something new every day.
I'm trying to load that YAML into Python but I don't think the Python YAML module supports this. Any suggestions? Is there a way for oasdiff to toggle that feature by chance?
from oasdiff.
This seems to work:
from pathlib import Path
import ruamel.yaml
file_name = Path('data/test.yaml')
yaml = ruamel.yaml.YAML()
data = yaml.load(file_name)
yaml.dump(data['endpoints']['modified'] , sys.stdout)
Installation:
pip install ruamel.yaml
from oasdiff.
Sorry, I should have been more specific. I'm trying to load that YAML into a python dictionary. That code snippet above loads data
as a CommentedMap
and the yaml.dump
method prints the same YAML string.
Any ideas on reading it as a dictionary?
from oasdiff.
How about this?
from yaml import load
import io
import json
try:
from yaml import CLoader as Loader
except ImportError:
from yaml import Loader
stream=io.open('data/test.yaml', mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
data = load(stream, Loader=Loader)
print(json.dumps(data, indent=4, sort_keys=True))
Edit:
I noticed that this works on some versions of PyYAML but not on others but I'm really not sure how to determine the one that is working properly.
from oasdiff.
I didn't want to leave this mystery unsolved so I did some more digging.
Apparently, it isn't the PyYAML version which determines success or failure but it's the code snippet below that does the magic. I got it from this blog.
from yaml import load
import io
import json
try:
from yaml import CLoader as Loader
except ImportError:
from yaml import Loader
class Pairs(list):
def __repr__(self):
return f"{type(self).__name__}({super().__repr__()})"
def construct_mapping(self, node):
value = self.construct_pairs(node)
try:
return dict(value)
except TypeError:
return Pairs(value)
Loader.construct_mapping = construct_mapping
Loader.add_constructor('tag:yaml.org,2002:map', Loader.construct_mapping)
stream = io.open('data/test.yaml', mode='r', buffering=-1,
encoding=None, errors=None, newline=None, closefd=True)
data = load(stream, Loader=Loader)
print(json.dumps(data, indent=4, sort_keys=True))
from oasdiff.
Yes!!! Thank you so much. I never would have figured all that out on my own. You're awesome. I really appreciate it.
from oasdiff.
Related Issues (20)
- `response-property-became-required` is added for required properties that are newly added to response bodies HOT 1
- Non-friendly error message
- oasdiff flatten doesn't output paths HOT 1
- YAML/JSON field name typo: "reuired" -> "required" HOT 1
- Feature request: Support external metadata
- Verbose CLI output to help troubleshoot (especially in composed mode) HOT 5
- oasdiff error in composed mode when the same path appears in different files HOT 1
- Race condition while parsing command line arguments if telemetry is enabled HOT 1
- "Error resolving reference/map key not found" when running oasdiff across the set of files with intensive external refs HOT 1
- Supporting "--fail-on" option for changelog command
- basePath and servers.ulr support HOT 3
- Add support for AWS API Gateway extensions to OpenAPI HOT 6
- Diff tool gets confused when a new inline enum value is added and a new enum type is added at the sime time HOT 4
- Changelog does not log adding a new optional request body HOT 2
- `latest` docker container (April 8th) introduces a bug that causes false positives HOT 1
- --flatten-allof panic HOT 3
- Unmarshalling errors don't provide offset HOT 6
- Support breaking-changes and changelog for schemas with multiple types
- Support "flatten allOf" for schemas with multiple types
- Typo in description of incompatible changes HOT 2
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 oasdiff.