Skip to content

Commit

Permalink
Fix convert_file for Python 3.13 (#384)
Browse files Browse the repository at this point in the history
As of python/cpython#117589 (at least),
`Path.glob` returns an `Iterator` rather than `Generator` (which
inherits from `Iterator`).  `convert_file` doesn't need to care about
this distinction; it can reasonably accept both.

This previously caused a test failure along these lines:

  ______________________________________________________ TestPypandoc.test_basic_conversion_from_file_pattern_pathlib_glob _______________________________________________________

  self = <tests.TestPypandoc testMethod=test_basic_conversion_from_file_pattern_pathlib_glob>

      def test_basic_conversion_from_file_pattern_pathlib_glob(self):
          received_from_str_filename_input = pypandoc.convert_file("./*.md", 'html').lower()
  >       received_from_path_filename_input = pypandoc.convert_file(Path(".").glob("*.md"), 'html').lower()

  tests.py:654:
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

  source_file = <map object at 0x7f83952c9420>, to = 'html', format = None, extra_args = (), encoding = 'utf-8', outputfile = None, filters = None, verify_format = True
  sandbox = False, cworkdir = '/home/cjwatson/src/python/pypandoc', sort_files = True
  [...]
          if not _identify_path(discovered_source_files):
  >           raise RuntimeError("source_file is not a valid path")
  E           RuntimeError: source_file is not a valid path

  pypandoc/__init__.py:201: RuntimeError

Co-authored-by: Jessica Tegner <[email protected]>
  • Loading branch information
cjwatson and JessicaTegner authored Jan 8, 2025
1 parent 32d3a40 commit 3fd939c
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions pypandoc/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, with_statement
from typing import Iterable
from typing import Iterator
from typing import Union
from typing import Generator

import os
import re
Expand Down Expand Up @@ -97,7 +97,7 @@ def convert_text(source:str, to:str, format:str, extra_args:Iterable=(), encodin
cworkdir=cworkdir)


def convert_file(source_file:Union[list, str, Path, Generator], to:str, format:Union[str, None]=None,
def convert_file(source_file:Union[list, str, Path, Iterator], to:str, format:Union[str, None]=None,
extra_args:Iterable=(), encoding:str='utf-8', outputfile:Union[None, str, Path]=None,
filters:Union[Iterable, None]=None, verify_format:bool=True, sandbox:bool=False,
cworkdir:Union[str, None]=None, sort_files=True) -> str:
Expand Down Expand Up @@ -165,7 +165,7 @@ def convert_file(source_file:Union[list, str, Path, Generator], to:str, format:U
source_file = Path(source_file)
elif isinstance(source_file, list):
source_file = [Path(x) for x in source_file]
elif isinstance(source_file, Generator):
elif isinstance(source_file, Iterator):
source_file = [Path(x) for x in source_file]


Expand All @@ -175,7 +175,7 @@ def convert_file(source_file:Union[list, str, Path, Generator], to:str, format:U
# if it is, just use the absolute path
if isinstance(source_file, list):
source_file = [x if x.is_absolute() else Path(cworkdir, x) for x in source_file]
elif isinstance(source_file, Generator):
elif isinstance(source_file, Iterator):
source_file = (x if x.is_absolute() else Path(cworkdir, x) for x in source_file)
# check ifjust a single path was given
elif isinstance(source_file, Path):
Expand Down

0 comments on commit 3fd939c

Please sign in to comment.