1515import os
1616import shutil
1717from setuptools .command .build_py import build_py
18+ from setuptools .command .develop import develop
1819from pyside_setup_macro import _qmacro , _qt
1920
20- __version__ = "0.1.0 "
21+ __version__ = "0.1.1 "
2122
2223
2324def _create_build_dir (path : str ) -> None :
@@ -31,64 +32,90 @@ def _create_build_dir(path: str) -> None:
3132 os .makedirs (path )
3233
3334
35+ def _file_needs_processing (file_name : str ) -> bool :
36+ return file_name == "qmacro" or file_name .endswith ((".qrc" , ".ui" ))
37+
38+
39+ def _convert_qrc (source_path : str , destination_dir : str , file : str ) -> None :
40+ """Compile qresource file.
41+
42+ Args:
43+ source_path: Source qresource file to compile.
44+ destination_dir: Build directory to put compiled python module in.
45+ file: File name of qresource.
46+
47+ """
48+ resource_name = file .replace (".qrc" , ".py" )
49+ _qt .compile_qresource (source_path , os .path .join (destination_dir , resource_name ))
50+
51+
52+ def _convert_ui_files (source_path : str , destination_dir : str , file : str ) -> None :
53+ """Compile .ui file.
54+
55+ Args:
56+ source_path: Source ui. file to compile.
57+ destination_dir: Build directory to put compiled python module in.
58+ file: File name of .ui file.
59+
60+ """
61+ resource_name = file .replace (".ui" , ".py" )
62+ _qt .compile_ui_file (source_path , os .path .join (destination_dir , resource_name ))
63+
64+
65+ def _compile_file (source_path , destination_dir , file ) -> None :
66+ if source_path .endswith (".qrc" ):
67+ # A Qt Resource file has been found. it needs to be compiled and moved to build dir.
68+ _convert_qrc (source_path , destination_dir , file )
69+ elif source_path .endswith (".ui" ):
70+ _convert_ui_files (source_path , destination_dir , file )
71+ elif file == "qmacro" :
72+ _qmacro .create_and_compile_qresource (source_path , destination_dir )
73+
74+
3475class QtBuildPackage (build_py ):
3576 """Build class that can compile qt files."""
3677
3778 def _compile_and_move_qt_files (self ) -> None :
3879 """Compile qt files and move them to build dir."""
3980 if os .path .exists (self .build_lib ):
40- print ("Build dir exists" )
4181 shutil .rmtree (self .build_lib )
4282
43- package_root = "."
83+ root_packages = {
84+ path .split (os .path .sep ).pop (0 ) for path in self .get_source_files ()
85+ }
86+
87+ package_root = self .package_dir .get ("" , "." )
4488 # Travers source code and compile any qt file.
45- for package in self . packages :
89+ for package in root_packages :
4690 for root , _ , files in os .walk (package ):
4791 for file in files :
4892 destination_dir = os .path .join (
4993 self .build_lib , os .path .relpath (root , package_root )
5094 )
5195 source_path = os .path .join (root , file )
52- if source_path .endswith (".qrc" ):
53- # A Qt Resource file has been found. it needs to be compiled and moved to build dir.
54- self ._convert_qrc (source_path , destination_dir , file )
55- elif source_path .endswith (".ui" ):
56- self ._convert_ui_files (source_path , destination_dir , file )
57- elif file == "qmacro" :
96+ if _file_needs_processing (file ):
5897 _create_build_dir (destination_dir )
59- _qmacro .create_and_compile_qresource (
60- source_path , destination_dir
61- )
62-
63- def _convert_qrc (self , source_path : str , destination_dir : str , file : str ) -> None :
64- """Compile qresource file.
65-
66- Args:
67- source_path: Source qresource file to compile.
68- destination_dir: Build directory to put compiled python module in.
69- file: File name of qresource.
70-
71- """
72- _create_build_dir (destination_dir )
73- resource_name = file .replace (".qrc" , ".py" )
74- _qt .compile_qresource (source_path , os .path .join (destination_dir , resource_name ))
75-
76- def _convert_ui_files (
77- self , source_path : str , destination_dir : str , file : str
78- ) -> None :
79- """Compile .ui file.
80-
81- Args:
82- source_path: Source ui. file to compile.
83- destination_dir: Build directory to put compiled python module in.
84- file: File name of .ui file.
85-
86- """
87- _create_build_dir (destination_dir )
88- resource_name = file .replace (".ui" , ".py" )
89- _qt .compile_ui_file (source_path , os .path .join (destination_dir , resource_name ))
98+ _compile_file (source_path , destination_dir , file )
9099
91100 def run (self ) -> None :
92101 """Convert qt files and build python package."""
93102 self ._compile_and_move_qt_files ()
94103 super ().run () # Run normal installation.
104+
105+
106+ class QtBuildDevelop (develop ):
107+ """Build class that can compile qt files in dev-mode."""
108+
109+ def _compile (self ) -> None :
110+ """Compile qt files in dev-mode"""
111+
112+ # Travers source code and compile any qt file in package.
113+ for root , _ , files in os .walk (self .dist .module_path ):
114+ for file in files :
115+ if _file_needs_processing (file ):
116+ _compile_file (os .path .join (root , file ), root , file )
117+
118+ def run (self ) -> None :
119+ """Convert qt files locally and configure package in dev-mode."""
120+ self ._compile ()
121+ super ().run ()
0 commit comments