From c9d3e8110e1beeacb8af398760b48716c3a15aab Mon Sep 17 00:00:00 2001 From: FabioRosado Date: Wed, 28 Feb 2024 17:10:59 +0000 Subject: [PATCH 1/5] Initial work on auto increment pyscript versions --- pyproject.toml | 3 ++- src/pyscript/_generator.py | 34 ++++++++++++++++++++++++++-------- src/pyscript/plugins/create.py | 4 ++-- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 54dff39..94ad942 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,8 @@ dependencies = [ "rich==13.4.2", "toml<0.11", "typer==0.9.0", - "platformdirs<2.7" + "platformdirs<2.7", + "requests<=2.31.0" ] description = "Command Line Interface for PyScript" license = {text = "Apache-2.0"} diff --git a/src/pyscript/_generator.py b/src/pyscript/_generator.py index 41b415c..856913a 100644 --- a/src/pyscript/_generator.py +++ b/src/pyscript/_generator.py @@ -1,4 +1,3 @@ -import datetime import json from pathlib import Path from typing import Optional @@ -19,7 +18,7 @@ def create_project_html( python_file_path: str, config_file_path: str, output_file_path: Path, - pyscript_version: str = LATEST_PYSCRIPT_VERSION, + pyscript_version: str, template: str = "basic.html", ) -> None: """Write a Python script string to an HTML file template. @@ -54,9 +53,9 @@ def save_config_file(config_file: Path, configuration: dict): Params: - - config_file(Path): path configuration file. (i.e.: "pyscript.toml"). Supported - formats: `toml` and `json`. - - configuration(dict): app configuration to be saved + - config_file(Path): path configuration file. (i.e.: "pyscript.toml"). Supported + formats: `toml` and `json`. + - configuration(dict): app configuration to be saved Return: (None) @@ -73,7 +72,7 @@ def create_project( app_description: str, author_name: str, author_email: str, - pyscript_version: str = LATEST_PYSCRIPT_VERSION, + pyscript_version: Optional[str] = None, project_type: str = "app", wrap: bool = False, command: Optional[str] = None, @@ -86,7 +85,6 @@ def create_project( main.py - a "Hello world" python starter module index.html - start page for the project """ - date_stamp = datetime.date.today() if wrap: if command: @@ -107,13 +105,16 @@ def create_project( # was complaining so let's add a default app_name = app_or_file_name or "my-pyscript-app" + if not pyscript_version: + pyscript_version = _get_latest_pyscript_version() + context = { "name": app_name, "description": app_description, "type": "app", "author_name": author_name, "author_email": author_email, - "version": f"{date_stamp.year}.{'{:02d}'.format(date_stamp.month)}.1", + "version": pyscript_version, } app_dir = Path(".") / app_name @@ -155,3 +156,20 @@ def create_project( pyscript_version=pyscript_version, template=template, ) + + +def _get_latest_pyscript_version() -> str: + """Get the latest version of PyScript from GitHub.""" + import requests + + url = "https://api.github.com/repos/pyscript/pyscript/releases/latest" + response = requests.get(url) + + if not response.ok: + pyscript_version = LATEST_PYSCRIPT_VERSION + else: + + data = response.json() + pyscript_version = data["tag_name"] + + return pyscript_version diff --git a/src/pyscript/plugins/create.py b/src/pyscript/plugins/create.py index ffe62a0..cbc896a 100644 --- a/src/pyscript/plugins/create.py +++ b/src/pyscript/plugins/create.py @@ -2,7 +2,7 @@ import typer -from pyscript import LATEST_PYSCRIPT_VERSION, app, cli, plugins +from pyscript import app, cli, plugins from pyscript._generator import create_project @@ -15,7 +15,7 @@ def create( author_name: str = typer.Option(None, help="Name of the author"), author_email: str = typer.Option(None, help="Email of the author"), pyscript_version: str = typer.Option( - LATEST_PYSCRIPT_VERSION, + None, "--pyscript-version", help="If provided, defines what version of pyscript will be used to create the app", ), From 48190b57bb7bbb31b3e41ce7d83f162d9ecd967d Mon Sep 17 00:00:00 2001 From: FabioRosado Date: Wed, 28 Feb 2024 17:39:40 +0000 Subject: [PATCH 2/5] Make sure to ignore exceptions if we cant connect to internet --- src/pyscript/_generator.py | 18 ++++++++++-------- tests/conftest.py | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/pyscript/_generator.py b/src/pyscript/_generator.py index 856913a..137f077 100644 --- a/src/pyscript/_generator.py +++ b/src/pyscript/_generator.py @@ -3,6 +3,7 @@ from typing import Optional import jinja2 +import requests import toml from pyscript import LATEST_PYSCRIPT_VERSION, config @@ -160,16 +161,17 @@ def create_project( def _get_latest_pyscript_version() -> str: """Get the latest version of PyScript from GitHub.""" - import requests - url = "https://api.github.com/repos/pyscript/pyscript/releases/latest" - response = requests.get(url) + try: + response = requests.get(url) - if not response.ok: - pyscript_version = LATEST_PYSCRIPT_VERSION - else: + if not response.ok: + pyscript_version = LATEST_PYSCRIPT_VERSION + else: - data = response.json() - pyscript_version = data["tag_name"] + data = response.json() + pyscript_version = data["tag_name"] + except Exception: + pyscript_version = LATEST_PYSCRIPT_VERSION return pyscript_version diff --git a/tests/conftest.py b/tests/conftest.py index 12d22d4..a18302f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,9 +1,24 @@ from pathlib import Path from typing import Any +from unittest.mock import MagicMock, patch import pytest from _pytest.monkeypatch import MonkeyPatch +from pyscript import LATEST_PYSCRIPT_VERSION + + +@pytest.fixture(scope="session", autouse=True) +def requests(): + mocked_result = {"tag_name": LATEST_PYSCRIPT_VERSION} + + with patch("pyscript._generator.requests") as mocked_requests: + mocked_get = MagicMock() + mocked_get.ok = True + mocked_get.json = MagicMock(return_value=mocked_result) + mocked_requests.get.return_value = mocked_get + yield mocked_requests + @pytest.fixture def auto_enter(monkeypatch): From e1f2d0baae21348a8bf0850b32f3d4fb748af964 Mon Sep 17 00:00:00 2001 From: FabioRosado Date: Wed, 28 Feb 2024 17:48:32 +0000 Subject: [PATCH 3/5] Revert change to version --- src/pyscript/_generator.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pyscript/_generator.py b/src/pyscript/_generator.py index 137f077..427285a 100644 --- a/src/pyscript/_generator.py +++ b/src/pyscript/_generator.py @@ -1,3 +1,4 @@ +import datetime import json from pathlib import Path from typing import Optional @@ -109,13 +110,14 @@ def create_project( if not pyscript_version: pyscript_version = _get_latest_pyscript_version() + date_stamp = datetime.date.today() context = { "name": app_name, "description": app_description, "type": "app", "author_name": author_name, "author_email": author_email, - "version": pyscript_version, + "version": f"{date_stamp.year}.{'{:02d}'.format(date_stamp.month)}.1", } app_dir = Path(".") / app_name From f27fc520357044a2f26d610544ee09b8a40cda9f Mon Sep 17 00:00:00 2001 From: FabioRosado Date: Wed, 28 Feb 2024 17:49:00 +0000 Subject: [PATCH 4/5] Actually make it so it's v0 to follow PSDC --- src/pyscript/_generator.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pyscript/_generator.py b/src/pyscript/_generator.py index 427285a..9b343a9 100644 --- a/src/pyscript/_generator.py +++ b/src/pyscript/_generator.py @@ -1,4 +1,3 @@ -import datetime import json from pathlib import Path from typing import Optional @@ -110,14 +109,13 @@ def create_project( if not pyscript_version: pyscript_version = _get_latest_pyscript_version() - date_stamp = datetime.date.today() context = { "name": app_name, "description": app_description, "type": "app", "author_name": author_name, "author_email": author_email, - "version": f"{date_stamp.year}.{'{:02d}'.format(date_stamp.month)}.1", + "version": "v0", } app_dir = Path(".") / app_name From d5e70cef46cc172d7b52d22ba080c010fd6db4d0 Mon Sep 17 00:00:00 2001 From: FabioRosado Date: Wed, 28 Feb 2024 17:50:37 +0000 Subject: [PATCH 5/5] types because mypy wants them --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 94ad942..6854751 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,8 @@ dev = [ "coverage<7.3", "mypy<=1.4.1", "pytest<7.5", - "types-toml<0.11" + "types-toml<0.11", + "types-requests" ] docs = [ "Sphinx<5.2",