@@ -574,6 +574,72 @@ def version(version_str, strict = False):
574574
575575 return _new_version (** parts )
576576
577+ def _new_version (* , epoch = 0 , release , pre = "" , post = "" , dev = "" , local = "" , is_prefix = False , norm ):
578+ epoch = epoch or 0
579+ _release = tuple ([int (d ) for d in release .split ("." )])
580+
581+ if pre :
582+ if pre .startswith ("rc" ):
583+ prefix = "rc"
584+ else :
585+ prefix = pre [0 ]
586+
587+ pre = (prefix , int (pre [len (prefix ):]))
588+ else :
589+ pre = None
590+
591+ if post :
592+ if not post .startswith (".post" ):
593+ fail ("post release identifier must start with '.post', got: {}" .format (post ))
594+ post = int (post [len (".post" ):])
595+
596+ # We choose `~` since almost all of the ASCII characters will be before
597+ # it. Use `ord` and `chr` functions to find a good value.
598+ post = ("~" , post )
599+ else :
600+ post = None
601+
602+ if dev :
603+ if not dev .startswith (".dev" ):
604+ fail ("dev release identifier must start with '.dev', got: {}" .format (dev ))
605+ dev = int (dev [len (".dev" ):])
606+
607+ # Empty string goes first when comparing
608+ dev = ("" , dev )
609+ else :
610+ dev = None
611+
612+ if local :
613+ local = local .lstrip ("+" )
614+
615+ # If the part is numerical, handle it as a number
616+ local = tuple ([int (part ) if part .isdigit () else part for part in local .split ("." )])
617+ else :
618+ local = None
619+
620+ self = struct (
621+ epoch = epoch ,
622+ release = _release ,
623+ pre = pre ,
624+ post = post ,
625+ dev = dev ,
626+ local = local ,
627+ is_prefix = is_prefix ,
628+ norm = norm ,
629+ eq = lambda x : _version_eq (self , x ), # buildifier: disable=uninitialized
630+ eqq = lambda x : _version_eqq (self , x ), # buildifier: disable=uninitialized
631+ ge = lambda x : _version_ge (self , x ), # buildifier: disable=uninitialized
632+ gt = lambda x : _version_gt (self , x ), # buildifier: disable=uninitialized
633+ le = lambda x : _version_le (self , x ), # buildifier: disable=uninitialized
634+ lt = lambda x : _version_lt (self , x ), # buildifier: disable=uninitialized
635+ ne = lambda x : _version_ne (self , x ), # buildifier: disable=uninitialized
636+ compatible = lambda x : _version_compatible (self , x ), # buildifier: disable=uninitialized
637+ str = lambda : norm ,
638+ key = lambda * , local = True : _key (self , local = local ), # buildifier: disable=uninitialized
639+ )
640+
641+ return self
642+
577643def _pad_zeros (release , n ):
578644 padding = n - len (release )
579645 if padding <= 0 :
@@ -742,69 +808,3 @@ def _key(self, *, local, release_key = ("z",)):
742808 # PEP440 - post release ordering: .devN, <no suffix>
743809 self .dev or release_key ,
744810 )
745-
746- def _new_version (* , epoch = 0 , release , pre = "" , post = "" , dev = "" , local = "" , is_prefix = False , norm ):
747- epoch = epoch or 0
748- _release = tuple ([int (d ) for d in release .split ("." )])
749-
750- if pre :
751- if pre .startswith ("rc" ):
752- prefix = "rc"
753- else :
754- prefix = pre [0 ]
755-
756- pre = (prefix , int (pre [len (prefix ):]))
757- else :
758- pre = None
759-
760- if post :
761- if not post .startswith (".post" ):
762- fail ("post release identifier must start with '.post', got: {}" .format (post ))
763- post = int (post [len (".post" ):])
764-
765- # We choose `~` since almost all of the ASCII characters will be before
766- # it. Use `ord` and `chr` functions to find a good value.
767- post = ("~" , post )
768- else :
769- post = None
770-
771- if dev :
772- if not dev .startswith (".dev" ):
773- fail ("dev release identifier must start with '.dev', got: {}" .format (dev ))
774- dev = int (dev [len (".dev" ):])
775-
776- # Empty string goes first when comparing
777- dev = ("" , dev )
778- else :
779- dev = None
780-
781- if local :
782- local = local .lstrip ("+" )
783-
784- # If the part is numerical, handle it as a number
785- local = tuple ([int (part ) if part .isdigit () else part for part in local .split ("." )])
786- else :
787- local = None
788-
789- self = struct (
790- epoch = epoch ,
791- release = _release ,
792- pre = pre ,
793- post = post ,
794- dev = dev ,
795- local = local ,
796- is_prefix = is_prefix ,
797- norm = norm ,
798- eq = lambda x : _version_eq (self , x ), # buildifier: disable=uninitialized
799- eqq = lambda x : _version_eqq (self , x ), # buildifier: disable=uninitialized
800- ge = lambda x : _version_ge (self , x ), # buildifier: disable=uninitialized
801- gt = lambda x : _version_gt (self , x ), # buildifier: disable=uninitialized
802- le = lambda x : _version_le (self , x ), # buildifier: disable=uninitialized
803- lt = lambda x : _version_lt (self , x ), # buildifier: disable=uninitialized
804- ne = lambda x : _version_ne (self , x ), # buildifier: disable=uninitialized
805- compatible = lambda x : _version_compatible (self , x ), # buildifier: disable=uninitialized
806- str = lambda : norm ,
807- key = lambda * , local = True : _key (self , local = local ), # buildifier: disable=uninitialized
808- )
809-
810- return self
0 commit comments