@@ -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 :
@@ -201,6 +219,19 @@ def generate_devrelease(self, devrelease: int | None) -> str:
201219
202220 return f"dev{ devrelease } "
203221
222+ def generate_postrelease (self , postrelease : bool = False ) -> str :
223+ """Generate postrelease"""
224+ if not postrelease :
225+ return ""
226+
227+ # version.post is needed for mypy check
228+ if self .is_postrelease and self .post is not None :
229+ new_postrelease_number = self .post + 1
230+ else :
231+ new_postrelease_number = 0
232+
233+ return f"post{ new_postrelease_number } "
234+
204235 def generate_build_metadata (self , build_metadata : str | None ) -> str :
205236 """Generate build-metadata
206237
@@ -235,6 +266,7 @@ def bump(
235266 prerelease : Prerelease | None = None ,
236267 prerelease_offset : int = 0 ,
237268 devrelease : int | None = None ,
269+ postrelease : bool = False ,
238270 is_local_version : bool = False ,
239271 build_metadata : str | None = None ,
240272 exact_increment : bool = False ,
@@ -267,9 +299,10 @@ def bump(
267299 self if base == current_base else cast ("BaseVersion" , self .scheme (base ))
268300 ).generate_prerelease (prerelease , offset = prerelease_offset )
269301
270- # TODO: post version
302+ post_version = self .generate_postrelease (postrelease )
303+
271304 return self .scheme (
272- f"{ base } { pre_version } { dev_version } { self .generate_build_metadata (build_metadata )} "
305+ f"{ base } { pre_version } { post_version } { dev_version } { self .generate_build_metadata (build_metadata )} "
273306 ) # type: ignore[return-value]
274307
275308 def _get_increment_base (
0 commit comments