ominfra 0.0.0.dev151__py3-none-any.whl → 0.0.0.dev153__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ # ruff: noqa: UP006 UP007
2
+ import typing as ta
3
+
4
+
5
+ SystemPlatform = ta.NewType('SystemPlatform', str)
@@ -79,7 +79,7 @@ ConfigMapping = ta.Mapping[str, ta.Any]
79
79
  ThreadWorkerT = ta.TypeVar('ThreadWorkerT', bound='ThreadWorker')
80
80
 
81
81
  # ../../../../omlish/lite/subprocesses.py
82
- SubprocessChannelOption = ta.Literal['pipe', 'stdout', 'devnull']
82
+ SubprocessChannelOption = ta.Literal['pipe', 'stdout', 'devnull'] # ta.TypeAlias
83
83
 
84
84
 
85
85
  ########################################
@@ -1439,73 +1439,6 @@ json_dump_compact: ta.Callable[..., bytes] = functools.partial(json.dump, **JSON
1439
1439
  json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_COMPACT_KWARGS)
1440
1440
 
1441
1441
 
1442
- ########################################
1443
- # ../../../../../omlish/lite/pidfile.py
1444
-
1445
-
1446
- class Pidfile:
1447
- def __init__(self, path: str) -> None:
1448
- super().__init__()
1449
- self._path = path
1450
-
1451
- _f: ta.TextIO
1452
-
1453
- def __repr__(self) -> str:
1454
- return f'{self.__class__.__name__}({self._path!r})'
1455
-
1456
- def __enter__(self) -> 'Pidfile':
1457
- fd = os.open(self._path, os.O_RDWR | os.O_CREAT, 0o600)
1458
- try:
1459
- os.set_inheritable(fd, True)
1460
- f = os.fdopen(fd, 'r+')
1461
- except Exception:
1462
- try:
1463
- os.close(fd)
1464
- except Exception: # noqa
1465
- pass
1466
- raise
1467
- self._f = f
1468
- return self
1469
-
1470
- def __exit__(self, exc_type, exc_val, exc_tb):
1471
- if hasattr(self, '_f'):
1472
- self._f.close()
1473
- del self._f
1474
-
1475
- def try_lock(self) -> bool:
1476
- try:
1477
- fcntl.flock(self._f, fcntl.LOCK_EX | fcntl.LOCK_NB)
1478
- return True
1479
- except OSError:
1480
- return False
1481
-
1482
- def ensure_locked(self) -> None:
1483
- if not self.try_lock():
1484
- raise RuntimeError('Could not get lock')
1485
-
1486
- def write(self, pid: ta.Optional[int] = None) -> None:
1487
- self.ensure_locked()
1488
- if pid is None:
1489
- pid = os.getpid()
1490
- self._f.write(f'{pid}\n')
1491
- self._f.flush()
1492
-
1493
- def clear(self) -> None:
1494
- self.ensure_locked()
1495
- self._f.seek(0)
1496
- self._f.truncate()
1497
-
1498
- def read(self) -> int:
1499
- if self.try_lock():
1500
- raise RuntimeError('Got lock')
1501
- self._f.seek(0)
1502
- return int(self._f.read())
1503
-
1504
- def kill(self, sig: int = signal.SIGTERM) -> None:
1505
- pid = self.read()
1506
- os.kill(pid, sig) # FIXME: Still racy
1507
-
1508
-
1509
1442
  ########################################
1510
1443
  # ../../../../../omlish/lite/reflect.py
1511
1444
 
@@ -1628,6 +1561,73 @@ def format_num_bytes(num_bytes: int) -> str:
1628
1561
  return f'{num_bytes / 1024 ** (len(FORMAT_NUM_BYTES_SUFFIXES) - 1):.2f}{FORMAT_NUM_BYTES_SUFFIXES[-1]}'
1629
1562
 
1630
1563
 
1564
+ ########################################
1565
+ # ../../../../../omlish/os/pidfile.py
1566
+
1567
+
1568
+ class Pidfile:
1569
+ def __init__(self, path: str) -> None:
1570
+ super().__init__()
1571
+ self._path = path
1572
+
1573
+ _f: ta.TextIO
1574
+
1575
+ def __repr__(self) -> str:
1576
+ return f'{self.__class__.__name__}({self._path!r})'
1577
+
1578
+ def __enter__(self) -> 'Pidfile':
1579
+ fd = os.open(self._path, os.O_RDWR | os.O_CREAT, 0o600)
1580
+ try:
1581
+ os.set_inheritable(fd, True)
1582
+ f = os.fdopen(fd, 'r+')
1583
+ except Exception:
1584
+ try:
1585
+ os.close(fd)
1586
+ except Exception: # noqa
1587
+ pass
1588
+ raise
1589
+ self._f = f
1590
+ return self
1591
+
1592
+ def __exit__(self, exc_type, exc_val, exc_tb):
1593
+ if hasattr(self, '_f'):
1594
+ self._f.close()
1595
+ del self._f
1596
+
1597
+ def try_lock(self) -> bool:
1598
+ try:
1599
+ fcntl.flock(self._f, fcntl.LOCK_EX | fcntl.LOCK_NB)
1600
+ return True
1601
+ except OSError:
1602
+ return False
1603
+
1604
+ def ensure_locked(self) -> None:
1605
+ if not self.try_lock():
1606
+ raise RuntimeError('Could not get lock')
1607
+
1608
+ def write(self, pid: ta.Optional[int] = None) -> None:
1609
+ self.ensure_locked()
1610
+ if pid is None:
1611
+ pid = os.getpid()
1612
+ self._f.write(f'{pid}\n')
1613
+ self._f.flush()
1614
+
1615
+ def clear(self) -> None:
1616
+ self.ensure_locked()
1617
+ self._f.seek(0)
1618
+ self._f.truncate()
1619
+
1620
+ def read(self) -> int:
1621
+ if self.try_lock():
1622
+ raise RuntimeError('Got lock')
1623
+ self._f.seek(0)
1624
+ return int(self._f.read())
1625
+
1626
+ def kill(self, sig: int = signal.SIGTERM) -> None:
1627
+ pid = self.read()
1628
+ os.kill(pid, sig) # FIXME: Still racy
1629
+
1630
+
1631
1631
  ########################################
1632
1632
  # ../../auth.py
1633
1633
  """