Coverage for  / opt / hostedtoolcache / Python / 3.12.13 / x64 / lib / python3.12 / site-packages / fcp7xml_to_unreal / __init__.py: 82%

33 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-17 22:47 +0000

1"""Process editorial XML from Adobe Premiere for import into Unreal Engine.""" 

2 

3import importlib.metadata 

4import logging 

5import os 

6import sys 

7 

8import yaml 

9 

10__version__ = importlib.metadata.version(__package__) 

11 

12config = {} 

13 

14 

15def setup_logger(log_level: str = "INFO") -> logging.Logger: 

16 """ 

17 Configure and return a logger instance. 

18 """ 

19 logger = logging.getLogger(__name__) 

20 logger.setLevel(log_level) 

21 

22 # Create console handler 

23 console_handler = logging.StreamHandler(sys.stdout) 

24 console_handler.setLevel(log_level) 

25 

26 if log_level == "DEBUG": 

27 # Create detailed formatter for debug log messages 

28 formatter = logging.Formatter( 

29 fmt="%(asctime)s [%(levelname)s] %(name)s: %(filename)s:%(lineno)d - %(message)s", 

30 datefmt="%Y-%m-%d %H:%M:%S", 

31 ) 

32 elif log_level == "ERROR": 

33 # Create formatter for error log messages 

34 formatter = logging.Formatter( 

35 fmt="%(asctime)s [%(levelname)s] %(name)s: %(message)s", 

36 datefmt="%Y-%m-%d %H:%M:%S", 

37 ) 

38 else: 

39 # Default to simple formatter for info and warning log messages 

40 formatter = logging.Formatter( 

41 fmt="%(asctime)s [%(levelname)s] - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" 

42 ) 

43 console_handler.setFormatter(formatter) 

44 

45 # Avoid adding multiple handlers if logger already configured 

46 if not logger.handlers: 

47 logger.addHandler(console_handler) 

48 

49 return logger 

50 

51 

52log_level = os.getenv("LOGLEVEL", "INFO").upper() 

53 

54logger = setup_logger(log_level=log_level) 

55 

56with open(os.path.join(os.path.dirname(__file__), "config.yaml")) as file: 

57 internal_config = yaml.safe_load(file) 

58 logger.info("using internal config.yaml.") 

59 config = internal_config 

60 

61# optional local config, when found in current directory 

62if os.path.isfile("config.yaml"): 

63 with open("config.yaml") as local_file: 

64 logger.info("using additional local config.yaml.") 

65 local_config = yaml.safe_load(local_file) 

66 config = internal_config | local_config 

67 

68logger.debug(f"using config: {config}")