fedora-python / pyp2rpm

Tool to convert a package from PyPI to RPM SPECFILE or to generate SRPM.
MIT License
123 stars 39 forks source link

Sort releases so that the API ordering no longer affects local behavior. #254

Closed gordonmessmer closed 3 years ago

gordonmessmer commented 3 years ago

@decathorpe Would you review these changes?

decathorpe commented 3 years ago

So if I understand this correctly, the versions will be sorted in "descending" order according to the version comparison algorithm from PEP 440? Then this LGTM.

alebastr commented 3 years ago

I ended up here after trying to figure out why Copr PyPI source started picking the very first version of the package. Seems like PyPI now serves release list in ascending order and the change here is required for correct behavior of pyp2rpm. Coincidentally, this PR also fixes exception on --prerelease flag caused by accessing self.versions dict_keys object as an array.

pyp2rpm --prerelease ... traceback ``` % pyp2rpm dbus-next --prerelease Traceback (most recent call last): File "/usr/bin/pyp2rpm", line 33, in sys.exit(load_entry_point('pyp2rpm==3.3.5', 'console_scripts', 'pyp2rpm')()) File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/usr/lib/python3.9/site-packages/pyp2rpm/bin.py", line 215, in main converted = convertor.convert() File "/usr/lib/python3.9/site-packages/pyp2rpm/convertor.py", line 135, in convert local_file = self.getter.get() File "/usr/lib/python3.9/site-packages/pyp2rpm/convertor.py", line 195, in getter self._getter = package_getters.PypiDownloader( File "/usr/lib/python3.9/site-packages/pyp2rpm/package_getters.py", line 142, in __init__ self.version = version or self.versions[0] TypeError: 'dict_keys' object is not subscriptable ```

@gordonmessmer do you think it's possible to tag a new release or cherry-pick this patch to Fedora package?