11#!/usr/bin/env python3
22# -*- coding: utf-8 -*-
3- from typing import List , Union
3+ from typing import List , Union , TextIO , Sequence
44
55
66def python_version_check (major = 3 , minor = 6 ):
@@ -15,10 +15,56 @@ def python_version_check(major=3, minor=6):
1515
1616
1717python_version_check ()
18-
1918import pathlib
2019import re
2120
21+
22+ def read_reqs (file : str , path : pathlib .Path ) -> List [str ]:
23+ """description"""
24+
25+ def readlines_ignore_comments (f : TextIO ):
26+ """description"""
27+ return [a_ for a_ in f .readlines () if "#" not in a_ and a_ ]
28+
29+ def recursive_flatten_ignore_str (seq : Sequence ) -> Sequence :
30+ """description"""
31+ if not seq : # is empty Sequence
32+ return seq
33+ if isinstance (seq [0 ], str ):
34+ return seq
35+ if isinstance (seq [0 ], Sequence ):
36+ return (
37+ * recursive_flatten_ignore_str (seq [0 ]),
38+ * recursive_flatten_ignore_str (seq [1 :]),
39+ )
40+ return (* seq [:1 ], * recursive_flatten_ignore_str (seq [1 :]))
41+
42+ def unroll_nested_reqs (req_str : str , base_path : pathlib .Path ):
43+ """description"""
44+ if req_str .startswith ("-r" ):
45+ with open (base_path / req_str .strip ("-r" ).strip ()) as f :
46+ return [
47+ unroll_nested_reqs (req .strip (), base_path )
48+ for req in readlines_ignore_comments (f )
49+ ]
50+ else :
51+ return (req_str ,)
52+
53+ requirements_group = []
54+ with open (str (path / file )) as f :
55+ requirements = readlines_ignore_comments (f )
56+ for requirement in requirements :
57+ requirements_group .extend (
58+ recursive_flatten_ignore_str (
59+ unroll_nested_reqs (requirement .strip (), path )
60+ )
61+ )
62+
63+ req_set = set (requirements_group )
64+ req_set .discard ("" )
65+ return list (req_set )
66+
67+
2268from setuptools import find_packages , setup
2369
2470with open (
@@ -44,33 +90,16 @@ class DevPackPackage:
4490
4591 @property
4692 def test_dependencies (self ) -> list :
47- """
48- The test dependencies
49- """
50- path = pathlib .Path (__file__ ).parent
51- requirements_tests = []
52- with open (path / "requirements_tests.txt" ) as f :
53- requirements = f .readlines ()
54-
55- for requirement in requirements :
56- requirements_tests .append (requirement .strip ())
57-
58- return requirements_tests
93+ return read_reqs (
94+ "requirements_tests.txt" , pathlib .Path (__file__ ).parent / "requirements"
95+ )
5996
6097 @property
6198 def setup_dependencies (self ) -> list :
62- """
63- Get the setup dependencies
64- """
65- path = pathlib .Path (__file__ ).parent
66- requirements_setup = []
67- with open (path / "requirements_setup.txt" ) as f :
68- requirements = f .readlines ()
69-
70- for requirement in requirements :
71- requirements_setup .append (requirement .strip ())
72-
73- return requirements_setup
99+ """description"""
100+ return read_reqs (
101+ "requirements_setup.txt" , pathlib .Path (__file__ ).parent / "requirements"
102+ )
74103
75104 @property
76105 def package_name (self ) -> str :
@@ -164,43 +193,29 @@ def entry_points(self) -> dict:
164193
165194 @property
166195 def extras (self ) -> dict :
167- """
168- Extra requirements
169- """
170- path = pathlib .Path (__file__ ).parent
171- requirements_xx = []
172- with open (path / "requirements_dev.txt" ) as f :
173- requirements = f .readlines ()
174-
175- for requirement in requirements :
176- requirements_xx .append (requirement .strip ())
177-
196+ """description"""
178197 these_extras = {
179- # 'ExtraGroupName':['package-name; platform_system == "System(Linux,Windows)"'
180- # "xx": requirements_xx
198+ # 'ExtraName':['package-name; platform_system == "System(Linux,Windows)"'
181199 }
182200
183- all_dependencies = []
201+ path : pathlib . Path = pathlib . Path ( __file__ ). parent / "requirements"
184202
203+ for file in path .iterdir ():
204+ if file .name .startswith ("requirements_" ):
205+ group_name_ = "_" .join (file .name .strip (".txt" ).split ("_" )[1 :])
206+ these_extras [group_name_ ] = read_reqs (file .name , path )
207+
208+ all_dependencies = []
185209 for group_name in these_extras :
186210 all_dependencies += these_extras [group_name ]
187- these_extras ["all" ] = all_dependencies
211+ these_extras ["all" ] = list ( set ( all_dependencies ))
188212
189213 return these_extras
190214
191215 @property
192216 def requirements (self ) -> list :
193- """
194- Requirements for the package
195- """
196- requirements_out = []
197- with open ("requirements.txt" ) as f :
198- requirements = f .readlines ()
199-
200- for requirement in requirements :
201- requirements_out .append (requirement .strip ())
202-
203- return requirements_out
217+ """description"""
218+ return read_reqs ("requirements.txt" , pathlib .Path (__file__ ).parent )
204219
205220 @property
206221 def description (self ) -> str :
0 commit comments