01-add-arcadia-support.patch 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. --- contrib/python/importlib-metadata/py2/.dist-info/METADATA (index)
  2. +++ contrib/python/importlib-metadata/py2/.dist-info/METADATA (working tree)
  3. @@ -15,7 +15,6 @@ Classifier: Topic :: Software Development :: Libraries
  4. Classifier: Programming Language :: Python :: 2
  5. Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7
  6. License-File: LICENSE
  7. -Requires-Dist: zipp (>=0.5)
  8. Requires-Dist: pathlib2 ; python_version < "3"
  9. Requires-Dist: contextlib2 ; python_version < "3"
  10. Requires-Dist: configparser (>=3.5) ; python_version < "3"
  11. --- contrib/python/importlib-metadata/py2/importlib_metadata/__init__.py (index)
  12. +++ contrib/python/importlib-metadata/py2/importlib_metadata/__init__.py (working tree)
  13. @@ -6,7 +6,6 @@ import re
  14. import abc
  15. import csv
  16. import sys
  17. -import zipp
  18. import operator
  19. import functools
  20. import itertools
  21. @@ -525,7 +525,7 @@ class Prepared:
  22. and base.endswith('.egg'))
  23. -@install
  24. +#@install
  25. class MetadataPathFinder(NullFinder, DistributionFinder):
  26. """A degenerate finder for distribution packages on the file system.
  27. @@ -573,6 +572,63 @@ class PathDistribution(Distribution):
  28. return self._path.parent / path
  29. +class ArcadiaDistribution(Distribution):
  30. +
  31. + def __init__(self, prefix):
  32. + self.prefix = prefix
  33. +
  34. + def read_text(self, filename):
  35. + from library.python.resource import resfs_read
  36. + data = resfs_read('{}{}'.format(self.prefix, filename))
  37. + if data:
  38. + return data.decode('utf-8')
  39. + read_text.__doc__ = Distribution.read_text.__doc__
  40. +
  41. + def locate_file(self, path):
  42. + return '{}{}'.format(self.prefix, path)
  43. +
  44. +
  45. +@install
  46. +class ArcadiaMetadataFinder(NullFinder, DistributionFinder):
  47. +
  48. + prefixes = {}
  49. +
  50. + @classmethod
  51. + def find_distributions(cls, context=DistributionFinder.Context()):
  52. + found = cls._search_prefixes(context.name)
  53. + return map(ArcadiaDistribution, found)
  54. +
  55. + @classmethod
  56. + def _init_prefixes(cls):
  57. + from library.python.resource import resfs_read, resfs_files
  58. + cls.prefixes.clear()
  59. +
  60. + METADATA_NAME = re.compile('^Name: (.*)$', re.MULTILINE)
  61. +
  62. + for resource in resfs_files():
  63. + if not resource.endswith('METADATA'):
  64. + continue
  65. + data = resfs_read(resource).decode('utf-8')
  66. + metadata_name = METADATA_NAME.search(data)
  67. + if metadata_name:
  68. + metadata_name = Prepared(metadata_name.group(1))
  69. + cls.prefixes[metadata_name.normalized] = resource[:-len('METADATA')]
  70. +
  71. + @classmethod
  72. + def _search_prefixes(cls, name):
  73. + if not cls.prefixes:
  74. + cls._init_prefixes()
  75. +
  76. + if name:
  77. + try:
  78. + yield cls.prefixes[Prepared(name).normalized]
  79. + except KeyError:
  80. + raise PackageNotFoundError(name)
  81. + else:
  82. + for prefix in sorted(cls.prefixes.values()):
  83. + yield prefix
  84. +
  85. +
  86. def distribution(distribution_name):
  87. """Get the ``Distribution`` instance for the named package.