numbers-parser 4.4.7__tar.gz → 4.4.8__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 (58) hide show
  1. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/PKG-INFO +3 -2
  2. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/README.md +2 -0
  3. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/pyproject.toml +12 -6
  4. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/cell_storage.py +9 -2
  5. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/LICENSE.rst +0 -0
  6. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/__init__.py +0 -0
  7. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/_cat_numbers.py +0 -0
  8. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/_unpack_numbers.py +0 -0
  9. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/bullets.py +0 -0
  10. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/cell.py +0 -0
  11. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/constants.py +0 -0
  12. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/containers.py +0 -0
  13. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/data/empty.numbers +0 -0
  14. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/document.py +0 -0
  15. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/exceptions.py +0 -0
  16. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/experimental.py +0 -0
  17. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/file.py +0 -0
  18. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/formula.py +0 -0
  19. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TNArchives_pb2.py +0 -0
  20. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TNArchives_sos_pb2.py +0 -0
  21. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TNCommandArchives_pb2.py +0 -0
  22. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TNCommandArchives_sos_pb2.py +0 -0
  23. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSAArchives_pb2.py +0 -0
  24. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSAArchives_sos_pb2.py +0 -0
  25. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSACommandArchives_sos_pb2.py +0 -0
  26. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCEArchives_pb2.py +0 -0
  27. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCH3DArchives_pb2.py +0 -0
  28. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCHArchives_Common_pb2.py +0 -0
  29. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCHArchives_GEN_pb2.py +0 -0
  30. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCHArchives_pb2.py +0 -0
  31. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCHArchives_sos_pb2.py +0 -0
  32. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCHCommandArchives_pb2.py +0 -0
  33. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSCHPreUFFArchives_pb2.py +0 -0
  34. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSDArchives_pb2.py +0 -0
  35. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSDArchives_sos_pb2.py +0 -0
  36. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSDCommandArchives_pb2.py +0 -0
  37. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSKArchives_pb2.py +0 -0
  38. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSKArchives_sos_pb2.py +0 -0
  39. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSPArchiveMessages_pb2.py +0 -0
  40. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSPDatabaseMessages_pb2.py +0 -0
  41. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSPMessages_pb2.py +0 -0
  42. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSSArchives_pb2.py +0 -0
  43. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSSArchives_sos_pb2.py +0 -0
  44. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSTArchives_pb2.py +0 -0
  45. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSTArchives_sos_pb2.py +0 -0
  46. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSTCommandArchives_pb2.py +0 -0
  47. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSTStylePropertyArchiving_pb2.py +0 -0
  48. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSWPArchives_pb2.py +0 -0
  49. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSWPArchives_sos_pb2.py +0 -0
  50. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/TSWPCommandArchives_pb2.py +0 -0
  51. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/__init__.py +0 -0
  52. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/fontmap.py +0 -0
  53. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/generated/functionmap.py +0 -0
  54. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/iwafile.py +0 -0
  55. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/mapping.py +0 -0
  56. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/model.py +0 -0
  57. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/numbers_cache.py +0 -0
  58. {numbers_parser-4.4.7 → numbers_parser-4.4.8}/src/numbers_parser/numbers_uuid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: numbers-parser
3
- Version: 4.4.7
3
+ Version: 4.4.8
4
4
  Summary: Read and write Apple Numbers spreadsheets
5
5
  Home-page: https://github.com/masaccio/numbers-parser
6
6
  License: MIT
@@ -19,7 +19,6 @@ Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
19
19
  Requires-Dist: compact-json (>=1.1.3,<2.0.0)
20
20
  Requires-Dist: pendulum (>=3.0,<4.0)
21
21
  Requires-Dist: protobuf (>=4.21.1,<5.0.0)
22
- Requires-Dist: pylama (>=8.4.1,<9.0.0)
23
22
  Requires-Dist: python-snappy (>=0.6.1,<0.7.0)
24
23
  Requires-Dist: regex (>=2022.9.13,<2023.0.0)
25
24
  Requires-Dist: roman (>=3.3,<4.0)
@@ -284,6 +283,8 @@ with open (cell.style.bg_image.filename, "wb") as f:
284
283
  f.write(cell.style.bg_image.data)
285
284
  ```
286
285
 
286
+ Due to a limitation in Python's [ZipFile](https://docs.python.org/3/library/zipfile.html), Python versions older than 3.11 do not support image filenames with UTF-8 characters (see [issue 69](https://github.com/masaccio/numbers-parser/issues/69)). `cell.style.bg_image` returns `None` for such files and issues a `RuntimeWarning`.
287
+
287
288
  ### Borders
288
289
 
289
290
  `numbers-parser` supports reading and writing cell borders, though the interface for each differs. Individual cells can have each of their four borders tested, but when drawing new borders, these are set for the table to allow for drawing borders across multiple cells. Setting the border of merged cells is not possible unless the edge of the cells is at the end of the merged region.
@@ -253,6 +253,8 @@ with open (cell.style.bg_image.filename, "wb") as f:
253
253
  f.write(cell.style.bg_image.data)
254
254
  ```
255
255
 
256
+ Due to a limitation in Python's [ZipFile](https://docs.python.org/3/library/zipfile.html), Python versions older than 3.11 do not support image filenames with UTF-8 characters (see [issue 69](https://github.com/masaccio/numbers-parser/issues/69)). `cell.style.bg_image` returns `None` for such files and issues a `RuntimeWarning`.
257
+
256
258
  ### Borders
257
259
 
258
260
  `numbers-parser` supports reading and writing cell borders, though the interface for each differs. Individual cells can have each of their four borders tested, but when drawing new borders, these are set for the table to allow for drawing borders across multiple cells. Setting the border of merged cells is not possible unless the edge of the cells is at the end of the merged region.
@@ -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.4.7"
15
+ version = "4.4.8"
16
16
 
17
17
  [tool.poetry.scripts]
18
18
  cat-numbers = "numbers_parser._cat_numbers:main"
@@ -28,7 +28,6 @@ regex = "^2022.9.13"
28
28
  roman = "^3.3"
29
29
  sigfig = "^1.3.2"
30
30
  setuptools = "^69.0.3"
31
- pylama = "^8.4.1"
32
31
 
33
32
  [tool.poetry.group.dev.dependencies]
34
33
  black = {version = "^22.10.0", allow-prereleases = true}
@@ -42,10 +41,10 @@ pytest-console-scripts = "^1.3.1"
42
41
  pytest-cov = "^4.0.0"
43
42
  pytest-profiling = "^1.7.0"
44
43
  pytest-xdist = "^3.3.1"
45
- python-magic = "^0.4.27"
46
44
  ruff = "^0.0.292"
47
45
  termcolor = "^2.2.0"
48
46
  tox = "^4.11.4"
47
+ python-magic = "^0.4.27"
49
48
 
50
49
  [build-system]
51
50
  build-backend = "poetry.core.masonry.api"
@@ -69,9 +68,16 @@ legacy_tox_ini = """
69
68
  isolated_build = true
70
69
  envlist = py38, py39, py310, py311, py312
71
70
  [testenv]
72
- allowlist_externals = poetry
73
- commands_pre = poetry install --no-root --sync
74
- commands = poetry run -vvv pytest --import-mode importlib -n logical --no-cov
71
+ deps =
72
+ pytest
73
+ pytest-check
74
+ pytest-console-scripts
75
+ pytest-cov
76
+ pytest-xdist
77
+ python-magic
78
+ psutil
79
+ commands =
80
+ pytest tests/ --import-mode importlib -n logical --no-cov
75
81
  """
76
82
 
77
83
  [tool.isort]
@@ -291,8 +291,15 @@ class CellStorage(Cacheable):
291
291
  stored_filename = [x.file_name for x in datas if x.identifier == image_id][0]
292
292
  preferred_filename = [x.preferred_file_name for x in datas if x.identifier == image_id][0]
293
293
  all_paths = self.model.objects.file_store.keys()
294
- image_pathname = [x for x in all_paths if x == f"Data/{stored_filename}"][0]
295
- return (self.model.objects.file_store[image_pathname], preferred_filename)
294
+ image_pathnames = [x for x in all_paths if x == f"Data/{stored_filename}"]
295
+ if len(image_pathnames) == 0:
296
+ warn(
297
+ f"Cannot find file '{preferred_filename}' in Numbers archive",
298
+ RuntimeWarning,
299
+ stacklevel=3,
300
+ )
301
+ else:
302
+ return (self.model.objects.file_store[image_pathnames[0]], preferred_filename)
296
303
 
297
304
  def custom_format(self) -> str:
298
305
  if self.text_format_id is not None and self.type == CellType.TEXT: