Skip to content

Commit

Permalink
Don't rely on durationpy for formatting; just do it manually.
Browse files Browse the repository at this point in the history
This approach is less fragile, and also allows all three implementations (Rust, Go, and Python) to work in a similar way.

Signed-off-by: Flynn <[email protected]>
  • Loading branch information
kflynn committed Aug 21, 2024
1 parent 1bc5b5e commit 6a5e7e9
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions kubernetes/utils/duration.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import List

import datetime
import re

Expand Down Expand Up @@ -147,18 +149,26 @@ def format_duration(delta: datetime.timedelta) -> str:
.format(delta)
)

# Second short-circuit.
# After that, do the usual div & mod tree to take seconds and get hours,
# minutes, and seconds from it.
secs = int(delta.total_seconds())

output: List[str] = []

hours = secs // 3600
if hours > 0:
output.append(f"{hours}h")
secs -= hours * 3600

delta -= datetime.timedelta(microseconds=delta_us)
delta_ms = delta_us // 1000
delta_str = durationpy.to_str(delta)
minutes = secs // 60
if minutes > 0:
output.append(f"{minutes}m")
secs -= minutes * 60

if delta_ms > 0:
# We have milliseconds to add back in. Make sure to not have a leading
# "0" if we have no other duration components.
if delta == datetime.timedelta(0):
delta_str = ""
if secs > 0:
output.append(f"{secs}s")

delta_str += f"{delta_ms}ms"
if delta_us > 0:
output.append(f"{delta_us // 1000}ms")

return delta_str
return "".join(output)

0 comments on commit 6a5e7e9

Please sign in to comment.