55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import errno
|
|
import os
|
|
|
|
|
|
# 'src' is the file to which the link will point, and 'dst' is the link to make
|
|
def force_symlink(src, dst):
|
|
try:
|
|
os.symlink(src, dst)
|
|
except OSError as e:
|
|
if e.errno == errno.EEXIST:
|
|
os.remove(dst)
|
|
os.symlink(src, dst)
|
|
else:
|
|
raise
|
|
|
|
|
|
# Returns an IP address string suitable for embedding in a Zeek script,
|
|
# for IPv6 colon-hexadecimal address strings, that means surrounding it
|
|
# with square brackets.
|
|
def format_zeek_addr(addr):
|
|
if ":" not in addr:
|
|
return addr
|
|
else:
|
|
return f"[{addr}]"
|
|
|
|
|
|
# Returns an IP prefix string suitable for embedding in a Zeek script,
|
|
# for IPv6 colon-hexadecimal prefix strings, that means surrounding the
|
|
# IP address part with square brackets.
|
|
def format_zeek_prefix(prefix):
|
|
if ":" not in prefix:
|
|
return prefix
|
|
else:
|
|
parts = prefix.split("/")
|
|
return f"[{parts[0]}]/{parts[1]}"
|
|
|
|
|
|
# Returns an IP address string suitable for use with rsync, which requires
|
|
# encasing IPv6 addresses in square brackets, and some shells may require
|
|
# quoting the brackets.
|
|
def format_rsync_addr(addr):
|
|
if ":" not in addr:
|
|
return addr
|
|
else:
|
|
return f"'[{addr}]'"
|
|
|
|
|
|
# Convert a number into a string with a unit (e.g., 1024 into "1K").
|
|
def number_unit_str(num):
|
|
units = (("G", 1024 * 1024 * 1024), ("M", 1024 * 1024), ("K", 1024))
|
|
for unit, factor in units:
|
|
if num >= factor:
|
|
return f"{num / factor:3.0f}{unit}"
|
|
return f" {num:3.0f}"
|