fragment.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # MODIFIED - Replace/Update with care
  2. import re
  3. # Copied from pip
  4. # https://github.com/pypa/pip/blob/281eb61b09d87765d7c2b92f6982b3fe76ccb0af/pip/index.py#L947
  5. HASH_ALGORITHMS = set(['sha1', 'sha224', 'sha384', 'sha256', 'sha512', 'md5'])
  6. extras_require_search = re.compile(
  7. r'(?P<name>.+)\[(?P<extras>[^\]]+)\]').search
  8. def parse_fragment(fragment_string):
  9. """Takes a fragment string nd returns a dict of the components"""
  10. fragment_string = fragment_string.lstrip('#')
  11. try:
  12. return dict(
  13. key_value_string.split('==')[0].split('=')
  14. for key_value_string in fragment_string.split('&')
  15. )
  16. except ValueError:
  17. raise ValueError(
  18. 'Invalid fragment string {fragment_string}'.format(
  19. fragment_string=fragment_string
  20. )
  21. )
  22. def get_hash_info(d):
  23. """Returns the first matching hashlib name and value from a dict"""
  24. for key in d.keys():
  25. if key.lower() in HASH_ALGORITHMS:
  26. return key, d[key]
  27. return None, None
  28. def parse_extras_require(egg):
  29. if egg is not None:
  30. match = extras_require_search(egg)
  31. if match is not None:
  32. name = match.group('name')
  33. extras = match.group('extras')
  34. return name, [extra.strip() for extra in extras.split(',')]
  35. return egg, []