1717"""
1818
1919import math
20- import os . path
21- from typing import TYPE_CHECKING , Dict , List , NamedTuple , Set
20+ from pathlib import Path
21+ from typing import Dict , List , NamedTuple , Set
2222
2323from docutils .nodes import make_id
2424from pybtex .database import BibliographyData , BibliographyDataError
2525from pybtex .database .input .bibtex import Parser
2626from sphinx .util .logging import getLogger
2727
28- if TYPE_CHECKING :
29- from sphinx .environment import BuildEnvironment
30-
3128
3229logger = getLogger (__name__ )
3330
@@ -43,30 +40,25 @@ class BibData(NamedTuple):
4340 """Contains information about a collection of bib files."""
4441
4542 encoding : str #: Encoding of all bib files.
46- bibfiles : Dict [str , BibFile ] #: Maps bib filename to information about it.
43+ bibfiles : Dict [Path , BibFile ] #: Maps bib filename to information about it.
4744 data : BibliographyData #: Data parsed from all bib files.
4845
4946
50- def normpath_filename (env : "BuildEnvironment" , filename : str ) -> str :
51- """Return normalised path to *filename* for the given environment *env*."""
52- return os .path .normpath (env .relfn2path (filename .strip ())[1 ])
53-
54-
55- def get_mtime (bibfilename : str ) -> float :
47+ def get_mtime (bibfilename : Path ) -> float :
5648 try :
57- return os . path . getmtime ( bibfilename )
49+ return bibfilename . lstat (). st_mtime
5850 except OSError :
5951 return - math .inf
6052
6153
62- def parse_bibdata (bibfilenames : List [str ], encoding : str ) -> BibData :
54+ def parse_bibdata (bibfilenames : List [Path ], encoding : str ) -> BibData :
6355 """Parse *bibfilenames* with given *encoding*, and return parsed data."""
6456 parser = Parser (encoding )
65- bibfiles : Dict [str , BibFile ] = {}
57+ bibfiles : Dict [Path , BibFile ] = {}
6658 keys : Dict [str , None ] = {}
6759 for filename in bibfilenames :
6860 logger .info ("parsing bibtex file {0}... " .format (filename ), nonl = True )
69- if not os . path . isfile ( filename ):
61+ if not filename . is_file ( ):
7062 logger .warning (
7163 "could not open bibtex file {0}." .format (filename ),
7264 type = "bibtex" ,
@@ -91,7 +83,7 @@ def parse_bibdata(bibfilenames: List[str], encoding: str) -> BibData:
9183
9284
9385def is_bibdata_outdated (
94- bibdata : BibData , bibfilenames : List [str ], encoding : str
86+ bibdata : BibData , bibfilenames : List [Path ], encoding : str
9587) -> bool :
9688 return (
9789 bibdata .encoding != encoding
@@ -104,7 +96,7 @@ def is_bibdata_outdated(
10496
10597
10698def process_bibdata (
107- bibdata : BibData , bibfilenames : List [str ], encoding : str
99+ bibdata : BibData , bibfilenames : List [Path ], encoding : str
108100) -> BibData :
109101 """Parse *bibfilenames* and store parsed data in *bibdata*."""
110102 logger .info ("checking bibtex cache... " , nonl = True )
0 commit comments