@@ -75,6 +75,16 @@ def prerelease(self) -> str | None:
7575 """The prerelease potion of the version is this is a prerelease."""
7676 raise NotImplementedError ("must be implemented" )
7777
78+ @property
79+ def is_postrelease (self ) -> bool :
80+ """Whether this version is a post-release."""
81+ raise NotImplementedError ("must be implemented" )
82+
83+ @property
84+ def postrelease (self ) -> str | None :
85+ """The postrelease potion of the version is this is a postrelease."""
86+ raise NotImplementedError ("must be implemented" )
87+
7888 @property
7989 def public (self ) -> str :
8090 """The public portion of the version."""
@@ -124,6 +134,7 @@ def bump(
124134 prerelease : Prerelease | None = None ,
125135 prerelease_offset : int = 0 ,
126136 devrelease : int | None = None ,
137+ postrelease : bool = False ,
127138 is_local_version : bool = False ,
128139 build_metadata : str | None = None ,
129140 exact_increment : bool = False ,
@@ -164,6 +175,13 @@ def prerelease(self) -> str | None:
164175 return f"{ self .pre [0 ]} { self .pre [1 ]} "
165176 return None
166177
178+ @property
179+ def postrelease (self ) -> str | None :
180+ # version.post is needed for mypy check
181+ if self .is_postrelease and self .post is not None :
182+ return f"post{ self .post } "
183+ return None
184+
167185 def generate_prerelease (
168186 self , prerelease : str | None = None , offset : int = 0
169187 ) -> str :
@@ -206,6 +224,19 @@ def generate_devrelease(self, devrelease: int | None) -> str:
206224
207225 return f"dev{ devrelease } "
208226
227+ def generate_postrelease (self , postrelease : bool = False ) -> str :
228+ """Generate postrelease"""
229+ if not postrelease :
230+ return ""
231+
232+ # version.post is needed for mypy check
233+ if self .is_postrelease and self .post is not None :
234+ new_postrelease_number = self .post + 1
235+ else :
236+ new_postrelease_number = 0
237+
238+ return f"post{ new_postrelease_number } "
239+
209240 def generate_build_metadata (self , build_metadata : str | None ) -> str :
210241 """Generate build-metadata
211242
@@ -240,6 +271,7 @@ def bump(
240271 prerelease : Prerelease | None = None ,
241272 prerelease_offset : int = 0 ,
242273 devrelease : int | None = None ,
274+ postrelease : bool = False ,
243275 is_local_version : bool = False ,
244276 build_metadata : str | None = None ,
245277 exact_increment : bool = False ,
@@ -272,9 +304,10 @@ def bump(
272304 self if base == current_base else cast ("BaseVersion" , self .scheme (base ))
273305 ).generate_prerelease (prerelease , offset = prerelease_offset )
274306
275- # TODO: post version
307+ post_version = self .generate_postrelease (postrelease )
308+
276309 return self .scheme (
277- f"{ base } { pre_version } { dev_version } { self .generate_build_metadata (build_metadata )} "
310+ f"{ base } { pre_version } { post_version } { dev_version } { self .generate_build_metadata (build_metadata )} "
278311 ) # type: ignore[return-value]
279312
280313 def _get_increment_base (
0 commit comments