reference-handler 0.9.2__tar.gz → 0.9.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. {reference_handler-0.9.2/reference_handler.egg-info → reference_handler-0.9.3}/PKG-INFO +1 -1
  2. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/_version.py +3 -3
  3. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/reference_handler.py +73 -5
  4. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/tests/test_reference_handler.py +37 -0
  5. {reference_handler-0.9.2 → reference_handler-0.9.3/reference_handler.egg-info}/PKG-INFO +1 -1
  6. {reference_handler-0.9.2 → reference_handler-0.9.3}/LICENSE +0 -0
  7. {reference_handler-0.9.2 → reference_handler-0.9.3}/MANIFEST.in +0 -0
  8. {reference_handler-0.9.2 → reference_handler-0.9.3}/README.md +0 -0
  9. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/__init__.py +0 -0
  10. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/latex_utf8.py +0 -0
  11. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/tests/__init__.py +0 -0
  12. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/tests/build_filenames.py +0 -0
  13. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/tests/data/library.bib +0 -0
  14. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/tests/test_exceptions.py +0 -0
  15. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/tests/test_latex.py +0 -0
  16. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler/utils.py +0 -0
  17. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler.egg-info/SOURCES.txt +0 -0
  18. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler.egg-info/dependency_links.txt +0 -0
  19. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler.egg-info/requires.txt +0 -0
  20. {reference_handler-0.9.2 → reference_handler-0.9.3}/reference_handler.egg-info/top_level.txt +0 -0
  21. {reference_handler-0.9.2 → reference_handler-0.9.3}/requirements.txt +0 -0
  22. {reference_handler-0.9.2 → reference_handler-0.9.3}/requirements_dev.txt +0 -0
  23. {reference_handler-0.9.2 → reference_handler-0.9.3}/requirements_install.txt +0 -0
  24. {reference_handler-0.9.2 → reference_handler-0.9.3}/setup.cfg +0 -0
  25. {reference_handler-0.9.2 → reference_handler-0.9.3}/setup.py +0 -0
  26. {reference_handler-0.9.2 → reference_handler-0.9.3}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reference_handler
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Author: MolSSI
5
5
  Author-email: meliseo@vt.edu
6
6
  License: BSD-3-Clause
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2026-09-20T19:28:51-0400",
11
+ "date": "2026-10-17T13:57:51-0400",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "e2f9c6eab9da1597c472cc0168e1e3dc580a35fc",
15
- "version": "0.9.2"
14
+ "full-revisionid": "96f322852777846d0aefaa5f66e71ba58794b5ee",
15
+ "version": "0.9.3"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -6,7 +6,6 @@ Handles the primary class
6
6
  """
7
7
 
8
8
  import sqlite3
9
- import pprint
10
9
  import re
11
10
 
12
11
  import bibtexparser
@@ -259,10 +258,10 @@ class Reference_Handler(object):
259
258
  plain_text = self.format_inbook(parse)
260
259
  elif entry_type == "phdthesis":
261
260
  plain_text = self.format_phdthesis(parse)
261
+ elif entry_type == "book":
262
+ plain_text = self.format_book(parse)
262
263
  else:
263
- plain_text = f"Do not have a handler for '{entry_type}':"
264
- plain_text += "\n"
265
- plain_text += pprint.pformat(parse)
264
+ plain_text = self.format_other(parse)
266
265
 
267
266
  plain_text = decode_latex(plain_text)
268
267
  plain_text = self.decode_math_symbols(plain_text)
@@ -740,7 +739,76 @@ class Reference_Handler(object):
740
739
  return result
741
740
 
742
741
  def format_software(self, data):
743
- return self.format_misc(self, data)
742
+ return self.format_misc(data)
743
+
744
+ def format_book(self, data):
745
+ """Format a book BibTex record
746
+
747
+ ACS style:
748
+ Hansen, J.-P.; McDonald, I. R. Theory of Simple Liquids, 4th ed.;
749
+ Academic Press: Oxford, 2013. DOI: 10.1016/C2010-0-66723-X
750
+ """
751
+ result = ""
752
+ names = data.get("author", data.get("editor"))
753
+ if names is not None:
754
+ result += "; ".join(names.split(" and "))
755
+ if "author" not in data:
756
+ result += ", Eds"
757
+ if result[-1] != ".":
758
+ result += "."
759
+ if "title" in data:
760
+ result += " " + data["title"].rstrip(".")
761
+ if "edition" in data:
762
+ result += f", {data['edition']} ed."
763
+ result += ";" if "publisher" in data else "."
764
+ if "publisher" in data:
765
+ result += f" {data['publisher']}"
766
+ if "address" in data:
767
+ result += f": {data['address']}"
768
+ result += ","
769
+ if "year" in data:
770
+ result += f" {data['year']}."
771
+ if "doi" in data:
772
+ result += f" DOI: {data['doi']}"
773
+ elif "url" in data:
774
+ result += f" {data['url']}"
775
+ return result.strip()
776
+
777
+ def format_other(self, data):
778
+ """Format a record of a type without its own style: the authors, title,
779
+ where it appeared, the year and the DOI or URL."""
780
+ parts = []
781
+ names = data.get("author", data.get("editor"))
782
+ if names is not None:
783
+ text = "; ".join(names.split(" and "))
784
+ parts.append(text if text.endswith(".") else text + ".")
785
+ if "title" in data:
786
+ parts.append(data["title"].rstrip(".") + ".")
787
+ where = next(
788
+ (
789
+ data[key]
790
+ for key in (
791
+ "journal",
792
+ "booktitle",
793
+ "publisher",
794
+ "institution",
795
+ "school",
796
+ )
797
+ if key in data
798
+ ),
799
+ None,
800
+ )
801
+ if where is not None and "year" in data:
802
+ parts.append(f"{where}, {data['year']}.")
803
+ elif where is not None:
804
+ parts.append(f"{where}.")
805
+ elif "year" in data:
806
+ parts.append(f"{data['year']}.")
807
+ if "doi" in data:
808
+ parts.append(f"DOI: {data['doi']}")
809
+ elif "url" in data:
810
+ parts.append(data["url"])
811
+ return " ".join(parts)
744
812
 
745
813
  def format_inbook(self, data):
746
814
  """Format a chapter or part of a book or series BibTex record
@@ -378,3 +378,40 @@ def test_cite_return():
378
378
  assert lammps_id1 == lammps_id2
379
379
  assert lammps_id1 == lammps_id3
380
380
  assert namd_id == 2
381
+
382
+
383
+ def test_format_book_software_and_other():
384
+ """Books, software, and types without their own style are formatted, not
385
+ reported as having no handler."""
386
+ import bibtexparser
387
+
388
+ from reference_handler import Reference_Handler
389
+
390
+ book = bibtexparser.loads("""@book{HansenMcDonald,
391
+ author = {Jean-Pierre Hansen and Ian R. McDonald},
392
+ title = {Theory of Simple Liquids},
393
+ edition = {4th},
394
+ publisher = {Academic Press},
395
+ address = {Oxford},
396
+ year = {2013},
397
+ doi = {10.1016/C2010-0-66723-X}
398
+ }""").entries[0]
399
+ text = Reference_Handler.format_book(None, book)
400
+ assert text == (
401
+ "Jean-Pierre Hansen; Ian R. McDonald. Theory of Simple Liquids, 4th ed.; "
402
+ "Academic Press: Oxford, 2013. DOI: 10.1016/C2010-0-66723-X"
403
+ )
404
+
405
+ software = {"author": "A. Person", "title": "Code", "version": "1.0"}
406
+ handler = Reference_Handler.__new__(Reference_Handler)
407
+ assert handler.format_software(software).startswith("A. Person. Code, version")
408
+
409
+ report = {
410
+ "author": "A. Person",
411
+ "title": "A report.",
412
+ "institution": "An Institute",
413
+ "year": "2020",
414
+ }
415
+ assert Reference_Handler.format_other(None, report) == (
416
+ "A. Person. A report. An Institute, 2020."
417
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reference_handler
3
- Version: 0.9.2
3
+ Version: 0.9.3
4
4
  Author: MolSSI
5
5
  Author-email: meliseo@vt.edu
6
6
  License: BSD-3-Clause