On Tue, Feb 14, 2017 at 12:15 PM, Nathaniel Smith <n...@pobox.com> wrote:
> On Tue, Feb 14, 2017 at 10:10 AM, Vinay Sajip via Distutils-SIG > <distutils-sig@python.org> wrote: > >> humpty in term uses uses distlib which seems to mishandle wheel > >> metadata. (For example, it chokes if there's extra distribution meta and > >> makes it impossible for buildout to install python-dateutil from a > wheel.) > > > > I looked into the "mishandling". It's that the other tools don't adhere > to > > [the current state of] PEP 426 as closely as distlib does. For example, > > wheel writes JSON metadata to metadata.json in the .dist-info directory, > > whereas PEP 426 calls for that data to be in pydist.json. The non-JSON > > metadata in the wheel (the METADATA file) does not strictly adhere to > any of > > the metadata PEPs 241, 314, 345 or 426 (it has a mixture of incompatible > > fields). > > > > I can change distlib to look for metadata.json, and relax the rules to be > > more liberal regarding which fields to accept, but adhering to the PEP > isn't > > mishandling things, as I see it. > > I thought the current status was that it's called metadata.json > exactly *because* it's not standardized, and you *shouldn't* look at > it? > > It's too bad that the JSON thing didn't work out, but I think we're > better off working on better specifying the one source of truth > everything already uses (METADATA) instead of bringing in *new* > partially-incompatible-and-poorly-specified formats. > JSON-LD https://www.google.com/search?q=python+package+metadata+jsonld https://www.google.com/search?q="pep426jsonld" PEP426 (Deferred) Switching to a JSON compatible format https://www.python.org/dev/peps/pep-0426/#switching-to-a-json-compatible-format PEP 426: Define a JSON-LD context as part of the proposal https://github.com/pypa/interoperability-peps/issues/31 This doesn't work with JSON-LD 1.0: ```json releases = { "v0.0.1": {"url": ... }, "v1.0.0": {"url": ...}, } This does work with JSON-LD 1.0: ```json releases = [ {"version": "v0.0.1", "url": ...}, {"version": "v1.0.0", "url": ...}, ] ... Then adding custom attributes could be as easy as defining a URI namespace and additional attribute names; because {distutils, setuptools, pip, pipenv(?)} only need to validate the properties necessary for the relevant packaging operation. Without any JSON-LD normalization, these aren't equal: {"url": "#here"} {"schema:url": "#here"} {"http://schema.org/url", "#here"} This is the JSON downstream tools currently have/want to consume (en masse, for SAT solving, etc): https://pypi.python.org/pypi/ipython/json - It's a graph. - JSON-LD is for graphs. - There are normalizations and signatures for JSON-LD (ld-signatures != JWS) - Downstream tools need not do anything with the @context. ("JSON-LD unaware") - Downstream tools which generate pydist.jsonld should validate schema in tests Downstream tools: - https://github.com/pypa/pip/issues/988 "Pip needs a dependency resolver" (-> JSON) - https://github.com/pypa/warehouse/issues/1638 "API to get checksums" (-> JSON) Q: How do we get this (platform and architecture-specific) metadata to warehouse, where it can be hosted? A JSONLD entrypoint in warehouse (for each project, for every project, for {my_subset}): https://pypi.python.org/pypi/ipython/jsonld > I would accept a pull request to stop generating metadata.json in bdist_wheel. What about a pull request to start generating metadata.jsonld or pydist.jsonld instead? - [ ] "@context": { }, - [ ] "@graph": { }, # optional #PEP426JSONLD > -n > > -- > Nathaniel J. Smith -- https://vorpus.org > _______________________________________________ > Distutils-SIG maillist - Distutils-SIG@python.org > https://mail.python.org/mailman/listinfo/distutils-sig >
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org https://mail.python.org/mailman/listinfo/distutils-sig