wwvb 7.0.0__py3-none-any.whl → 8.0.0rc1__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
@@ -20,15 +20,30 @@ import enum
20
20
  import json
21
21
  import warnings
22
22
  from dataclasses import dataclass
23
- from typing import ClassVar
23
+ from typing import ClassVar, Literal
24
24
 
25
25
  from . import iersdata
26
26
  from .tz import Mountain
27
27
 
28
+ WWVBChannel = Literal["amplitude", "phase", "both"]
29
+
28
30
  TYPE_CHECKING = False
29
31
  if TYPE_CHECKING:
30
32
  from collections.abc import Generator
31
- from typing import Any, Self, TextIO, TypeVar
33
+ from typing import NotRequired, Self, TextIO, TypedDict, TypeVar
34
+
35
+ class JsonMinute(TypedDict):
36
+ """Implementation detail
37
+
38
+ This is the Python object type that is serialized by `print_timecodes_json`
39
+ """
40
+
41
+ year: int
42
+ days: int
43
+ hour: int
44
+ minute: int
45
+ amplitude: NotRequired[str]
46
+ phase: NotRequired[str]
32
47
 
33
48
  T = TypeVar("T")
34
49
 
@@ -927,7 +942,7 @@ styles = {
927
942
  def print_timecodes(
928
943
  w: WWVBMinute,
929
944
  minutes: int,
930
- channel: str,
945
+ channel: WWVBChannel,
931
946
  style: str,
932
947
  file: TextIO,
933
948
  *,
@@ -964,7 +979,7 @@ def print_timecodes(
964
979
  def print_timecodes_json(
965
980
  w: WWVBMinute,
966
981
  minutes: int,
967
- channel: str,
982
+ channel: WWVBChannel,
968
983
  file: TextIO,
969
984
  ) -> None:
970
985
  """Print a range of timecodes in JSON format.
@@ -984,7 +999,7 @@ def print_timecodes_json(
984
999
  """
985
1000
  result = []
986
1001
  for _ in range(minutes):
987
- data: dict[str, Any] = {
1002
+ data: JsonMinute = {
988
1003
  "year": w.year,
989
1004
  "days": w.days,
990
1005
  "hour": w.hour,
wwvb/__version__.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '7.0.0'
32
- __version_tuple__ = version_tuple = (7, 0, 0)
31
+ __version__ = version = '8.0.0rc1'
32
+ __version_tuple__ = version_tuple = (8, 0, 0, 'rc1')
33
33
 
34
34
  __commit_id__ = commit_id = None
wwvb/decode.py CHANGED
@@ -6,10 +6,10 @@
6
6
  from __future__ import annotations
7
7
 
8
8
  import sys
9
- from typing import TYPE_CHECKING
10
9
 
11
10
  import wwvb
12
11
 
12
+ TYPE_CHECKING = False
13
13
  if TYPE_CHECKING:
14
14
  from collections.abc import Generator
15
15
 
wwvb/gen.py CHANGED
@@ -9,15 +9,18 @@ from __future__ import annotations
9
9
 
10
10
  import datetime
11
11
  import sys
12
- from typing import Any
13
12
 
14
13
  import click
15
14
  import dateutil.parser
16
15
 
17
16
  from . import WWVBMinute, WWVBMinuteIERS, print_timecodes, print_timecodes_json, styles
18
17
 
18
+ TYPE_CHECKING = False
19
+ if TYPE_CHECKING:
20
+ from . import WWVBChannel
19
21
 
20
- def parse_timespec(ctx: Any, param: Any, value: list[str]) -> datetime.datetime: # noqa: ARG001
22
+
23
+ def parse_timespec(ctx: click.Context, param: click.Parameter, value: list[str]) -> datetime.datetime: # noqa: ARG001
21
24
  """Parse a time specifier from the commandline"""
22
25
  try:
23
26
  if len(value) == 5:
@@ -95,7 +98,7 @@ def main(
95
98
  dut1: int,
96
99
  minutes: int,
97
100
  style: str,
98
- channel: str,
101
+ channel: WWVBChannel,
99
102
  all_timecodes: bool,
100
103
  timespec: datetime.datetime,
101
104
  ) -> None:
wwvb/iersdata.json CHANGED
@@ -1 +1 @@
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"}
1
+ {"START": "1972-01-01", "OFFSETS_GZ": "H4sIAJLBtmgC/+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+z0yyz2F/zCTF9VskETgAA"}
wwvb/wwvbtk.py CHANGED
@@ -8,13 +8,13 @@ from __future__ import annotations
8
8
 
9
9
  import datetime
10
10
  import functools
11
- from tkinter import Canvas, TclError, Tk
12
- from typing import TYPE_CHECKING, Any
11
+ from tkinter import Canvas, Event, TclError, Tk
13
12
 
14
13
  import click
15
14
 
16
15
  import wwvb
17
16
 
17
+ TYPE_CHECKING = False
18
18
  if TYPE_CHECKING:
19
19
  from collections.abc import Generator
20
20
 
@@ -25,7 +25,7 @@ def _app() -> Tk:
25
25
  return Tk()
26
26
 
27
27
 
28
- def validate_colors(ctx: Any, param: Any, value: str) -> list[str]: # noqa: ARG001
28
+ def validate_colors(ctx: click.Context, param: click.Parameter, value: str) -> list[str]: # noqa: ARG001
29
29
  """Check that all colors in a string are valid, splitting it to a list"""
30
30
  app = _app()
31
31
  colors = value.split()
@@ -106,7 +106,7 @@ def main(colors: list[str], size: int, min_size: int | None) -> None: # noqa: P
106
106
  canvas.pack(fill="both", expand=True)
107
107
  app.wm_deiconify()
108
108
 
109
- def resize_canvas(event: Any) -> None:
109
+ def resize_canvas(event: Event) -> None:
110
110
  """Keep the circle filling the window when it is resized"""
111
111
  sz = min(event.width, event.height) - 8
112
112
  if sz < 0:
@@ -141,10 +141,12 @@ def main(colors: list[str], size: int, min_size: int | None) -> None: # noqa: P
141
141
 
142
142
  controller = controller_func().__next__
143
143
 
144
+ # pyrefly: ignore # bad-assignment
144
145
  def after_func() -> None:
145
146
  """Repeatedly run the controller after the desired interval"""
146
147
  app.after(controller(), after_func)
147
148
 
149
+ # pyrefly: ignore # bad-argument-type
148
150
  app.after_idle(after_func)
149
151
  app.mainloop()
150
152
 
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wwvb
3
- Version: 7.0.0
3
+ Version: 8.0.0rc1
4
4
  Summary: Generate WWVB timecodes for any desired time
5
5
  Author-email: Jeff Epler <jepler@gmail.com>
6
- Project-URL: Source, https://github.com/jepler/wwvbpy
7
- Project-URL: Documentation, https://github.com/jepler/wwvbpy
6
+ Project-URL: Source, https://codeberg.org/jepler/wwvbpy
7
+ Project-URL: Documentation, https://codeberg.org/jepler/wwvbpy
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.9
10
10
  Classifier: Programming Language :: Python :: 3.10
@@ -29,11 +29,7 @@ SPDX-FileCopyrightText: 2021-2024 Jeff Epler
29
29
 
30
30
  SPDX-License-Identifier: GPL-3.0-only
31
31
  -->
32
- [![Test wwvbgen](https://github.com/jepler/wwvbpy/actions/workflows/test.yml/badge.svg)](https://github.com/jepler/wwvbpy/actions/workflows/test.yml)
33
- [![codecov](https://codecov.io/gh/jepler/wwvbpy/branch/main/graph/badge.svg?token=Exx0c3Gp65)](https://codecov.io/gh/jepler/wwvbpy)
34
- [![Update DUT1 data](https://github.com/jepler/wwvbpy/actions/workflows/cron.yml/badge.svg)](https://github.com/jepler/wwvbpy/actions/workflows/cron.yml)
35
32
  [![PyPI](https://img.shields.io/pypi/v/wwvb)](https://pypi.org/project/wwvb)
36
- [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/jepler/wwvbpy/main.svg)](https://results.pre-commit.ci/latest/github/jepler/wwvbpy/main)
37
33
 
38
34
  # Purpose
39
35
 
@@ -63,7 +59,7 @@ The package includes:
63
59
 
64
60
  # Development status
65
61
 
66
- The author ([@jepler](https://github.com/jepler)) occasionally develops and maintains this project, but
62
+ The author ([@jepler](https://unpythonic.net)) occasionally develops and maintains this project, but
67
63
  issues are not likely to be acted on. They would be interested in adding
68
64
  co-maintainer(s).
69
65
 
@@ -0,0 +1,18 @@
1
+ uwwvb.py,sha256=Ybf8DeOZ5VjfqRGtO90_oEEW6HhGaztIVlh4L423MdQ,5801
2
+ wwvb/__init__.py,sha256=8QRSFHrGEEnjvalE_mtcVCGvEzPwUl7Os9srr1V5nY0,33832
3
+ wwvb/__version__.py,sha256=Rclf3PGSRaeFMb7D6Z8qQ4TeuY5MHu6vmzjC3bfviAU,714
4
+ wwvb/decode.py,sha256=JQw8XT9AoXlJAl16JRZzjECUPfA7jLhDxI-_XSibzbc,2748
5
+ wwvb/dut1table.py,sha256=HVX1338RlQzAQ-bsMPEdmCqoyIxSWoJSoRu1YGyaJO4,875
6
+ wwvb/gen.py,sha256=iMTYLtyy3ItC4AplTakkOhHNHzDFVmApjlVwYIK72nI,3798
7
+ wwvb/iersdata.json,sha256=lUMrygiih4_ItKX_t8Hqnx5bt9_1D1jocPycbtzOfhE,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=cFBUduN8rQEdrpB0NtHK5r8HNDYfg_3XD7mbhYrVSrk,5284
14
+ wwvb-8.0.0rc1.dist-info/METADATA,sha256=f_izwyK9BqO8nSNAzycXQHzMsGSFi1oCsh1T1fHdzOg,9612
15
+ wwvb-8.0.0rc1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
16
+ wwvb-8.0.0rc1.dist-info/entry_points.txt,sha256=KSevvHWLEKxOxUQ-L-OQidD4Sj2BPEfhZ2TQhOgyys4,179
17
+ wwvb-8.0.0rc1.dist-info/top_level.txt,sha256=0IYdkhEAMgurpv_F-76rlyn4GdxepGFzG99tivVdQVU,11
18
+ wwvb-8.0.0rc1.dist-info/RECORD,,
@@ -1,18 +0,0 @@
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,,
File without changes