Coverage for src/mactime/constants.py: 77%

39 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-02-24 19:31 +0100

1from __future__ import annotations 

2from __future__ import annotations 

3from __future__ import annotations 

4from __future__ import annotations 

5 

6import os 

7from datetime import datetime 

8from datetime import timedelta 

9from decimal import Decimal 

10from enum import Flag 

11from enum import StrEnum 

12from enum import auto 

13from typing import Final 

14 

15 

16MODIFIED_NAME: Final[str] = "modified" 

17CREATED_NAME: Final[str] = "created" 

18CHANGED_NAME: Final[str] = "changed" 

19ADDED_NAME: Final[str] = "added" 

20ACCESSED_NAME: Final[str] = "accessed" 

21BACKED_UP_NAME: Final[str] = "backed_up" 

22OPENED_NAME: Final[str] = "opened" 

23 

24PathType = str | os.PathLike 

25 

26NANOSECONDS_IN_SECOND = Decimal("1e9") 

27 

28 

29# Constants (from macOS attr/attribute headers) 

30# taken from https://docs.rs/libc/latest/aarch64-apple-ios/src/libc/unix/bsd/apple/mod.rs.html 

31ATTR_CMN_CRTIME = 0x00000200 # Finder's Date Created 

32ATTR_CMN_MODTIME = 0x00000400 # Finder's Date Modified & st_mtime 

33ATTR_CMN_CHGTIME = 0x00000800 # st_ctime (last attr modification time) 

34ATTR_CMN_ACCTIME = 0x00001000 # st_atime 

35ATTR_CMN_BKUPTIME = 0x00002000 

36ATTR_CMN_ADDEDTIME = 0x10000000 # Finder's Date Added 

37ATTR_CMN_RETURNED_ATTRS = 0x80000000 

38ATTR_BIT_MAP_COUNT = 5 

39 

40 

41FSOPT_NOFOLLOW = 0x1 

42 

43NAME_TO_SHORTHAND = { 

44 MODIFIED_NAME: "m", 

45 CREATED_NAME: "c", 

46 CHANGED_NAME: "g", 

47 ADDED_NAME: "d", 

48 ACCESSED_NAME: "a", 

49 BACKED_UP_NAME: "b", 

50 OPENED_NAME: "o", 

51} 

52SHORTHAND_TO_NAME = {v: k for k, v in NAME_TO_SHORTHAND.items()} 

53ATTR_NAME_ARG_CHOICES = {**NAME_TO_SHORTHAND, **SHORTHAND_TO_NAME} 

54ATTR_TO_NAME_MAP = { 

55 ATTR_CMN_CRTIME: CREATED_NAME, 

56 ATTR_CMN_MODTIME: MODIFIED_NAME, 

57 ATTR_CMN_CHGTIME: CHANGED_NAME, 

58 ATTR_CMN_ACCTIME: ACCESSED_NAME, 

59 ATTR_CMN_BKUPTIME: BACKED_UP_NAME, 

60 ATTR_CMN_ADDEDTIME: ADDED_NAME, 

61} 

62assert sorted(ATTR_TO_NAME_MAP) == list(ATTR_TO_NAME_MAP), "Attrs must be ordered." 

63 

64NAME_TO_ATTR_MAP: dict[str, int] = { 

65 name: attr for attr, name in ATTR_TO_NAME_MAP.items() 

66} 

67WRITABLE_NAMES = NAME_TO_ATTR_MAP.keys() - {OPENED_NAME, BACKED_UP_NAME, CHANGED_NAME} 

68 

69EPOCH = datetime.fromtimestamp(0) 

70TIME_ALIASES = { 

71 "now": datetime.now, 

72 "yesterday": lambda: (datetime.now() - timedelta(days=1)).replace( 

73 microsecond=0, second=0, minute=0, hour=0 

74 ), 

75 "epoch": lambda: EPOCH, 

76}