|
3 | 3 | from ..format_codes import FormatCodes |
4 | 4 | from ..console import Console |
5 | 5 |
|
| 6 | +from urllib.error import HTTPError |
| 7 | +from typing import Optional |
| 8 | +import urllib.request as _request |
| 9 | +import json as _json |
6 | 10 |
|
| 11 | + |
| 12 | +def get_latest_version() -> Optional[str]: |
| 13 | + with _request.urlopen(URL) as response: |
| 14 | + if response.status == 200: |
| 15 | + data = _json.load(response) |
| 16 | + return data["info"]["version"] |
| 17 | + else: |
| 18 | + raise HTTPError(URL, response.status, "Failed to fetch latest version info", response.headers, None) |
| 19 | + |
| 20 | + |
| 21 | +def is_latest_version() -> Optional[bool]: |
| 22 | + try: |
| 23 | + latest = get_latest_version() |
| 24 | + if latest in ("", None): return None |
| 25 | + latest_v_parts = tuple(int(part) for part in latest.lower().lstrip("v").split('.')) |
| 26 | + installed_v_parts = tuple(int(part) for part in __version__.lower().lstrip("v").split('.')) |
| 27 | + return latest_v_parts <= installed_v_parts |
| 28 | + except Exception: |
| 29 | + return None |
| 30 | + |
| 31 | + |
| 32 | +URL = "https://pypi.org/pypi/xulbux/json" |
| 33 | +IS_LATEST_VERSION = is_latest_version() |
7 | 34 | CLR = { |
8 | 35 | "class": COLOR.TANGERINE, |
| 36 | + "code_border": COLOR.GRAY, |
9 | 37 | "const": COLOR.RED, |
10 | 38 | "func": COLOR.CYAN, |
11 | 39 | "import": COLOR.NEON_GREEN, |
12 | 40 | "lib": COLOR.ORANGE, |
| 41 | + "notice": COLOR.YELLOW, |
13 | 42 | "punctuators": COLOR.DARK_GRAY, |
14 | | - "code_border": COLOR.GRAY, |
15 | 43 | } |
16 | 44 | HELP = FormatCodes.to_ansi( |
17 | 45 | rf""" [_|b|#7075FF] __ __ |
18 | 46 | [b|#7075FF] _ __ __ __/ / / /_ __ ___ __ |
19 | 47 | [b|#7075FF] | |/ // / / / / / __ \/ / / | |/ / |
20 | 48 | [b|#7075FF] > , </ /_/ / /_/ /_/ / /_/ /> , < |
21 | | - [b|#7075FF]/_/|_|\____/\__/\____/\____//_/|_| [*|BG:{COLOR.GRAY}|#000] v[b]{__version__} [*] |
| 49 | + [b|#7075FF]/_/|_|\____/\__/\____/\____//_/|_| [*|BG:{COLOR.GRAY}|#000] v[b]{__version__} [*|dim|{CLR['notice']}]({'' if IS_LATEST_VERSION else ' (newer available)'})[*] |
22 | 50 |
|
23 | 51 | [i|{COLOR.CORAL}]A TON OF COOL FUNCTIONS, YOU NEED![*] |
24 | 52 |
|
|
0 commit comments