diff --git a/.gitignore b/.gitignore index 6814dd4..b1f46ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ .idea/ .venv/ +.DS_Store __pycache__/ dist/ debug.* .env .env_private -scripts/ \ No newline at end of file +scripts/ diff --git a/cozepy/__init__.py b/cozepy/__init__.py index acb39a3..9e4c2fa 100644 --- a/cozepy/__init__.py +++ b/cozepy/__init__.py @@ -43,7 +43,10 @@ ) from .workspaces import WorkspaceRoleType, WorkspaceType, Workspace +from .version import VERSION + __all__ = [ + "VERSION", # auth "OAuthToken", "DeviceAuthCode", diff --git a/cozepy/request.py b/cozepy/request.py index 901e09f..5132dd7 100644 --- a/cozepy/request.py +++ b/cozepy/request.py @@ -4,6 +4,7 @@ from httpx import Response from typing_extensions import get_args, get_origin # compatibility with python 3.7 +from cozepy.version import user_agent from cozepy.exception import CozeAPIError if TYPE_CHECKING: @@ -45,6 +46,7 @@ def request( """ if headers is None: headers = {} + headers["User-Agent"] = user_agent() if self._auth: self._auth.authentication(headers) r = httpx.request( diff --git a/cozepy/version.py b/cozepy/version.py new file mode 100644 index 0000000..900abdb --- /dev/null +++ b/cozepy/version.py @@ -0,0 +1,31 @@ +import platform +import sys +from functools import lru_cache + +VERSION = "0.1.1" + + +@lru_cache(maxsize=1) +def user_agent(): + print("调用了") + python_version = ".".join(map(str, sys.version_info[:2])) + + os_name = platform.system().lower() + if os_name == "darwin": + os_name = "macos" + + if os_name == "macos": + os_version = platform.mac_ver()[0] + elif os_name == "windows": + os_version = platform.win32_ver()[0] + elif os_name == "linux": + try: + import distro + + os_version = distro.version(pretty=False, best=True) + except ImportError: + os_version = platform.release() + else: + os_version = platform.release() + + return f"cozepy/{VERSION} python/{python_version} {os_name}/{os_version}".lower() diff --git a/poetry.lock b/poetry.lock index 919953e..14a31c3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -294,6 +294,17 @@ files = [ {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + [[package]] name = "exceptiongroup" version = "1.2.2" @@ -864,4 +875,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "3df18b5d96d7a2cd2ab45659cd2c4c88e655029751bff10dd68c882d9e6fa5e6" +content-hash = "283554b3607f952128188b9daae2baa70f52ee55ca2073bcf81de8866f9bf173" diff --git a/pyproject.toml b/pyproject.toml index 62ba8d1..2695549 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ pydantic = "^2.5.0" authlib = "^1.2.0" httpx = "^0.24.0" typing-extensions = "^4.3.0" +distro = "^1.9.0" [tool.poetry.group.dev.dependencies] pytest = "^7.0.0" diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 0000000..be2b774 --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,8 @@ +from cozepy import VERSION +from cozepy.version import user_agent + + +def test_user_agent(): + res = user_agent() + assert f"cozepy/{VERSION}" in res + assert "python" in res