numbers-parser 4.14.3__tar.gz → 4.14.4__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 (61) hide show
  1. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/PKG-INFO +9 -26
  2. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/README.md +6 -23
  3. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/pyproject.toml +2 -2
  4. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/_cat_numbers.py +15 -6
  5. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/model.py +4 -1
  6. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/LICENSE.rst +0 -0
  7. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/__init__.py +0 -0
  8. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/_csv2numbers.py +0 -0
  9. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/_unpack_numbers.py +0 -0
  10. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/bullets.py +0 -0
  11. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/cell.py +0 -0
  12. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/constants.py +0 -0
  13. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/containers.py +0 -0
  14. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/currencies.py +0 -0
  15. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/data/empty.numbers +0 -0
  16. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/document.py +0 -0
  17. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/exceptions.py +0 -0
  18. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/experimental.py +0 -0
  19. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/formula.py +0 -0
  20. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TNArchives_pb2.py +0 -0
  21. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TNArchives_sos_pb2.py +0 -0
  22. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TNCommandArchives_pb2.py +0 -0
  23. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TNCommandArchives_sos_pb2.py +0 -0
  24. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSAArchives_pb2.py +0 -0
  25. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSAArchives_sos_pb2.py +0 -0
  26. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSACommandArchives_sos_pb2.py +0 -0
  27. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCEArchives_pb2.py +0 -0
  28. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCH3DArchives_pb2.py +0 -0
  29. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCHArchives_Common_pb2.py +0 -0
  30. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCHArchives_GEN_pb2.py +0 -0
  31. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCHArchives_pb2.py +0 -0
  32. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCHArchives_sos_pb2.py +0 -0
  33. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCHCommandArchives_pb2.py +0 -0
  34. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCHPreUFFArchives_pb2.py +0 -0
  35. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCKArchives_pb2.py +0 -0
  36. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSCKArchives_sos_pb2.py +0 -0
  37. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSDArchives_pb2.py +0 -0
  38. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSDArchives_sos_pb2.py +0 -0
  39. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSDCommandArchives_pb2.py +0 -0
  40. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSKArchives_pb2.py +0 -0
  41. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSPArchiveMessages_pb2.py +0 -0
  42. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSPDatabaseMessages_pb2.py +0 -0
  43. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSPMessages_pb2.py +0 -0
  44. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSSArchives_pb2.py +0 -0
  45. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSSArchives_sos_pb2.py +0 -0
  46. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSTArchives_pb2.py +0 -0
  47. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSTArchives_sos_pb2.py +0 -0
  48. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSTCommandArchives_pb2.py +0 -0
  49. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSTStylePropertyArchiving_pb2.py +0 -0
  50. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSWPArchives_pb2.py +0 -0
  51. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSWPArchives_sos_pb2.py +0 -0
  52. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/TSWPCommandArchives_pb2.py +0 -0
  53. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/__init__.py +0 -0
  54. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/fontmap.py +0 -0
  55. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/functionmap.py +0 -0
  56. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/generated/mapping.py +0 -0
  57. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/iwafile.py +0 -0
  58. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/iwork.py +0 -0
  59. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/numbers_cache.py +0 -0
  60. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/numbers_uuid.py +0 -0
  61. {numbers_parser-4.14.3 → numbers_parser-4.14.4}/src/numbers_parser/roman.py +0 -0
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: numbers-parser
3
- Version: 4.14.3
3
+ Version: 4.14.4
4
4
  Summary: Read and write Apple Numbers spreadsheets
5
- Home-page: https://github.com/masaccio/numbers-parser
6
5
  License: MIT
7
6
  Author: Jon Connell
8
7
  Author-email: python@figsandfudge.com
@@ -14,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
18
18
  Requires-Dist: compact-json (>=1.1.3,<2.0.0)
19
19
  Requires-Dist: enum-tools (>=0.11)
@@ -40,38 +40,20 @@ with earlier versions of Python.
40
40
 
41
41
  ## Installation
42
42
 
43
- ```bash
44
- python3 -m pip install numbers-parser
45
- ```
43
+ A pre-requisite for this package is [python-snappy](https://pypi.org/project/python-snappy/) which will be installed by Python automatically, but python-snappy also requires binary libraries for snappy compression.
46
44
 
47
- A pre-requisite for this package is [python-snappy](https://pypi.org/project/python-snappy/)
48
- which will be installed by Python automatically, but python-snappy also requires that the binary
49
- libraries for snappy compression are present.
50
-
51
- The most straightforward way to install the binary dependencies is to use
52
- [Homebrew](https://brew.sh) and source Python from Homebrew rather than from macOS as described
53
- in the [python-snappy github](https://github.com/andrix/python-snappy):
54
-
55
- For Intel Macs:
45
+ The most straightforward way to install the binary dependencies is to use [Homebrew](https://brew.sh) and source Python from Homebrew rather than from macOS as described in the [python-snappy github](https://github.com/andrix/python-snappy). Using [pipx](https://pipx.pypa.io/stable/installation/) for package management is also strongly recommended:
56
46
 
57
47
  ```bash
58
- brew install snappy python3
59
- CPPFLAGS="-I/usr/local/include -L/usr/local/lib" \
60
- python3 -m pip install python-snappy
61
- ```
62
-
63
- For Apple Silicon Macs:
64
-
65
- ```bash
66
- brew install snappy python3
67
- CPPFLAGS="-I/opt/homebrew/include -L/opt/homebrew/lib" \
68
- python3 -m pip install python-snappy
48
+ brew install snappy python3 pipx
49
+ pipx install numbers-parser
69
50
  ```
70
51
 
71
52
  For Linux (your package manager may be different):
72
53
 
73
54
  ```bash
74
55
  sudo apt-get -y install libsnappy-dev
56
+ python3 -m pip install numbers-parser
75
57
  ```
76
58
 
77
59
  On Windows, you will need to either arrange for snappy to be found for VSC++ or you can install python
@@ -80,6 +62,7 @@ for Windows on Arm. There appear to be no x86 pre-compiled packages for Windows.
80
62
 
81
63
  ```text
82
64
  pip install python_snappy-0.6.1-cp312-cp312-win_arm64.whl
65
+ python3 -m pip install numbers-parser
83
66
  ```
84
67
 
85
68
  ## Quick Start
@@ -11,38 +11,20 @@ with earlier versions of Python.
11
11
 
12
12
  ## Installation
13
13
 
14
- ```bash
15
- python3 -m pip install numbers-parser
16
- ```
14
+ A pre-requisite for this package is [python-snappy](https://pypi.org/project/python-snappy/) which will be installed by Python automatically, but python-snappy also requires binary libraries for snappy compression.
17
15
 
18
- A pre-requisite for this package is [python-snappy](https://pypi.org/project/python-snappy/)
19
- which will be installed by Python automatically, but python-snappy also requires that the binary
20
- libraries for snappy compression are present.
21
-
22
- The most straightforward way to install the binary dependencies is to use
23
- [Homebrew](https://brew.sh) and source Python from Homebrew rather than from macOS as described
24
- in the [python-snappy github](https://github.com/andrix/python-snappy):
25
-
26
- For Intel Macs:
16
+ The most straightforward way to install the binary dependencies is to use [Homebrew](https://brew.sh) and source Python from Homebrew rather than from macOS as described in the [python-snappy github](https://github.com/andrix/python-snappy). Using [pipx](https://pipx.pypa.io/stable/installation/) for package management is also strongly recommended:
27
17
 
28
18
  ```bash
29
- brew install snappy python3
30
- CPPFLAGS="-I/usr/local/include -L/usr/local/lib" \
31
- python3 -m pip install python-snappy
32
- ```
33
-
34
- For Apple Silicon Macs:
35
-
36
- ```bash
37
- brew install snappy python3
38
- CPPFLAGS="-I/opt/homebrew/include -L/opt/homebrew/lib" \
39
- python3 -m pip install python-snappy
19
+ brew install snappy python3 pipx
20
+ pipx install numbers-parser
40
21
  ```
41
22
 
42
23
  For Linux (your package manager may be different):
43
24
 
44
25
  ```bash
45
26
  sudo apt-get -y install libsnappy-dev
27
+ python3 -m pip install numbers-parser
46
28
  ```
47
29
 
48
30
  On Windows, you will need to either arrange for snappy to be found for VSC++ or you can install python
@@ -51,6 +33,7 @@ for Windows on Arm. There appear to be no x86 pre-compiled packages for Windows.
51
33
 
52
34
  ```text
53
35
  pip install python_snappy-0.6.1-cp312-cp312-win_arm64.whl
36
+ python3 -m pip install numbers-parser
54
37
  ```
55
38
 
56
39
  ## Quick Start
@@ -12,7 +12,7 @@ name = "numbers-parser"
12
12
  packages = [{include = "numbers_parser", from = "src"}]
13
13
  readme = "README.md"
14
14
  repository = "https://github.com/masaccio/numbers-parser"
15
- version = "4.14.3"
15
+ version = "4.14.4"
16
16
 
17
17
  [tool.poetry.scripts]
18
18
  cat-numbers = "numbers_parser._cat_numbers:main"
@@ -34,7 +34,6 @@ python-dateutil = "^2.9.0.post0"
34
34
  gprof2dot = "^2022.7.29"
35
35
  line-profiler = "^4.0.3"
36
36
  mock = ">=5.1.0"
37
- psutil = ">=5.9"
38
37
  pytest = ">=7.2.0"
39
38
  pytest-check = ">=1.0"
40
39
  pytest-console-scripts = "^1.3.1"
@@ -46,6 +45,7 @@ python-magic = ">=0.4"
46
45
  tqdm = ">=4.66"
47
46
  colorama = "^0.4.6"
48
47
  roman = "^4.2"
48
+ pympler = "^1.1"
49
49
 
50
50
  [tool.poetry.group.docs]
51
51
  optional = true
@@ -5,7 +5,15 @@ import sys
5
5
 
6
6
  from sigfig import round as sigfig
7
7
 
8
- from numbers_parser import Document, ErrorCell, FileError, FileFormatError, NumberCell, _get_version
8
+ from numbers_parser import (
9
+ Document,
10
+ ErrorCell,
11
+ FileError,
12
+ FileFormatError,
13
+ NumberCell,
14
+ UnsupportedError,
15
+ _get_version,
16
+ )
9
17
  from numbers_parser import __name__ as numbers_parser_name
10
18
  from numbers_parser.constants import MAX_SIGNIFICANT_DIGITS
11
19
  from numbers_parser.experimental import _enable_experimental_features
@@ -137,11 +145,12 @@ def main() -> None:
137
145
  print_table_names(filename)
138
146
  else:
139
147
  print_table(args, filename)
140
- except FileFormatError as e: # noqa: PERF203
141
- print(f"{filename}:", str(e), file=sys.stderr)
142
- sys.exit(1)
143
- except FileError as e:
144
- print(f"{filename}:", str(e), file=sys.stderr)
148
+ except (FileFormatError, FileError, UnsupportedError) as e: # noqa: PERF203
149
+ err_str = str(e)
150
+ if filename in err_str:
151
+ print(err_str, file=sys.stderr)
152
+ else:
153
+ print(f"{filename}: {err_str}", file=sys.stderr)
145
154
  sys.exit(1)
146
155
 
147
156
 
@@ -706,7 +706,10 @@ class _NumbersModel(Cacheable):
706
706
  @cache(num_args=2)
707
707
  def table_string(self, table_id: int, key: int) -> str:
708
708
  """Return the string associated with a string ID for a particular table."""
709
- return self._table_strings.lookup_value(table_id, key).string
709
+ try:
710
+ return self._table_strings.lookup_value(table_id, key).string
711
+ except KeyError:
712
+ return ""
710
713
 
711
714
  def init_table_strings(self, table_id: int) -> None:
712
715
  """Cache table strings reference and delete all existing keys/values."""