_version.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. version_info = (5, 6, 1)
  2. pre_info = ''
  3. dev_info = ''
  4. def create_valid_version(release_info, epoch=None, pre_input='', dev_input=''):
  5. '''
  6. Creates a pep440 valid version of version number given a tuple integers
  7. and optional epoch, prerelease and developmental info.
  8. Parameters
  9. ----------
  10. release_info : Tuple(Int)
  11. epoch : Int, default None
  12. pre_input : Str, default ''
  13. dev_input : Str, default ''
  14. '''
  15. pep440_err = "The version number is not a pep 440 compliant version number"
  16. if epoch is not None:
  17. epoch_seg = str(epoch) + '!'
  18. else:
  19. epoch_seg = ''
  20. release_seg = '.'.join(map(str, release_info))
  21. _magic_pre = ['a','b','rc']
  22. if pre_input!='' and not any([pre_input.startswith(prefix) for prefix in _magic_pre]):
  23. raise ValueError(pep440_err + "\n please fix your prerelease segment.")
  24. else:
  25. pre_seg = pre_input
  26. if dev_input=='':
  27. dev_seg = dev_input
  28. elif not dev_input.startswith('.') and dev_input.startswith('dev'):
  29. dev_seg = ''.join(['.', dev_input])
  30. elif dev_input.startswith('.dev'):
  31. dev_seg = dev_input
  32. elif dev_input!='':
  33. raise ValueError(pep440_err + "\n please fix your development segment.")
  34. if dev_input!='' and not any([dev_seg.endswith(str(n)) for n in range(10)]):
  35. dev_seg = ''.join([dev_seg,'0'])
  36. out_version = ''.join([epoch_seg, release_seg, pre_seg, dev_seg])
  37. import re
  38. def is_canonical(version):
  39. return re.match(r'^([1-9]\d*!)?(0|[1-9]\d*)'
  40. r'(\.(0|[1-9]\d*))*((a|b|rc)(0|[1-9]\d*))?'
  41. r'(\.post(0|[1-9]\d*))?(\.dev(0|[1-9]\d*))?$',
  42. version
  43. ) is not None
  44. if is_canonical(out_version):
  45. return out_version
  46. else:
  47. raise ValueError(pep440_err)
  48. __version__ = create_valid_version(version_info, pre_input=pre_info, dev_input=dev_info)