wwvb 6.0.0__py3-none-any.whl → 7.0.0__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.
wwvb/__init__.py CHANGED
@@ -19,23 +19,21 @@ import datetime
19
19
  import enum
20
20
  import json
21
21
  import warnings
22
- from typing import TYPE_CHECKING, Any, NamedTuple, TextIO, TypeVar
22
+ from dataclasses import dataclass
23
+ from typing import ClassVar
23
24
 
24
25
  from . import iersdata
25
26
  from .tz import Mountain
26
27
 
28
+ TYPE_CHECKING = False
27
29
  if TYPE_CHECKING:
28
30
  from collections.abc import Generator
31
+ from typing import Any, Self, TextIO, TypeVar
32
+
33
+ T = TypeVar("T")
29
34
 
30
35
  HOUR = datetime.timedelta(seconds=3600)
31
36
  SECOND = datetime.timedelta(seconds=1)
32
- T = TypeVar("T")
33
-
34
-
35
- def _removeprefix(s: str, p: str) -> str:
36
- if s.startswith(p):
37
- return s[len(p) :]
38
- return s
39
37
 
40
38
 
41
39
  def _date(dt: datetime.date) -> datetime.date:
@@ -339,8 +337,13 @@ class DstStatus(enum.IntEnum):
339
337
  """DST in effect all day today"""
340
338
 
341
339
 
342
- class _WWVBMinute(NamedTuple):
343
- """(implementation detail)"""
340
+ @dataclass(frozen=True)
341
+ class WWVBMinute:
342
+ """Uniquely identifies a minute of time in the WWVB system.
343
+
344
+ To use ``ut1`` and ``ls`` information from IERS, create a `WWVBMinuteIERS`
345
+ object instead.
346
+ """
344
347
 
345
348
  year: int
346
349
  """2-digit year within the WWVB epoch"""
@@ -351,7 +354,7 @@ class _WWVBMinute(NamedTuple):
351
354
  hour: int
352
355
  """UTC hour of day"""
353
356
 
354
- min: int
357
+ minute: int
355
358
  """Minute of hour"""
356
359
 
357
360
  dst: DstStatus
@@ -366,18 +369,10 @@ class _WWVBMinute(NamedTuple):
366
369
  ly: bool
367
370
  """Leap year flag"""
368
371
 
372
+ epoch: ClassVar[int] = 1970
369
373
 
370
- class WWVBMinute(_WWVBMinute):
371
- """Uniquely identifies a minute of time in the WWVB system.
372
-
373
- To use ``ut1`` and ``ls`` information from IERS, create a `WWVBMinuteIERS`
374
- object instead.
375
- """
376
-
377
- epoch: int = 1970
378
-
379
- def __new__( # noqa: PYI034
380
- cls,
374
+ def __init__(
375
+ self,
381
376
  year: int,
382
377
  days: int,
383
378
  hour: int,
@@ -387,7 +382,7 @@ class WWVBMinute(_WWVBMinute):
387
382
  *,
388
383
  ls: bool | None = None,
389
384
  ly: bool | None = None,
390
- ) -> WWVBMinute:
385
+ ) -> None:
391
386
  """Construct a WWVBMinute
392
387
 
393
388
  :param year: The 2- or 4-digit year. This parameter is converted by the `full_year` method.
@@ -401,15 +396,23 @@ class WWVBMinute(_WWVBMinute):
401
396
  :param ls: Leap second warning flag
402
397
  :param ly: Leap year flag
403
398
  """
404
- dst = cls.get_dst(year, days) if dst is None else DstStatus(dst)
399
+ dst = self.get_dst(year, days) if dst is None else DstStatus(dst)
405
400
  if ut1 is None and ls is None:
406
- ut1, ls = cls._get_dut1_info(year, days)
401
+ ut1, ls = self._get_dut1_info(year, days)
407
402
  elif ut1 is None or ls is None:
408
403
  raise ValueError("sepecify both ut1 and ls or neither one")
409
- year = cls.full_year(year)
404
+ year = self.full_year(year)
410
405
  if ly is None:
411
406
  ly = isly(year)
412
- return _WWVBMinute.__new__(cls, year, days, hour, minute, dst, ut1, ls, ly)
407
+
408
+ super().__setattr__("year", year)
409
+ super().__setattr__("days", days)
410
+ super().__setattr__("hour", hour)
411
+ super().__setattr__("minute", minute)
412
+ super().__setattr__("dst", dst)
413
+ super().__setattr__("ut1", ut1)
414
+ super().__setattr__("ls", ls)
415
+ super().__setattr__("ly", ly)
413
416
 
414
417
  @classmethod
415
418
  def full_year(cls, year: int) -> int:
@@ -443,7 +446,7 @@ class WWVBMinute(_WWVBMinute):
443
446
  """Implement str()"""
444
447
  return (
445
448
  f"year={self.year:4d} days={self.days:03d} hour={self.hour:02d} "
446
- f"min={self.min:02d} dst={self.dst} ut1={self.ut1} ly={int(self.ly)} "
449
+ f"min={self.minute:02d} dst={self.dst} ut1={self.ut1} ly={int(self.ly)} "
447
450
  f"ls={int(self.ls)}"
448
451
  )
449
452
 
@@ -453,7 +456,7 @@ class WWVBMinute(_WWVBMinute):
453
456
  The returned object has ``tzinfo=datetime.timezone.utc``.
454
457
  """
455
458
  d = datetime.datetime(self.year, 1, 1, tzinfo=datetime.timezone.utc)
456
- d += datetime.timedelta(self.days - 1, self.hour * 3600 + self.min * 60)
459
+ d += datetime.timedelta(self.days - 1, self.hour * 3600 + self.minute * 60)
457
460
  return d
458
461
 
459
462
  as_datetime = as_datetime_utc
@@ -507,7 +510,7 @@ class WWVBMinute(_WWVBMinute):
507
510
  return 60
508
511
  if not self._is_end_of_month():
509
512
  return 60
510
- if self.hour != 23 or self.min != 59:
513
+ if self.hour != 23 or self.minute != 59:
511
514
  return 60
512
515
  if self.ut1 > 0:
513
516
  return 59
@@ -551,7 +554,7 @@ class WWVBMinute(_WWVBMinute):
551
554
  t.am[60] = AmplitudeModulation.MARK
552
555
  for i in [4, 10, 11, 14, 20, 21, 24, 34, 35, 44, 54]:
553
556
  t.am[i] = AmplitudeModulation.ZERO
554
- t._put_am_bcd(self.min, 1, 2, 3, 5, 6, 7, 8)
557
+ t._put_am_bcd(self.minute, 1, 2, 3, 5, 6, 7, 8)
555
558
  t._put_am_bcd(self.hour, 12, 13, 15, 16, 17, 18)
556
559
  t._put_am_bcd(self.days, 22, 23, 25, 26, 27, 28, 30, 31, 32, 33)
557
560
  ut1_sign = self.ut1 >= 0
@@ -565,14 +568,14 @@ class WWVBMinute(_WWVBMinute):
565
568
 
566
569
  def _fill_pm_timecode_extended(self, t: WWVBTimecode) -> None:
567
570
  """During minutes 10..15 and 40..45, the amplitude signal holds 'extended information'"""
568
- assert 10 <= self.min < 16 or 40 <= self.min < 46
569
- minno = self.min % 10
571
+ assert 10 <= self.minute < 16 or 40 <= self.minute < 46
572
+ minno = self.minute % 10
570
573
  assert minno < 6
571
574
 
572
575
  dst = self.dst
573
576
  # Note that these are 1 different than Table 11
574
577
  # because our LFSR sequence is zero-based
575
- seqno = (self.min // 30) * 2
578
+ seqno = (self.minute // 30) * 2
576
579
  if dst == 0:
577
580
  pass
578
581
  elif dst == 3:
@@ -655,17 +658,17 @@ class WWVBMinute(_WWVBMinute):
655
658
 
656
659
  def _fill_pm_timecode(self, t: WWVBTimecode) -> None:
657
660
  """Fill the phase portion of a timecode object"""
658
- if 10 <= self.min < 16 or 40 <= self.min < 46:
661
+ if 10 <= self.minute < 16 or 40 <= self.minute < 46:
659
662
  self._fill_pm_timecode_extended(t)
660
663
  else:
661
664
  self._fill_pm_timecode_regular(t)
662
665
 
663
- def next_minute(self, *, newut1: int | None = None, newls: bool | None = None) -> WWVBMinute:
666
+ def next_minute(self, *, newut1: int | None = None, newls: bool | None = None) -> Self:
664
667
  """Return an object representing the next minute"""
665
668
  d = self.as_datetime() + datetime.timedelta(minutes=1)
666
669
  return self.from_datetime(d, newut1=newut1, newls=newls, old_time=self)
667
670
 
668
- def previous_minute(self, *, newut1: int | None = None, newls: bool | None = None) -> WWVBMinute:
671
+ def previous_minute(self, *, newut1: int | None = None, newls: bool | None = None) -> Self:
669
672
  """Return an object representing the previous minute"""
670
673
  d = self.as_datetime() - datetime.timedelta(minutes=1)
671
674
  return self.from_datetime(d, newut1=newut1, newls=newls, old_time=self)
@@ -684,9 +687,9 @@ class WWVBMinute(_WWVBMinute):
684
687
  return 0, False
685
688
 
686
689
  @classmethod
687
- def fromstring(cls, s: str) -> WWVBMinute:
690
+ def fromstring(cls, s: str) -> Self:
688
691
  """Construct a WWVBMinute from a string representation created by print_timecodes"""
689
- s = _removeprefix(s, "WWVB timecode: ")
692
+ s = s.removeprefix("WWVB timecode: ")
690
693
  d: dict[str, int] = {}
691
694
  for part in s.split():
692
695
  k, v = part.split("=")
@@ -700,7 +703,7 @@ class WWVBMinute(_WWVBMinute):
700
703
  dst = d.pop("dst", None)
701
704
  ut1 = d.pop("ut1", None)
702
705
  ls = d.pop("ls", None)
703
- d.pop("ly", None)
706
+ d.pop("ly", None) # Always use calculated ly flag
704
707
  if d:
705
708
  raise ValueError(f"Invalid options: {d}")
706
709
  return cls(year, days, hour, minute, dst, ut1=ut1, ls=None if ls is None else bool(ls))
@@ -713,7 +716,7 @@ class WWVBMinute(_WWVBMinute):
713
716
  newut1: int | None = None,
714
717
  newls: bool | None = None,
715
718
  old_time: WWVBMinute | None = None,
716
- ) -> WWVBMinute:
719
+ ) -> Self:
717
720
  """Construct a WWVBMinute from a datetime, possibly specifying ut1/ls data or propagating it from an old time"""
718
721
  u = d.utctimetuple()
719
722
  if newls is None and newut1 is None:
@@ -721,7 +724,7 @@ class WWVBMinute(_WWVBMinute):
721
724
  return cls(u.tm_year, u.tm_yday, u.tm_hour, u.tm_min, ut1=newut1, ls=newls)
722
725
 
723
726
  @classmethod
724
- def from_timecode_am(cls, t: WWVBTimecode) -> WWVBMinute | None: # noqa: PLR0912
727
+ def from_timecode_am(cls, t: WWVBTimecode) -> Self | None: # noqa: PLR0912
725
728
  """Construct a WWVBMinute from a WWVBTimecode"""
726
729
  for i in (0, 9, 19, 29, 39, 49, 59):
727
730
  if t.am[i] != AmplitudeModulation.MARK:
@@ -764,6 +767,15 @@ class WWVBMinute(_WWVBMinute):
764
767
  return None
765
768
  return cls(year, days, hour, minute, dst, ut1, ls=ls, ly=ly)
766
769
 
770
+ @property
771
+ def min(self) -> int:
772
+ """Deprecated alias for `WWVBMinute.minute`
773
+
774
+ Update your code to use the `minute` property instead of the `min` property.
775
+ """
776
+ warnings.warn("WWVBMinute.min property is deprecated", category=DeprecationWarning, stacklevel=1)
777
+ return self.minute
778
+
767
779
 
768
780
  class WWVBMinuteIERS(WWVBMinute):
769
781
  """A WWVBMinute that uses a database of DUT1 information"""
@@ -934,7 +946,7 @@ def print_timecodes(
934
946
  print(file=file)
935
947
  print(f"WWVB timecode: {w!s}{channel_text}{style_text}", file=file)
936
948
  first = False
937
- pfx = f"{w.year:04d}-{w.days:03d} {w.hour:02d}:{w.min:02d} "
949
+ pfx = f"{w.year:04d}-{w.days:03d} {w.hour:02d}:{w.minute:02d} "
938
950
  tc = w.as_timecode()
939
951
  if len(style_chars) == 6:
940
952
  print(f"{pfx} {tc.to_both_string(style_chars)}", file=file)
@@ -976,7 +988,7 @@ def print_timecodes_json(
976
988
  "year": w.year,
977
989
  "days": w.days,
978
990
  "hour": w.hour,
979
- "minute": w.min,
991
+ "minute": w.minute,
980
992
  }
981
993
 
982
994
  tc = w.as_timecode()
wwvb/__version__.py CHANGED
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '6.0.0'
21
- __version_tuple__ = version_tuple = (6, 0, 0)
31
+ __version__ = version = '7.0.0'
32
+ __version_tuple__ = version_tuple = (7, 0, 0)
33
+
34
+ __commit_id__ = commit_id = None
wwvb/iersdata.json CHANGED
@@ -1 +1 @@
1
- {"START": "1972-01-01", "OFFSETS_GZ": "H4sIAJF3PWgC/+2aa3LDMAiEL5uHLDuxnN5/pn/aTmfSSiAWhGR9J8gsywJylqVHPtqxZuH/7leeI0fKsGd5EngQ2WisJWKegrThDa6aJFnL0u4wYZkCE2UmSF0U+13vCveStC6JTfQyW3O86HLJf0SvDgy5u4FCI+WVKRuy0KMjJeXoULIvMDmEWgeRxAJtwXquPCIBqbLh/gbfv0mcxk3mHV9tYiATZP8W/zgw2wd5LpJnY+WErI8abJ3opaIW6592+YMbjSsNWQFlNVVtuhjhtQzSUh4MEpOdDrSW6qsUv+O+Dt+XkIONSrUwvWmTsmq5LO9xsZ+EgcDK+MIESDaYmxSxGlgbGOFjBXMjbV7lc6zlmQ0i48oH5P4+vK7i/AHc7tfTXDtffqFi3m6WhApPSTyDvArU5vUDhm7YaNQYGASVbbwLUBtI2PrhSiZNbvCRrtGUGu0GbjDhJ3aLCx5dQFjt0LFovmWB96e6tktqMenoULXajVS3asBibP3kYXrpmZxnsS2Yf2xRPrHbvQ2D9wjfL4C6b4PWV4otW0vWUYkeWE5M8M594oLbxP77xcl4NuBkG0dfM3xOUf/T0GF+ur+J5pljcODEUZkXg6vIdLYy7g3oZU3bPNDnc8qwGdJZMmAurUsRj6tOo95zP6fb9YPWp5OuZ5X7q2DrmsG/VCyTyaREnDRhnUxOzfzzh3/NRuYTMxwhU6lNAAA="}
1
+ {"START": "1972-01-01", "OFFSETS_GZ": "H4sIAOvijWgC/+2aa3LDMAiEL5uHLTuxnN5/pn/aTmfSSiAWhGy+E2SWZQE58zwiH/1YivB/96vMXiIX2Io8CTyIrDSWGqlMRdrpDa6aJFnr0m4wYZkCE2UmSF0V+13vBveStK6JTfQyW3O86HLJf0RvDgy5u4FCI+WVKTsVoUdHzsrRoWRfYHIItZ5EEgu0Beu58EgEpMpO9zf4/s3iNO4y7/hqEwOZIPu3+PuO2T7Ic5E8GxsnZHvUYOtELxW1WP+0yx/caFxpyAooq6lq06UEr+UkLeXOIDPZ6EBrqb5K8Tvu6/B9CdnZqFQL05s2KauWy/IeF/tJGAisjK9MgGyDuUkRq4G1gRE+VjA30uZNPsdantkgMq58QO4fw+sqzj+A2/16mmvnyy9UzDvMktDgKYlnkFeB2rx+wNANG40aA4OgsY03AWoDCVs/XMmkyQ0+0jWaUqPdwA0m/MRuccGjCwirHToWzbcs8P7U1nZZLSYdHapWu5HqVg1YjK2fPEwvPZPzLPUF848tyid2u7dh8B7h+wVQ923Q+kqxZe3JclSSB+YTM3nnHrjgFth/vzgZzw6cbOMYa4bHFPU/DR3mp/ubKM4cgwMnHZW4GFxFprOVcevAKGva6oExn1MOmyGDJQPm0rpU8bjqdOo993O6Xz9ofToZela5vwrWoTn4l4o5CIIaKejCEgSnJv784V+zUyyvbb/gE8h8bi3oTQAA"}
wwvb/updateiers.py CHANGED
@@ -47,6 +47,7 @@ def update_iersdata( # noqa: PLR0915
47
47
  """Update iersdata.py"""
48
48
  offsets: list[int] = []
49
49
  iersdata_text = _get_text(IERS_URL)
50
+ table_start: datetime.date | None = None
50
51
  for r in csv.DictReader(io.StringIO(iersdata_text), delimiter=";"):
51
52
  jd = float(r["MJD"])
52
53
  offs_str = r["UT1-UTC"]
@@ -79,6 +80,8 @@ def update_iersdata( # noqa: PLR0915
79
80
 
80
81
  offsets.append(offs)
81
82
 
83
+ assert table_start is not None
84
+
82
85
  wwvb_text = _get_text(NIST_URL)
83
86
  wwvb_data = bs4.BeautifulSoup(wwvb_text, features="html.parser")
84
87
  wwvb_dut1_table = wwvb_data.findAll("table")[2]
@@ -88,6 +91,7 @@ def update_iersdata( # noqa: PLR0915
88
91
  wwvb_data_stamp = datetime.datetime.fromisoformat(meta.attrs["content"]).replace(tzinfo=None).date()
89
92
 
90
93
  def patch(patch_start: datetime.date, patch_end: datetime.date, val: int) -> None:
94
+ assert table_start is not None
91
95
  off_start = (patch_start - table_start).days
92
96
  off_end = (patch_end - table_start).days
93
97
  offsets[off_start:off_end] = [val] * (off_end - off_start)
wwvb/wwvbtk.py CHANGED
@@ -69,7 +69,7 @@ def main(colors: list[str], size: int, min_size: int | None) -> None: # noqa: P
69
69
  def deadline_ms(deadline: datetime.datetime) -> int:
70
70
  """Compute the number of ms until a deadline"""
71
71
  now = datetime.datetime.now(datetime.timezone.utc)
72
- return int(max(0, (deadline - now).total_seconds()) * 1000)
72
+ return int(max(0.0, (deadline - now).total_seconds()) * 1000)
73
73
 
74
74
  def wwvbtick() -> Generator[tuple[datetime.datetime, wwvb.AmplitudeModulation]]:
75
75
  """Yield consecutive values of the WWVB amplitude signal, going from minute to minute"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wwvb
3
- Version: 6.0.0
3
+ Version: 7.0.0
4
4
  Summary: Generate WWVB timecodes for any desired time
5
5
  Author-email: Jeff Epler <jepler@gmail.com>
6
6
  Project-URL: Source, https://github.com/jepler/wwvbpy
@@ -0,0 +1,18 @@
1
+ uwwvb.py,sha256=Ybf8DeOZ5VjfqRGtO90_oEEW6HhGaztIVlh4L423MdQ,5801
2
+ wwvb/__init__.py,sha256=tSEjmfqKR0KYdN7tUySGcXpK_W8rzQTtEXG7P_0WPMA,33432
3
+ wwvb/__version__.py,sha256=lB_6pZBic6H_5wY9p7_cc7miE65gtXFl65pORFxuiX0,704
4
+ wwvb/decode.py,sha256=llTLKBW49nl6COheM90NsyMnTNeVApl2oeCHtl6Tf3w,2759
5
+ wwvb/dut1table.py,sha256=HVX1338RlQzAQ-bsMPEdmCqoyIxSWoJSoRu1YGyaJO4,875
6
+ wwvb/gen.py,sha256=_fpUypu_2nZfG5Vjnya0B8C26nk1WOhnLMTCXwskAHs,3720
7
+ wwvb/iersdata.json,sha256=fEElNoF4UJMySnUvNXFlI9TT9k67jdrrGKzO6A1F2rQ,769
8
+ wwvb/iersdata.json.license,sha256=1k5fhRCuOn0yXbwHtB21G0Nntnf0qMxstflMHuK3-Js,71
9
+ wwvb/iersdata.py,sha256=nMqA1xcE-iPtmi9m5qcTIJwfsCxZwoNsxHfM-wvooMQ,1210
10
+ wwvb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ wwvb/tz.py,sha256=nlxKnzFPmqLLtC-cEDhWaJ3v3GCSPfqzVtUMf8EEdZ0,248
12
+ wwvb/updateiers.py,sha256=q3QY--fj06HJ9wCRCmVQK7pCpdXhCudP8BdUPG5WWOA,5781
13
+ wwvb/wwvbtk.py,sha256=cdLwWfulywHmGhaiK6L-m_QQAdpfDfyDFagbe_Y8Rgk,5186
14
+ wwvb-7.0.0.dist-info/METADATA,sha256=6oqjB6nkDQAYeoe8hGbSq5jk9Cj7q9swibX6jubJ-b4,10201
15
+ wwvb-7.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
+ wwvb-7.0.0.dist-info/entry_points.txt,sha256=KSevvHWLEKxOxUQ-L-OQidD4Sj2BPEfhZ2TQhOgyys4,179
17
+ wwvb-7.0.0.dist-info/top_level.txt,sha256=0IYdkhEAMgurpv_F-76rlyn4GdxepGFzG99tivVdQVU,11
18
+ wwvb-7.0.0.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- uwwvb.py,sha256=Ybf8DeOZ5VjfqRGtO90_oEEW6HhGaztIVlh4L423MdQ,5801
2
- wwvb/__init__.py,sha256=MRuk6nzitxbIcUfqVLkx-EzGTYYxm96ItfBlR4BSZuQ,32922
3
- wwvb/__version__.py,sha256=ZEItn3OOgzPGQ44WDUROvtDbTuU_UDPqseQiaWn2NJc,511
4
- wwvb/decode.py,sha256=llTLKBW49nl6COheM90NsyMnTNeVApl2oeCHtl6Tf3w,2759
5
- wwvb/dut1table.py,sha256=HVX1338RlQzAQ-bsMPEdmCqoyIxSWoJSoRu1YGyaJO4,875
6
- wwvb/gen.py,sha256=_fpUypu_2nZfG5Vjnya0B8C26nk1WOhnLMTCXwskAHs,3720
7
- wwvb/iersdata.json,sha256=4vVfaxfifkNv570_NjNbS2JwSpPqDx1HSeESkcJom44,765
8
- wwvb/iersdata.json.license,sha256=1k5fhRCuOn0yXbwHtB21G0Nntnf0qMxstflMHuK3-Js,71
9
- wwvb/iersdata.py,sha256=nMqA1xcE-iPtmi9m5qcTIJwfsCxZwoNsxHfM-wvooMQ,1210
10
- wwvb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- wwvb/tz.py,sha256=nlxKnzFPmqLLtC-cEDhWaJ3v3GCSPfqzVtUMf8EEdZ0,248
12
- wwvb/updateiers.py,sha256=Zemj6m0hwPLP31y8ODAS7sqLeB8SSHvv833pfUPHMUo,5661
13
- wwvb/wwvbtk.py,sha256=9RcSssben6CEsX7P3Rmphvmlnp8HoAb9gMFcCP35ryk,5184
14
- wwvb-6.0.0.dist-info/METADATA,sha256=ogZFIs2sa1yGdE7h1raS3ctgaLx4iGjHYrB4gubR2g8,10201
15
- wwvb-6.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
- wwvb-6.0.0.dist-info/entry_points.txt,sha256=KSevvHWLEKxOxUQ-L-OQidD4Sj2BPEfhZ2TQhOgyys4,179
17
- wwvb-6.0.0.dist-info/top_level.txt,sha256=0IYdkhEAMgurpv_F-76rlyn4GdxepGFzG99tivVdQVU,11
18
- wwvb-6.0.0.dist-info/RECORD,,
File without changes