@@ -138,34 +138,61 @@ def convert_file(source_file:Union[list, str, Path, Generator], to:str, format:U
138
138
:raises OSError: if pandoc is not found; make sure it has been installed and is available at
139
139
path.
140
140
"""
141
+ # check if we have a working directory
142
+ # if we don't, we use the current working directory
143
+ if cworkdir is None :
144
+ cworkdir = os .getcwd ()
145
+
141
146
# TODO: remove 'encoding' parameter and warning
142
147
if encoding != "utf-8" :
143
148
logger .warning ("The 'encoding' parameter will be removed in version 1.13. Just remove the parameter, because currently the method does not use it." )
144
149
145
- # This if block effectively adds support for pathlib.Path objects
146
- # and generators produced by pathlib.Path().glob().
147
- if not isinstance (source_file , str ):
148
- try :
149
- source_file = list (map (str , source_file ))
150
- except TypeError :
151
- source_file = str (source_file )
152
-
153
- if not _identify_path (source_file ):
154
- raise RuntimeError ("source_file is not a valid path" )
155
150
if _is_network_path (source_file ): # if the source_file is an url
156
151
format = _identify_format_from_path (source_file , format )
157
152
return _convert_input (source_file , format , 'path' , to , extra_args = extra_args ,
158
153
outputfile = outputfile , filters = filters ,
159
154
verify_format = verify_format , sandbox = sandbox ,
160
155
cworkdir = cworkdir )
161
156
162
- discovered_source_files = []
157
+ # convert the source file to a path object internally
163
158
if isinstance (source_file , str ):
164
- discovered_source_files += glob .glob (source_file )
165
- if isinstance (source_file , list ): # a list of possibly file or file patterns. Expand all with glob
166
- for filepath in source_file :
167
- discovered_source_files .extend (glob .glob (filepath ))
159
+ source_file = Path (source_file )
160
+ elif isinstance (source_file , list ):
161
+ source_file = [Path (x ) for x in source_file ]
162
+ elif isinstance (source_file , Generator ):
163
+ source_file = [Path (x ) for x in source_file ]
164
+
165
+
166
+ # we are basically interested to figure out if its an absolute path or not
167
+ # if it's not, we want to prefix the working directory
168
+ # if it's a list, we want to prefix the working directory to each item if it's not an absolute path
169
+ # if it is, just use the absolute path
170
+ if isinstance (source_file , list ):
171
+ source_file = [x if x .is_absolute () else Path (cworkdir , x ) for x in source_file ]
172
+ elif isinstance (source_file , Generator ):
173
+ source_file = (x if x .is_absolute () else Path (cworkdir , x ) for x in source_file )
174
+ # check ifjust a single path was given
175
+ elif isinstance (source_file , Path ):
176
+ source_file = source_file if source_file .is_absolute () else Path (cworkdir , source_file )
168
177
178
+
179
+ discovered_source_files = []
180
+ # if we have a list of files, we need to glob them
181
+ # if we have a single file, we need to glob it
182
+ # remember that we already converted the source_file to a path object
183
+ # so for glob.glob use both the dir and file name
184
+ if isinstance (source_file , list ):
185
+ for single_source in source_file :
186
+ discovered_source_files .extend (glob .glob (str (single_source )))
187
+ if discovered_source_files == []:
188
+ discovered_source_files = source_file
189
+ else :
190
+ discovered_source_files .extend (glob .glob (str (source_file )))
191
+ if discovered_source_files == []:
192
+ discovered_source_files = [source_file ]
193
+
194
+ if not _identify_path (discovered_source_files ):
195
+ raise RuntimeError ("source_file is not a valid path" )
169
196
format = _identify_format_from_path (discovered_source_files [0 ], format )
170
197
if len (discovered_source_files ) == 1 :
171
198
discovered_source_files = discovered_source_files [0 ]
0 commit comments