Skip to content

Commit 9f0e59e

Browse files
Add optional logger support (#673)
* Use standard logging * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent a05a3a6 commit 9f0e59e

106 files changed

Lines changed: 999 additions & 541 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

colrev/packages/abi_inform_proquest/src/abi_inform_proquest.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import logging
66
import re
77
from pathlib import Path
8+
from typing import Optional
89

910
from pydantic import Field
1011

@@ -36,8 +37,13 @@ class ABIInformProQuestSearchSource(base_classes.SearchSourcePackageBaseClass):
3637
db_url = "https://search.proquest.com/abicomplete/advanced"
3738

3839
def __init__(
39-
self, *, source_operation: colrev.process.operation.Operation, settings: dict
40+
self,
41+
*,
42+
source_operation: colrev.process.operation.Operation,
43+
settings: dict,
44+
logger: Optional[logging.Logger] = None,
4045
) -> None:
46+
self.logger = logger or logging.getLogger(__name__)
4147
self.review_manager = source_operation.review_manager
4248
self.search_source = self.settings_class(**settings)
4349
self.source_operation = source_operation

colrev/packages/acm_digital_library/src/acm_digital_library.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import logging
66
from pathlib import Path
7+
from typing import Optional
78

89
from pydantic import Field
910

@@ -34,8 +35,13 @@ class ACMDigitalLibrarySearchSource(base_classes.SearchSourcePackageBaseClass):
3435
db_url = "https://dl.acm.org/"
3536

3637
def __init__(
37-
self, *, source_operation: colrev.process.operation.Operation, settings: dict
38+
self,
39+
*,
40+
source_operation: colrev.process.operation.Operation,
41+
settings: dict,
42+
logger: Optional[logging.Logger] = None,
3843
) -> None:
44+
self.logger = logger or logging.getLogger(__name__)
3945
self.search_source = self.settings_class(**settings)
4046
self.review_manager = source_operation.review_manager
4147
self.operation = source_operation

colrev/packages/add_journal_ranking/src/add_journal_ranking.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
"""Adding of journal rankings to metadata"""
33
from __future__ import annotations
44

5+
import logging
6+
from typing import Optional
7+
58
from pydantic import Field
69

710
import colrev.env.local_index
@@ -27,7 +30,9 @@ def __init__(
2730
*,
2831
prep_operation: colrev.ops.prep.Prep, # pylint: disable=unused-argument
2932
settings: dict,
33+
logger: Optional[logging.Logger] = None,
3034
) -> None:
35+
self.logger = logger or logging.getLogger(__name__)
3136
self.settings = self.settings_class(**settings)
3237
self.local_index = colrev.env.local_index.LocalIndex()
3338

colrev/packages/ais_library/src/aisel.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import re
77
import urllib.parse
88
from pathlib import Path
9+
from typing import Optional
910
from urllib.parse import urlparse
1011

1112
import requests
@@ -67,8 +68,13 @@ class AISeLibrarySearchSource(base_classes.SearchSourcePackageBaseClass):
6768
}
6869

6970
def __init__(
70-
self, *, source_operation: colrev.process.operation.Operation, settings: dict
71+
self,
72+
*,
73+
source_operation: colrev.process.operation.Operation,
74+
settings: dict,
75+
logger: Optional[logging.Logger] = None,
7176
) -> None:
77+
self.logger = logger or logging.getLogger(__name__)
7278
self.search_source = self.settings_class(**settings)
7379
self.review_manager = source_operation.review_manager
7480
self.quality_model = self.review_manager.get_qm()
@@ -208,14 +214,14 @@ def _validate_source(self) -> None:
208214

209215
source = self.search_source
210216

211-
self.review_manager.logger.debug(f"Validate SearchSource {source.filename}")
217+
self.logger.debug(f"Validate SearchSource {source.filename}")
212218

213219
if source.search_type == SearchType.API:
214220
if "query" not in source.search_parameters:
215221
# if "search_terms" not in source.search_parameters["query"]:
216222
raise colrev_exceptions.InvalidQueryException("query parameter missing")
217223

218-
self.review_manager.logger.debug(f"SearchSource {source.filename} validated")
224+
self.logger.debug(f"SearchSource {source.filename} validated")
219225

220226
def _get_ais_query_return(self) -> list:
221227
def query_from_params(params: dict) -> str:
@@ -260,7 +266,7 @@ def query_from_params(params: dict) -> str:
260266
id_labeler=ais_load_utils.enl_id_labeler,
261267
entrytype_setter=ais_load_utils.enl_entrytype_setter,
262268
field_mapper=ais_load_utils.enl_field_mapper,
263-
logger=self.review_manager.logger,
269+
logger=self.logger,
264270
)
265271

266272
return list(records.values())
@@ -274,9 +280,7 @@ def _run_api_search(
274280
# pylint: disable=too-many-branches
275281

276282
if rerun:
277-
self.review_manager.logger.info(
278-
"Performing a search of the full history (may take time)"
279-
)
283+
self.logger.info("Performing a search of the full history (may take time)")
280284

281285
try:
282286
for record_dict in self._get_ais_query_return():

colrev/packages/arxiv/src/arxiv.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import typing
77
from multiprocessing import Lock
88
from pathlib import Path
9+
from typing import Optional
910
from urllib.parse import urlparse
1011

1112
import feedparser
@@ -46,7 +47,9 @@ def __init__(
4647
*,
4748
source_operation: colrev.process.operation.Operation,
4849
settings: typing.Optional[dict] = None,
50+
logger: Optional[logging.Logger] = None,
4951
) -> None:
52+
self.logger = logger or logging.getLogger(__name__)
5053
self.review_manager = source_operation.review_manager
5154
if settings:
5255
# arXiv as a search_source
@@ -133,9 +136,7 @@ def validate_source(
133136
) -> None:
134137
"""Validate the SearchSource (parameters etc.)"""
135138

136-
search_operation.review_manager.logger.debug(
137-
f"Validate SearchSource {source.filename}"
138-
)
139+
self.logger.debug(f"Validate SearchSource {source.filename}")
139140

140141
if source.filename.name != self._arxiv_md_filename.name:
141142
if "query" not in source.search_parameters:
@@ -146,9 +147,7 @@ def validate_source(
146147
# if "query_file" in source.search_parameters:
147148
# ...
148149

149-
search_operation.review_manager.logger.debug(
150-
f"SearchSource {source.filename} validated"
151-
)
150+
self.logger.debug(f"SearchSource {source.filename} validated")
152151

153152
def check_availability(
154153
self, *, source_operation: colrev.process.operation.Operation
@@ -200,11 +199,11 @@ def check_availability(
200199
# headers = {"user-agent": f"{__name__} (mailto:{self.email})"}
201200
# session = self.review_manager.get_cached_session()
202201

203-
# # review_manager.logger.debug(url)
202+
# # self.logger.debug(url)
204203
# ret = session.request("GET", url, headers=headers, timeout=timeout)
205204
# ret.raise_for_status()
206205
# if ret.status_code != 200:
207-
# # review_manager.logger.debug(
206+
# # self.logger.debug(
208207
# # f"crossref_query failed with status {ret.status_code}"
209208
# # )
210209
# return {"arxiv_id": arxiv_id}
@@ -264,9 +263,7 @@ def _run_parameter_search(
264263
rerun: bool,
265264
) -> None:
266265
if rerun:
267-
self.review_manager.logger.info(
268-
"Performing a search of the full history (may take time)"
269-
)
266+
self.logger.info("Performing a search of the full history (may take time)")
270267

271268
try:
272269
for record_dict in self._get_arxiv_query_return():
@@ -275,9 +272,7 @@ def _run_parameter_search(
275272
if "" == record_dict.get(
276273
Fields.AUTHOR, ""
277274
) and "" == record_dict.get(Fields.TITLE, ""):
278-
self.review_manager.logger.warning(
279-
f"Skipped record: {record_dict}"
280-
)
275+
self.logger.warning(f"Skipped record: {record_dict}")
281276
continue
282277

283278
prep_record = colrev.record.record_prep.PrepRecord(record_dict)

colrev/packages/bibliography_export/src/bibliography_export.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
from __future__ import annotations
44

55
import copy
6+
import logging
67
from enum import Enum
78
from pathlib import Path
9+
from typing import Optional
810

911
import inquirer
1012
from pydantic import BaseModel
@@ -64,7 +66,9 @@ def __init__(
6466
*,
6567
data_operation: colrev.ops.data.Data,
6668
settings: dict,
69+
logger: Optional[logging.Logger] = None,
6770
) -> None:
71+
self.logger = logger or logging.getLogger(__name__)
6872
self.review_manager = data_operation.review_manager
6973

7074
if "bib_format" not in settings:
@@ -77,7 +81,7 @@ def __init__(
7781
self.endpoint_path = self.review_manager.paths.output
7882

7983
def _export(self, *, selected_records: dict) -> None:
80-
self.review_manager.logger.info(f"Export {self.settings.bib_format.name}")
84+
self.logger.info(f"Export {self.settings.bib_format.name}")
8185

8286
if self.settings.bib_format is BibFormats.zotero:
8387
export_filepath = self.endpoint_path / Path("zotero.bib")
@@ -189,9 +193,7 @@ def update_data(
189193
self._export(selected_records=selected_records)
190194

191195
except NotImplementedError:
192-
self.review_manager.logger.info(
193-
f"Not yet implemented ({self.settings.bib_format})"
194-
)
196+
self.logger.info(f"Not yet implemented ({self.settings.bib_format})")
195197

196198
def update_record_status_matrix(
197199
self,

colrev/packages/blank/src/blank.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#! /usr/bin/env python
22
"""Blank literature review"""
3+
import logging
4+
from typing import Optional
5+
36
from pydantic import Field
47

58
import colrev.ops.search
@@ -20,8 +23,13 @@ class BlankReview(base_classes.ReviewTypePackageBaseClass):
2023
ci_supported: bool = Field(default=True)
2124

2225
def __init__(
23-
self, *, operation: colrev.process.operation.Operation, settings: dict
26+
self,
27+
*,
28+
operation: colrev.process.operation.Operation,
29+
settings: dict,
30+
logger: Optional[logging.Logger] = None,
2431
) -> None:
32+
self.logger = logger or logging.getLogger(__name__)
2533
self.settings = self.settings_class(**settings)
2634

2735
def __str__(self) -> str:

colrev/packages/cli_prep_man/src/cli_prep_man_prep_man.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#! /usr/bin/env python
22
"""CliPrepMan"""
3+
import logging
34
import typing
5+
from typing import Optional
46

57
import inquirer
68

@@ -18,8 +20,13 @@ class CliPrepMan(PrepManPackageBaseClass):
1820
"""CLI for manual preparation of records"""
1921

2022
def __init__(
21-
self, *, prep_man_operation: colrev.ops.prep_man.PrepMan, settings: dict
23+
self,
24+
*,
25+
prep_man_operation: colrev.ops.prep_man.PrepMan,
26+
settings: dict,
27+
logger: Optional[logging.Logger] = None,
2228
) -> "None":
29+
self.logger = logger or logging.getLogger(__name__)
2330
"""Initialize self. See help(type(self)) for accurate signature."""
2431

2532
def _get_choices(

colrev/packages/colrev_cli_pdf_get_man/src/pdf_get_man_cli.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
"""CLI interface for manual retrieval of PDFs"""
33
from __future__ import annotations
44

5+
import logging
56
import shutil
67
import urllib.parse
78
from pathlib import Path
9+
from typing import Optional
810

911
from pydantic import Field
1012

@@ -34,7 +36,9 @@ def __init__(
3436
*,
3537
pdf_get_man_operation: colrev.ops.pdf_get_man.PDFGetMan,
3638
settings: dict,
39+
logger: Optional[logging.Logger] = None,
3740
) -> None:
41+
self.logger = logger or logging.getLogger(__name__)
3842
self.settings = self.settings_class(**settings)
3943
self.review_manager = pdf_get_man_operation.review_manager
4044
self.pdf_get_man_operation = pdf_get_man_operation
@@ -211,7 +215,7 @@ def _pdf_get_man_record_cli(
211215
*,
212216
record: colrev.record.record.Record,
213217
) -> None:
214-
# self.review_manager.logger.debug(
218+
# self.logger.debug(
215219
# f"called pdf_get_man_cli for {record}"
216220
# )
217221

@@ -229,7 +233,7 @@ def _pdf_get_man_record_cli(
229233

230234
filepath = self._get_filepath(record=record)
231235
for retrieval_script in retrieval_scripts.values():
232-
# self.review_manager.logger.debug(
236+
# self.logger.debug(
233237
# f'{script_name}({record.data[Fields.ID]}) called'
234238
# )
235239
record = retrieval_script(record)
@@ -260,7 +264,7 @@ def _pdf_get_man_record_cli(
260264
def pdf_get_man(self, records: dict) -> dict:
261265
"""Get the PDF manually based on a cli"""
262266

263-
self.review_manager.logger.info("Retrieve PDFs manually")
267+
self.logger.info("Retrieve PDFs manually")
264268
pdf_get_operation = self.review_manager.get_pdf_get_operation()
265269
pdf_dir = self.pdf_dir
266270

@@ -278,9 +282,7 @@ def pdf_get_man(self, records: dict) -> dict:
278282
self.pdf_get_man_operation.export_retrieval_table(records)
279283
pdf_get_man_data = self.pdf_get_man_operation.get_data()
280284
if pdf_get_man_data["nr_tasks"] == 0:
281-
self.review_manager.logger.info(
282-
"No tasks for PDF retrieval (run colrev pdf-get )."
283-
)
285+
self.logger.info("No tasks for PDF retrieval (run colrev pdf-get ).")
284286
return records
285287
print(
286288
"\nInstructions\n\n "
@@ -304,7 +306,7 @@ def pdf_get_man(self, records: dict) -> dict:
304306
manual_author=True,
305307
)
306308
else:
307-
self.review_manager.logger.info(
309+
self.logger.info(
308310
"Retrieve PDFs manually and copy the files to "
309311
f"the {pdf_dir}. Afterwards, use "
310312
"colrev pdf-get-man"

0 commit comments

Comments
 (0)