On 2/16/26 10:16 PM, Aaron Conole wrote: > Ilya Maximets <[email protected]> writes: > >> This reverts commit 7330836535b52ad772a7878761e82226ce4d5706. >> >> The 'License-Expression' is not a classifier, so it must not be in >> the list of classifiers. Otherwise PyPI rejects the package: >> >> HTTPError: 400 Bad Request >> >> The server could not comply with the request since it is either >> malformed or otherwise incorrect. >> >> 400 'License-Expression :: Apache 2.0' is not a valid classifier. >> See https://packaging.python.org/specifications/core-metadata for >> more information. >> >> So, the commit is clearly wrong. The list of valid classifiers >> can be seen here: https://pypi.org/classifiers/ >> >> We probably shouldn't list the classifier at all and change the >> 'license' field instead. But that's a thing to explore later. >> For now, just revert the change to the legacy working state. >> >> Fixes: 7330836535b5 ("python: Replace deprecated License with >> License-Expression (PEP 639).") >> Signed-off-by: Ilya Maximets <[email protected]> >> --- > > Hrrm... I think it should probably either be: > > Apache License 2.0 > > or > > Apache-2.0 > > It's rather unfortunate that PyPI doesn't allow testing / staging these.
It sort of does, there is test.pypi.org. But I can't test it directly, as there is already 'ovs' package on the test server and I don't have access to it. But you still can tell if the result is 400 or 403. AFAICT, from my current testing, it must be: licence='Apache 2.0' classifiers=[ 'License :: OSI Approved :: Apache Software License' ] Here the 'license' clarifies the exact version of the license in the classifier. Or it must be just: license_expressions='Apache-2.0' Without the 'license' or anything in the classifiers, as this expression must be a valid SPDX identifier in this case. All other combinations are wrong, some are rejected by the PyPI, some are failing by the twine check before upload. > > Anyway, rather than fighting with this for too long, maybe it is best to > revert for now, and work on it for 3.8 I can send a patch with the license_expressions thing later, but for now it's easier to just revert. Legacy things work just fine. > > Acked-by: Aaron Conole <[email protected]> Thanks! > >> python/setup.py.template | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/python/setup.py.template b/python/setup.py.template >> index 0a7849b4e..e28d5d397 100644 >> --- a/python/setup.py.template >> +++ b/python/setup.py.template >> @@ -97,7 +97,7 @@ setup_args = dict( >> 'Topic :: Database :: Front-Ends', >> 'Topic :: Software Development :: Libraries :: Python Modules', >> 'Topic :: System :: Networking', >> - 'License-Expression :: Apache 2.0', >> + 'License :: OSI Approved :: Apache Software License', >> 'Programming Language :: Python :: 3', >> 'Programming Language :: Python :: 3.7', >> ], > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
