##// END OF EJS Templates
Refactor with Pathlib for setupbase.py (#14543)...
M Bussonnier -
r28928:25703b5b merge
parent child Browse files
Show More
@@ -13,6 +13,7 This includes:
13 # Distributed under the terms of the Modified BSD License.
13 # Distributed under the terms of the Modified BSD License.
14
14
15 import os
15 import os
16 from pathlib import Path
16 import re
17 import re
17 import sys
18 import sys
18 from glob import glob
19 from glob import glob
@@ -30,21 +31,19 from setuptools.command.install_scripts import install_scripts
30 #-------------------------------------------------------------------------------
31 #-------------------------------------------------------------------------------
31
32
32 # A few handy globals
33 # A few handy globals
33 isfile = os.path.isfile
34 repo_root = Path(__file__).resolve().parent
34 pjoin = os.path.join
35 repo_root = os.path.dirname(os.path.abspath(__file__))
36
35
37 def execfile(fname, globs, locs=None):
36 def execfile(path, globs, locs=None):
38 locs = locs or globs
37 locs = locs or globs
39 with open(fname, encoding="utf-8") as f:
38 with path.open(encoding="utf-8") as f:
40 exec(compile(f.read(), fname, "exec"), globs, locs)
39 exec(compile(f.read(), str(path), "exec"), globs, locs)
41
40
42 #---------------------------------------------------------------------------
41 #---------------------------------------------------------------------------
43 # Basic project information
42 # Basic project information
44 #---------------------------------------------------------------------------
43 #---------------------------------------------------------------------------
45
44
46 # release.py contains version, authors, license, url, keywords, etc.
45 # release.py contains version, authors, license, url, keywords, etc.
47 execfile(pjoin(repo_root, 'IPython','core','release.py'), globals())
46 execfile(Path(repo_root, "IPython", "core", "release.py"), globals())
48
47
49 # Create a dict with the basic information
48 # Create a dict with the basic information
50 # This dict is eventually passed to setup after additional keys are added.
49 # This dict is eventually passed to setup after additional keys are added.
@@ -62,13 +61,13 def check_package_data(package_data):
62 """verify that package_data globs make sense"""
61 """verify that package_data globs make sense"""
63 print("checking package data")
62 print("checking package data")
64 for pkg, data in package_data.items():
63 for pkg, data in package_data.items():
65 pkg_root = pjoin(*pkg.split('.'))
64 pkg_root = Path(*pkg.split("."))
66 for d in data:
65 for d in data:
67 path = pjoin(pkg_root, d)
66 path = pkg_root / d
68 if '*' in path:
67 if "*" in str(path):
69 assert len(glob(path)) > 0, "No files match pattern %s" % path
68 assert len(glob(str(path))) > 0, "No files match pattern %s" % path
70 else:
69 else:
71 assert os.path.exists(path), "Missing package data: %s" % path
70 assert path.exists(), f"Missing package data: {path}"
72
71
73
72
74 def check_package_data_first(command):
73 def check_package_data_first(command):
@@ -95,18 +94,18 def find_data_files():
95 """
94 """
96
95
97 if "freebsd" in sys.platform:
96 if "freebsd" in sys.platform:
98 manpagebase = pjoin('man', 'man1')
97 manpagebase = Path("man") / "man1"
99 else:
98 else:
100 manpagebase = pjoin('share', 'man', 'man1')
99 manpagebase = Path("share") / "man" / "man1"
101
100
102 # Simple file lists can be made by hand
101 # Simple file lists can be made by hand
103 manpages = [f for f in glob(pjoin('docs','man','*.1.gz')) if isfile(f)]
102 manpages = [f for f in Path("docs/man").glob("*.1.gz") if f.is_file()]
104 if not manpages:
103 if not manpages:
105 # When running from a source tree, the manpages aren't gzipped
104 # When running from a source tree, the manpages aren't gzipped
106 manpages = [f for f in glob(pjoin('docs','man','*.1')) if isfile(f)]
105 manpages = [f for f in Path("docs/man").glob("*.1") if f.is_file()]
107
106
108 # And assemble the entire output list
107 # And assemble the entire output list
109 data_files = [ (manpagebase, manpages) ]
108 data_files = [(str(manpagebase), [str(f) for f in manpages])]
110
109
111 return data_files
110 return data_files
112
111
@@ -126,11 +125,11 def target_outdated(target,deps):
126 true, otherwise return false.
125 true, otherwise return false.
127 """
126 """
128 try:
127 try:
129 target_time = os.path.getmtime(target)
128 target_time = Path(target).stat().st_mtime
130 except os.error:
129 except FileNotFoundError:
131 return 1
130 return 1
132 for dep in deps:
131 for dep in deps:
133 dep_time = os.path.getmtime(dep)
132 dep_time = Path(dep).stat().st_mtime
134 if dep_time > target_time:
133 if dep_time > target_time:
135 # print("For target",target,"Dep failed:",dep) # dbg
134 # print("For target",target,"Dep failed:",dep) # dbg
136 # print("times (dep,tar):",dep_time,target_time) # dbg
135 # print("times (dep,tar):",dep_time,target_time) # dbg
@@ -190,25 +189,24 def git_prebuild(pkg_dir, build_cmd=build_py):
190 repo_commit, _ = proc.communicate()
189 repo_commit, _ = proc.communicate()
191 repo_commit = repo_commit.strip().decode("ascii")
190 repo_commit = repo_commit.strip().decode("ascii")
192
191
193 out_pth = pjoin(base_dir, pkg_dir, 'utils', '_sysinfo.py')
192 out_pth = Path(base_dir) / pkg_dir / "utils" / "_sysinfo.py"
194 if os.path.isfile(out_pth) and not repo_commit:
193 if out_pth.is_file() and not repo_commit:
195 # nothing to write, don't clobber
194 # nothing to write, don't clobber
196 return
195 return
197
196
198 print("writing git commit '%s' to %s" % (repo_commit, out_pth))
197 print(f"writing git commit '{repo_commit}' to {out_pth}")
199
198
200 # remove to avoid overwriting original via hard link
199 # remove to avoid overwriting original via hard link
201 try:
200 try:
202 os.remove(out_pth)
201 out_pth.unlink()
203 except (IOError, OSError):
202 except FileNotFoundError:
204 pass
203 pass
205 with open(out_pth, "w", encoding="utf-8") as out_file:
204 with out_pth.open("w", encoding="utf-8") as out_file:
206 out_file.writelines(
205 out_file.writelines(
207 [
206 [
208 "# GENERATED BY setup.py\n",
207 "# GENERATED BY setup.py\n",
209 'commit = "%s"\n' % repo_commit,
208 f'commit = "{repo_commit}"\n',
210 ]
209 ]
211 )
210 )
212
211
213 return MyBuildPy
212 return MyBuildPy
214
General Comments 0
You need to be logged in to leave comments. Login now