11
11
import pathlib
12
12
import re
13
13
import sys
14
+ import pathlib
14
15
15
16
from importlib import resources
16
17
@@ -57,19 +58,20 @@ def tzdata_resource_from_name(name):
57
58
return resources .files (f'tzdata.zoneinfo.{ pair [0 ].replace ("/" , "." )} ' ) / pair [1 ]
58
59
59
60
60
- def make_zones_list (zones ):
61
- with open (zones , "r" ) as f :
62
- zones = [zone .strip () for zone in f .readlines ()]
63
-
64
- return zones
61
+ def make_zones_list (f ):
62
+ return [zone .strip () for zone in f .readlines ()]
65
63
66
64
67
65
def make_zones (args ):
68
66
out = []
69
67
70
68
for zone in make_zones_list (args .zones ):
71
- target = tzdata_resource_from_name (zone )
72
- with tzdata_resource_from_name (zone ).open ("rb" ) as f :
69
+ if args .root :
70
+ target = args .root / zone
71
+ else :
72
+ target = tzdata_resource_from_name (zone )
73
+
74
+ with target .open ("rb" ) as f :
73
75
magic = f .read (4 )
74
76
if magic != b"TZif" :
75
77
continue
@@ -138,7 +140,7 @@ def header(zones):
138
140
formatter_class = argparse .ArgumentDefaultsHelpFormatter )
139
141
parser .add_argument (
140
142
"--output" ,
141
- type = argparse .FileType ("w" ),
143
+ type = argparse .FileType ("w" , encoding = "utf-8" ),
142
144
default = sys .stdout ,
143
145
)
144
146
parser .add_argument (
@@ -148,13 +150,14 @@ def header(zones):
148
150
)
149
151
parser .add_argument (
150
152
"--zones" ,
151
- help = "Zone names, one per line" ,
153
+ type = argparse .FileType ("r" , encoding = "utf-8" ),
154
+ help = "Zone names file, one per line" ,
152
155
default = os .path .join (os .path .dirname (tzdata .__file__ ), "zones" ),
153
156
)
154
157
parser .add_argument (
155
158
"--root" ,
156
159
help = "Where do we get raw zoneinfo files from" ,
157
- default = os . path . join ( os . path . dirname ( tzdata . __file__ ), "zoneinfo" ) ,
160
+ type = pathlib . Path ,
158
161
)
159
162
160
163
args = parser .parse_args ()
0 commit comments