Collection of useful decorators
Project description
Collection of useful decorators
Installation
pip install decoratools
Usage
capi
Interface with statx(2)
:
import ctypes
from argparse import ArgumentParser
from decoratools.capi import ARRAY, POINTER, structure, unwraps
LIBC = ctypes.CDLL("libc.so.6")
AT_FDCDW = -100
STATX_BASIC_STATS = 0x000007FF
@structure
class StatxTimestamp:
tv_sec: ctypes.c_int64
tv_nsec: ctypes.c_uint32
__statx_timestamp_pad1: ctypes.c_int32
@structure
class Statx:
stx_mask: ctypes.c_uint32
stx_blksize: ctypes.c_uint32
stx_attributes: ctypes.c_uint64
stx_nlink: ctypes.c_uint32
stx_uid: ctypes.c_uint32
stx_gid: ctypes.c_uint32
stx_mode: ctypes.c_uint16
__statx_pad1: ctypes.c_uint16
stx_ino: ctypes.c_uint64
stx_size: ctypes.c_uint64
stx_blocks: ctypes.c_uint64
stx_attributes_mask: ctypes.c_uint64
stx_atime: StatxTimestamp
stx_btime: StatxTimestamp
stx_ctime: StatxTimestamp
stx_mtime: StatxTimestamp
stx_rdev_major: ctypes.c_uint32
stx_rdev_minor: ctypes.c_uint32
stx_dev_major: ctypes.c_uint32
stx_dev_minor: ctypes.c_uint32
stx_mnt_id: ctypes.c_uint64
stx_dio_mem_align: ctypes.c_uint32
stx_dio_offset_align: ctypes.c_uint32
__statx_pad2: ARRAY[ctypes.c_uint64, 12]
@unwraps(LIBC.statx)
def statx(
dirfd: ctypes.c_int, pathname: ctypes.c_char_p, flags: ctypes.c_int, mask: ctypes.c_int, statxbuf: POINTER[Statx]
) -> int:
...
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument("path", help="path to statx")
args = parser.parse_args()
statxbuf = Statx()
rc = statx(AT_FDCDW, args.path.encode(), 0, STATX_BASIC_STATS, ctypes.byref(statxbuf))
if rc != 0:
raise RuntimeError("statx: failed")
print(statxbuf)
$ python statx.py /dev/null
Statx(stx_mask=6143, stx_blksize=4096, stx_attributes=0, stx_nlink=1, stx_uid=0, stx_gid=0, stx_mode=8630, _Statx__statx_pad1=0, stx_ino=4, stx_size=0, stx_blocks=0, stx_attributes_mask=2109552, stx_atime=StatxTimestamp(tv_sec=1672527600, tv_nsec=0, _StatxTimestamp__statx_timestamp_pad1=0), stx_btime=StatxTimestamp(tv_sec=0, tv_nsec=0, _StatxTimestamp__statx_timestamp_pad1=0), stx_ctime=StatxTimestamp(tv_sec=1672527600, tv_nsec=0, _StatxTimestamp__statx_timestamp_pad1=0), stx_mtime=StatxTimestamp(tv_sec=1672527600, tv_nsec=0, _StatxTimestamp__statx_timestamp_pad1=0), stx_rdev_major=1, stx_rdev_minor=3, stx_dev_major=0, stx_dev_minor=5, stx_mnt_id=22, stx_dio_mem_align=0, stx_dio_offset_align=0, _Statx__statx_pad2=<decoratools.capi.c_ulong_Array_12 object at 0x7efe94be0a70>)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
decoratools-0.0.19.tar.gz
(5.1 kB
view hashes)
Built Distribution
Close
Hashes for decoratools-0.0.19-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b6934ee22e40565840470e9c80ed027319d86d0c46f98e1d1208d8718e89216 |
|
MD5 | eb15378163b55c389ac467426496f286 |
|
BLAKE2b-256 | 29b48b240d49ecc5794dd876164c6f3b09fe6e57ef8446981a8d329b7e003033 |