11from  __future__ import  annotations 
22
33import  os 
4+ import  re 
45from  abc  import  ABCMeta 
56from  re  import  Pattern 
67from  typing  import  IO , Any , ClassVar 
@@ -24,30 +25,29 @@ def __init__(self, config: BaseConfig):
2425        # Constructor needs to be redefined because `Protocol` prevent instantiation by default 
2526        # See: https://bugs.python.org/issue44807 
2627        self .config  =  config 
27-         self .tag_format  =  self .config .settings . get ( "tag_format" ) 
28+         self .tag_format  =  self .config .settings [ "tag_format" ] 
2829
2930    @property  
3031    def  version_parser (self ) ->  Pattern :
32+         tag_regex : str  =  self .tag_format 
3133        version_regex  =  get_version_scheme (self .config ).parser .pattern 
32-         if  self .tag_format  !=  "$version" :
33-             TAG_FORMAT_REGEXS  =  {
34-                 "$version" : version_regex ,
35-                 "$major" : "(?P<major>\d+)" ,
36-                 "$minor" : "(?P<minor>\d+)" ,
37-                 "$patch" : "(?P<patch>\d+)" ,
38-                 "$prerelease" : "(?P<prerelease>\w+\d+)?" ,
39-                 "$devrelease" : "(?P<devrelease>\.dev\d+)?" ,
40-                 "${version}" : version_regex ,
41-                 "${major}" : "(?P<major>\d+)" ,
42-                 "${minor}" : "(?P<minor>\d+)" ,
43-                 "${patch}" : "(?P<patch>\d+)" ,
44-                 "${prerelease}" : "(?P<prerelease>\w+\d+)?" ,
45-                 "${devrelease}" : "(?P<devrelease>\.dev\d+)?" ,
46-             }
47-             version_regex  =  self .tag_format 
48-             for  pattern , regex  in  TAG_FORMAT_REGEXS .items ():
49-                 version_regex  =  version_regex .replace (pattern , regex )
50-         return  rf"{ version_regex }  
34+         TAG_FORMAT_REGEXS  =  {
35+             "$version" : version_regex ,
36+             "$major" : r"(?P<major>\d+)" ,
37+             "$minor" : r"(?P<minor>\d+)" ,
38+             "$patch" : r"(?P<patch>\d+)" ,
39+             "$prerelease" : r"(?P<prerelease>\w+\d+)?" ,
40+             "$devrelease" : r"(?P<devrelease>\.dev\d+)?" ,
41+             "${version}" : version_regex ,
42+             "${major}" : r"(?P<major>\d+)" ,
43+             "${minor}" : r"(?P<minor>\d+)" ,
44+             "${patch}" : r"(?P<patch>\d+)" ,
45+             "${prerelease}" : r"(?P<prerelease>\w+\d+)?" ,
46+             "${devrelease}" : r"(?P<devrelease>\.dev\d+)?" ,
47+         }
48+         for  pattern , regex  in  TAG_FORMAT_REGEXS .items ():
49+             tag_regex  =  tag_regex .replace (pattern , regex )
50+         return  re .compile (tag_regex )
5151
5252    def  get_metadata (self , filepath : str ) ->  Metadata :
5353        if  not  os .path .isfile (filepath ):
0 commit comments