numbers-parser 4.13.3__py3-none-any.whl → 4.14.2__py3-none-any.whl

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.
@@ -10,7 +10,8 @@ class Cacheable:
10
10
 
11
11
 
12
12
  def cache(num_args=1):
13
- """Decorator to memoize a class method using a precise subset of
13
+ """
14
+ Decorator to memoize a class method using a precise subset of
14
15
  its arguments.
15
16
  """
16
17
 
@@ -21,10 +22,9 @@ def cache(num_args=1):
21
22
  key = ".".join([str(args[x]) for x in range(num_args)])
22
23
  if key in self._cache[method]:
23
24
  return self._cache[method][key]
24
- else:
25
- value = func(self, *args, **kwargs)
26
- self._cache[method][key] = value
27
- return value
25
+ value = func(self, *args, **kwargs)
26
+ self._cache[method][key] = value
27
+ return value
28
28
 
29
29
  def inner_no_args(self):
30
30
  method = func.__name__
@@ -34,7 +34,6 @@ def cache(num_args=1):
34
34
 
35
35
  if num_args == 0:
36
36
  return inner_no_args
37
- else:
38
- return inner_multi_args
37
+ return inner_multi_args
39
38
 
40
39
  return cache_decorator
@@ -71,5 +71,8 @@ class NumbersUUID(UUID):
71
71
  uuid_w1 = (self.int >> 32) & 0xFFFFFFFF
72
72
  uuid_w0 = self.int & 0xFFFFFFFF
73
73
  return TSPMessages.CFUUIDArchive(
74
- uuid_w3=uuid_w3, uuid_w2=uuid_w2, uuid_w1=uuid_w1, uuid_w0=uuid_w0,
74
+ uuid_w3=uuid_w3,
75
+ uuid_w2=uuid_w2,
76
+ uuid_w1=uuid_w1,
77
+ uuid_w0=uuid_w0,
75
78
  )
@@ -0,0 +1,32 @@
1
+ def to_roman(value: int) -> str:
2
+ """Convert an integer to a Roman number in the available range of values."""
3
+ if value == 0:
4
+ return "N"
5
+
6
+ if value < 1 or value > 3999:
7
+ msg = "Number out of range for Roman numerals"
8
+ raise ValueError(msg)
9
+
10
+ roman_map = {
11
+ 1000: "M",
12
+ 900: "CM",
13
+ 500: "D",
14
+ 400: "CD",
15
+ 100: "C",
16
+ 90: "XC",
17
+ 50: "L",
18
+ 40: "XL",
19
+ 10: "X",
20
+ 9: "IX",
21
+ 5: "V",
22
+ 4: "IV",
23
+ 1: "I",
24
+ }
25
+
26
+ roman_num = ""
27
+ for int_value, roman_symbol in roman_map.items():
28
+ while value >= int_value:
29
+ roman_num += roman_symbol
30
+ value -= int_value
31
+
32
+ return roman_num
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: numbers-parser
3
- Version: 4.13.3
3
+ Version: 4.14.2
4
4
  Summary: Read and write Apple Numbers spreadsheets
5
5
  Home-page: https://github.com/masaccio/numbers-parser
6
6
  License: MIT
@@ -15,17 +15,14 @@ Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
18
- Requires-Dist: colorama (>=0.4.6,<0.5.0)
19
18
  Requires-Dist: compact-json (>=1.1.3,<2.0.0)
20
19
  Requires-Dist: enum-tools (>=0.11)
21
20
  Requires-Dist: importlib-resources (>=6.1)
22
- Requires-Dist: pendulum (>=3.0,<4.0)
23
21
  Requires-Dist: protobuf
22
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
24
23
  Requires-Dist: python-snappy (>=0.7,<0.8)
25
- Requires-Dist: regex (>2024.0)
26
- Requires-Dist: roman (>=4.0)
27
- Requires-Dist: setuptools (>=69.0.3)
28
- Requires-Dist: sigfig (>=1.3.2,<2.0.0)
24
+ Requires-Dist: setuptools (>=70.0.0)
25
+ Requires-Dist: sigfig (>=1.3.3,<2.0.0)
29
26
  Project-URL: Documentation, https://github.com/masaccio/numbers-parser/blob/main/README.md
30
27
  Project-URL: Repository, https://github.com/masaccio/numbers-parser
31
28
  Description-Content-Type: text/markdown
@@ -129,21 +126,19 @@ the column values.
129
126
 
130
127
  Cells are objects with a common base class of `Cell`. All cell types
131
128
  have a property `value` which returns the contents of the cell as a
132
- python datatype. `numbers-parser` uses
133
- [pendulum](https://pendulum.eustace.io) instead of python’s builtin
134
- types. Available cell types are:
135
-
136
- | Cell type | value type | Additional properties |
137
- |--------------|---------------------|--------------------------------------------------------------------------------------------------------|
138
- | NumberCell | `float` | |
139
- | TextCell | `str` | |
140
- | RichTextCell | `str` | See [Rich text](https://masaccio.github.io/numbers-parser/api/cells.html#numbers_parser.RichTextCell) |
141
- | EmptyCell | `None` | |
142
- | BoolCell | `bool` | |
143
- | DateCell | `pendulum.datetime` | |
144
- | DurationCell | `pendulum.duration` | |
145
- | ErrorCell | `None` | |
146
- | MergedCell | `None` | See [Merged cells](https://masaccio.github.io/numbers-parser/api/cells.html#numbers_parser.MergedCell) |
129
+ python datatype. Available cell types are:
130
+
131
+ | Cell type | value type | Additional properties |
132
+ |--------------|----------------------|--------------------------------------------------------------------------------------------------------|
133
+ | NumberCell | `float` | |
134
+ | TextCell | `str` | |
135
+ | RichTextCell | `str` | See [Rich text](https://masaccio.github.io/numbers-parser/api/cells.html#numbers_parser.RichTextCell) |
136
+ | EmptyCell | `None` | |
137
+ | BoolCell | `bool` | |
138
+ | DateCell | `datetime.datetime` | |
139
+ | DurationCell | `datetime.timedelta` | |
140
+ | ErrorCell | `None` | |
141
+ | MergedCell | `None` | See [Merged cells](https://masaccio.github.io/numbers-parser/api/cells.html#numbers_parser.MergedCell) |
147
142
 
148
143
  Cell references can be either zero-offset row/column integers or an
149
144
  Excel/Numbers A1 notation. Where cell values are not `None` the
@@ -506,6 +501,7 @@ The following limitations are expected to always remain:
506
501
  (see [issue 69](https://github.com/masaccio/numbers-parser/issues/69) for details).
507
502
  - Password-encrypted documents cannot be opened. You must first re-save without
508
503
  a password to read (see [issue 88](https://github.com/masaccio/numbers-parser/issues/88) for details).
504
+ A UnsupportedError exception is raised when such documents are opened.
509
505
 
510
506
  ## License
511
507
 
@@ -1,17 +1,17 @@
1
- numbers_parser/__init__.py,sha256=1guReSiMinXSKkip4UoC-a1X9OAgdiYTTDiZ03FDmqE,1411
2
- numbers_parser/_cat_numbers.py,sha256=3tLvBQEagGcNL26XxfqguNim0JDtTNgEbiGKpLjBxLI,4623
3
- numbers_parser/_csv2numbers.py,sha256=MZ95S8EpKYEbaa2CYa7pm0OiyLTBtYwyBjJnnDf5pzk,14676
4
- numbers_parser/_unpack_numbers.py,sha256=7B6AJ2GB-MzFdrKal_GMMgUWzVUZ5h9PsPJecGk2ppY,7032
5
- numbers_parser/bullets.py,sha256=OnVVMPjhTDrC-ncw52Gb00UEXNmn2Rvd3xi7lfqW3hk,2616
6
- numbers_parser/cell.py,sha256=hRWCM12awYjAJViRiFVD_o7hkVafUw5t7nSNfVTmO1Y,76413
7
- numbers_parser/constants.py,sha256=gdBKl2-UKjkXoKXOaiTt-pmFMVR-u212cruEvJCWQCM,9936
8
- numbers_parser/containers.py,sha256=j0FhaXPUG5YSRK5_3WIxXQOeckHVu24KMlYetWIZ_Xg,4882
1
+ numbers_parser/__init__.py,sha256=a5CkU3_Fn41rHS0DN8u8se0iz2JhvmggRHmSh-akn5o,1428
2
+ numbers_parser/_cat_numbers.py,sha256=ISBoHUvQv-_CG_yyx2IHvdj2OG3l0ejl2qk2ZV3y9Zk,4737
3
+ numbers_parser/_csv2numbers.py,sha256=R_13gVe_RfLWLOv-DzVJ60xkqhdOA-RKna-Ce5ud4V8,14624
4
+ numbers_parser/_unpack_numbers.py,sha256=KvY04wqTH6JPwZWHAW1VlcY1HZQvXq-U5THEG7Au0mY,7045
5
+ numbers_parser/bullets.py,sha256=CKMjSYRzLM123wQNDG8B5vfodRLjW5UOc2HDPlvfNr4,2637
6
+ numbers_parser/cell.py,sha256=lx3RlIh6UohlhmnyoyHWf7Tq6XNXvF--C52sWHDBb3A,76583
7
+ numbers_parser/constants.py,sha256=JyTKQCnmEP6eNUQpk7eWQYlygTgUhVD7G6Std6426xs,10322
8
+ numbers_parser/containers.py,sha256=SBD99t0ABHraGA8729jPXy5VcRHT21U_WM3ijOIiwd4,4886
9
9
  numbers_parser/currencies.py,sha256=8k4a3WKmDoHeurkDICymHX13N7ManHSTaka_JNXCZYA,3767
10
10
  numbers_parser/data/empty.numbers,sha256=zQjVqcNGN-xNZh51_eAxD8Zxmxh88Sd7kpf4JygUA_E,90601
11
- numbers_parser/document.py,sha256=duj6G2lFtVOEzY3uuR865KNfw0kWswtvLSXh604Wu6Q,59182
12
- numbers_parser/exceptions.py,sha256=0Jnmw06YlGvYcvzqc2wiR2Y4eAgvFJLpf0tFrsmlyPU,607
11
+ numbers_parser/document.py,sha256=j1G9xH9Z7UndsQBSBRCUMLHtc4I77X6rJVOcuV4IZvQ,59094
12
+ numbers_parser/exceptions.py,sha256=51yJTYm0X2am4YK-F6sVYOHmlYrBex_e4lYtbmiQX3I,611
13
13
  numbers_parser/experimental.py,sha256=WARjTa-2ePb8Ga8Q6oDP6EJCs12ofLRF2YpwzUu66ZI,374
14
- numbers_parser/formula.py,sha256=4KQIhS6NMOdvz9rLsaVqXGnUDA4QCDpH8Lrz516PoU0,10574
14
+ numbers_parser/formula.py,sha256=yRGSrd0Jrv_pgwtfokYRI2rZwUyTMYIV_Icm_8dj_P8,10759
15
15
  numbers_parser/generated/TNArchives_pb2.py,sha256=Tq1UC2Ml1dzAQFIrz3Om-sGI903FBZmlN3GgYQNt4a8,15931
16
16
  numbers_parser/generated/TNArchives_sos_pb2.py,sha256=AYI1X5t5Gb4l941jXlHEY0v97ToIze0bSYBR7KQmS0A,1215
17
17
  numbers_parser/generated/TNCommandArchives_pb2.py,sha256=my5CgnWmqHa5p0NFf-aUC8aqEPz3-pXXlyz4UJmZKZE,18378
@@ -32,11 +32,11 @@ numbers_parser/generated/TSCKArchives_sos_pb2.py,sha256=2zK3-z-pe1xrY1qut28VQjHR
32
32
  numbers_parser/generated/TSDArchives_pb2.py,sha256=G5vUxZbx66eTdNgxbagUQmo6N7pvfoXwU07jBgv90cU,39093
33
33
  numbers_parser/generated/TSDArchives_sos_pb2.py,sha256=Q2MYAXjAW-PGE3FY8kFH89rry9PPUQv7DS956wymFwo,6022
34
34
  numbers_parser/generated/TSDCommandArchives_pb2.py,sha256=zMHr3_Koa9vGmkl2PMTnMptUCY2iOe1zJOWN6re2jQs,29291
35
- numbers_parser/generated/TSKArchives_pb2.py,sha256=zh8bXgKdaHBNVHQ7rKf5PpV0vOmQG6HU9cY3BkEuSPk,26162
35
+ numbers_parser/generated/TSKArchives_pb2.py,sha256=D5EaP8aTC2VstJo7XfsGQ1VNzPPDRe34FXknSR5yUb8,26357
36
36
  numbers_parser/generated/TSPArchiveMessages_pb2.py,sha256=5Th08Q19AOsMEMggvM9fda1StJjV8LTDDI5x7pY6aM8,17950
37
37
  numbers_parser/generated/TSPDatabaseMessages_pb2.py,sha256=_jvq890xBQpSDcYOKgII30XlxukPBRZBu0kkRpbJ-z0,2024
38
38
  numbers_parser/generated/TSPMessages_pb2.py,sha256=LBHRhNnQdDu226sh3gK_AOjbO3LDkGCWpVi1wzf7emA,13032
39
- numbers_parser/generated/TSSArchives_pb2.py,sha256=7HGR32kgG6arl4uu08Tuop7brOFGgcRJIc0WKLbqCHI,9980
39
+ numbers_parser/generated/TSSArchives_pb2.py,sha256=DNqQYFogujTOLIIW4B4_tTTLdGz-Y-kmkxQOhWLmMmg,10067
40
40
  numbers_parser/generated/TSSArchives_sos_pb2.py,sha256=FAhtvQ9TBg18AcIk4HwGCreNWlEu3k_kK_9jRVsh7FM,2842
41
41
  numbers_parser/generated/TSTArchives_pb2.py,sha256=PRNF8aceuLyEYmJunUG-R8PIa4ruWnKZThOy11o59Z4,88236
42
42
  numbers_parser/generated/TSTArchives_sos_pb2.py,sha256=JxiMXSdTH5VJo-c5zDdD_tzGQCTrUDE2K0YP_x-zh84,12597
@@ -44,18 +44,19 @@ numbers_parser/generated/TSTCommandArchives_pb2.py,sha256=LEyGJBOLdhxVarepxGfHpr
44
44
  numbers_parser/generated/TSTStylePropertyArchiving_pb2.py,sha256=0ADsIwTk4GcTeQJRhYxEEjsD_SuLEOSUaGYdHnsO9CA,12415
45
45
  numbers_parser/generated/TSWPArchives_pb2.py,sha256=6bGFEo-lABOA8l1PbDG96GVd1vmB9PMaYFiqAiDsHdk,55432
46
46
  numbers_parser/generated/TSWPArchives_sos_pb2.py,sha256=poJ49WA4JjZsHpmROyv4jFl2xGpJy6pTRCaJQZ5ZGr0,29114
47
- numbers_parser/generated/TSWPCommandArchives_pb2.py,sha256=JmtH0x8SOh7PdhNtN2LfpGhmxJukzhXtJIIUACp-z2Y,25581
47
+ numbers_parser/generated/TSWPCommandArchives_pb2.py,sha256=-wQpDqveA64l_V-0jXyMkycrE_L7e9zXYzw9JfirsbE,25595
48
48
  numbers_parser/generated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- numbers_parser/generated/fontmap.py,sha256=tsL2y56Yyu3R6BSqco2_fxtc-GOKz21lmundPmodFrY,23861
49
+ numbers_parser/generated/fontmap.py,sha256=ORrf3PtxG_gfT1t8R77yXjXBlIefRjvUCBUuG5RCTh8,23806
50
50
  numbers_parser/generated/functionmap.py,sha256=9OLSNlOVWxRO9xS8QZmK1HURpc11c1B5nIAAecUwA98,6082
51
- numbers_parser/generated/mapping.py,sha256=xt1NaZtTse1OX3vBizENKkWl-0OgNb4SMJ0Uo-rRz0U,32342
52
- numbers_parser/iwafile.py,sha256=4_MMtHdWMAfIzwODyaM7DsWKh-8yJ2blTfbues8sbdI,11915
53
- numbers_parser/iwork.py,sha256=CXXM797MqcIokovrIBAx--LNG7tIVpKqeBwR4V2OrzQ,9141
54
- numbers_parser/model.py,sha256=hrbrZ_F8s09eC0iOM1HN4Owe610wr0c3xyo9PaGJQak,106923
55
- numbers_parser/numbers_cache.py,sha256=1ghEBghQAYFpPiEeOtb74i016mXc039v1pOubbqvaLs,1141
56
- numbers_parser/numbers_uuid.py,sha256=q0IbHFKuBXC7MnZN3g55dgCVKOLD-4SO4MdXeN6dt0g,2699
57
- numbers_parser-4.13.3.dist-info/LICENSE.rst,sha256=8vTa1-5KSdHrTpU9rlheO5005EWReEPMpjV7BjSaMc4,1050
58
- numbers_parser-4.13.3.dist-info/METADATA,sha256=2i8K8smTfUhfqlU9gfXfiBkGqyaJuVSd-MOQpavg3a0,23102
59
- numbers_parser-4.13.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
60
- numbers_parser-4.13.3.dist-info/entry_points.txt,sha256=8VSxWAamOAvVcKS6iza4BQtYe03nga552HMLcVY-MBc,160
61
- numbers_parser-4.13.3.dist-info/RECORD,,
51
+ numbers_parser/generated/mapping.py,sha256=bJS_CK3AXXMFUSoSWbeDt6VTbCqIfX9OnTKLr0qDezA,32288
52
+ numbers_parser/iwafile.py,sha256=nVwCcXvx8TgX-DkYqSbcJQzKyXR1Z8_y547XeY7Y-fs,11948
53
+ numbers_parser/iwork.py,sha256=Qx1Izf9cfQKnLTDiJyeCOsmL9PSsfV-XOf0Kkb2oPMo,9396
54
+ numbers_parser/model.py,sha256=45twYfR1xtQbVkvcGO4c-jurS5ZqKPGM-ltVp1uJJhs,107011
55
+ numbers_parser/numbers_cache.py,sha256=wJHEGQfCbRvX94xL2Uehlz5UjTr8n4nBgutCw_4Dbis,1098
56
+ numbers_parser/numbers_uuid.py,sha256=d5-Hwu-lWbBPuIP6vybNBuVzzja5HeuKsgK_PvMSw9c,2735
57
+ numbers_parser/roman.py,sha256=CErv1uRp8eE9Bsuh_QsrBAzKFsfHSEs8CHpfFW0Gd70,725
58
+ numbers_parser-4.14.2.dist-info/LICENSE.rst,sha256=8vTa1-5KSdHrTpU9rlheO5005EWReEPMpjV7BjSaMc4,1050
59
+ numbers_parser-4.14.2.dist-info/METADATA,sha256=Wq_ehqr9iqT9Kdv6BTnpjsmXUCJmU3v7UUIejTcbp3I,23003
60
+ numbers_parser-4.14.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
61
+ numbers_parser-4.14.2.dist-info/entry_points.txt,sha256=8VSxWAamOAvVcKS6iza4BQtYe03nga552HMLcVY-MBc,160
62
+ numbers_parser-4.14.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.8.1
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any