From a41965e2be0f6187c98b3725c45d3acae94f506f Mon Sep 17 00:00:00 2001 From: Steve Kowalik Date: Thu, 19 Feb 2026 16:39:03 +1100 Subject: [PATCH] chore: remove use of six and mock mock has been in the standard library since Python 3.3, and six stopped being required when Python 2 support was dropped, so remove both of them. --- integration_tests/django5/uv.lock | 21 ++++++-------- posthog/client.py | 3 +- posthog/test/test_before_send.py | 3 +- posthog/test/test_client.py | 5 ++-- posthog/test/test_consumer.py | 2 +- posthog/test/test_feature_flag_result.py | 3 +- posthog/test/test_feature_flags.py | 2 +- posthog/test/test_request.py | 2 +- posthog/test/test_utils.py | 3 +- posthog/utils.py | 7 ++--- pyproject.toml | 4 --- uv.lock | 35 ------------------------ 12 files changed, 19 insertions(+), 71 deletions(-) diff --git a/integration_tests/django5/uv.lock b/integration_tests/django5/uv.lock index 45cbb261..67a30f93 100644 --- a/integration_tests/django5/uv.lock +++ b/integration_tests/django5/uv.lock @@ -254,13 +254,12 @@ dependencies = [ { name = "distro" }, { name = "python-dateutil" }, { name = "requests" }, - { name = "six" }, { name = "typing-extensions" }, ] [package.metadata] requires-dist = [ - { name = "anthropic", marker = "extra == 'test'" }, + { name = "anthropic", marker = "extra == 'test'", specifier = ">=0.72" }, { name = "backoff", specifier = ">=1.10.0" }, { name = "coverage", marker = "extra == 'test'" }, { name = "distro", specifier = ">=1.5.0" }, @@ -269,16 +268,15 @@ requires-dist = [ { name = "freezegun", marker = "extra == 'test'", specifier = "==1.5.1" }, { name = "google-genai", marker = "extra == 'test'" }, { name = "langchain", marker = "extra == 'langchain'", specifier = ">=0.2.0" }, - { name = "langchain-anthropic", marker = "extra == 'test'", specifier = ">=0.3.15" }, - { name = "langchain-community", marker = "extra == 'test'", specifier = ">=0.3.25" }, - { name = "langchain-core", marker = "extra == 'test'", specifier = ">=0.3.65" }, - { name = "langchain-openai", marker = "extra == 'test'", specifier = ">=0.3.22" }, - { name = "langgraph", marker = "extra == 'test'", specifier = ">=0.4.8" }, + { name = "langchain-anthropic", marker = "extra == 'test'", specifier = ">=1.0" }, + { name = "langchain-community", marker = "extra == 'test'", specifier = ">=0.4" }, + { name = "langchain-core", marker = "extra == 'test'", specifier = ">=1.0" }, + { name = "langchain-openai", marker = "extra == 'test'", specifier = ">=1.0" }, + { name = "langgraph", marker = "extra == 'test'", specifier = ">=1.0" }, { name = "lxml", marker = "extra == 'dev'" }, - { name = "mock", marker = "extra == 'test'", specifier = ">=2.0.0" }, { name = "mypy", marker = "extra == 'dev'" }, { name = "mypy-baseline", marker = "extra == 'dev'" }, - { name = "openai", marker = "extra == 'test'" }, + { name = "openai", marker = "extra == 'test'", specifier = ">=2.0" }, { name = "packaging", marker = "extra == 'dev'" }, { name = "parameterized", marker = "extra == 'test'", specifier = ">=0.8.1" }, { name = "pre-commit", marker = "extra == 'dev'" }, @@ -291,15 +289,12 @@ requires-dist = [ { name = "requests", specifier = ">=2.7,<3.0" }, { name = "ruff", marker = "extra == 'dev'" }, { name = "setuptools", marker = "extra == 'dev'" }, - { name = "six", specifier = ">=1.5" }, { name = "tomli", marker = "extra == 'dev'" }, { name = "tomli-w", marker = "extra == 'dev'" }, { name = "twine", marker = "extra == 'dev'" }, - { name = "types-mock", marker = "extra == 'dev'" }, { name = "types-python-dateutil", marker = "extra == 'dev'" }, { name = "types-requests", marker = "extra == 'dev'" }, { name = "types-setuptools", marker = "extra == 'dev'" }, - { name = "types-six", marker = "extra == 'dev'" }, { name = "typing-extensions", specifier = ">=4.2.0" }, { name = "wheel", marker = "extra == 'dev'" }, ] @@ -482,7 +477,7 @@ dependencies = [ requires-dist = [ { name = "django", specifier = "~=5.2.7" }, { name = "httpx", specifier = "~=0.28.1" }, - { name = "posthog", editable = "../" }, + { name = "posthog", editable = "../../" }, { name = "pytest", specifier = "~=8.4.2" }, { name = "pytest-asyncio", specifier = "~=1.2.0" }, { name = "pytest-django", specifier = "~=4.11.1" }, diff --git a/posthog/client.py b/posthog/client.py index 4de95581..852cf576 100644 --- a/posthog/client.py +++ b/posthog/client.py @@ -8,7 +8,6 @@ from uuid import uuid4 from dateutil.tz import tzutc -from six import string_types from typing_extensions import Unpack from posthog.args import ID_TYPES, ExceptionArg, OptionalCaptureArgs, OptionalSetArgs @@ -2339,6 +2338,6 @@ def _add_local_person_and_group_properties( def stringify_id(val): if val is None: return None - if isinstance(val, string_types): + if isinstance(val, str): return val return str(val) diff --git a/posthog/test/test_before_send.py b/posthog/test/test_before_send.py index 8d12df57..7c86b4c7 100644 --- a/posthog/test/test_before_send.py +++ b/posthog/test/test_before_send.py @@ -1,6 +1,5 @@ import unittest - -import mock +from unittest import mock from posthog.client import Client from posthog.test.test_utils import FAKE_TEST_API_KEY diff --git a/posthog/test/test_client.py b/posthog/test/test_client.py index 57c06867..1a84f636 100644 --- a/posthog/test/test_client.py +++ b/posthog/test/test_client.py @@ -3,8 +3,7 @@ from datetime import datetime from uuid import uuid4 -import mock -import six +from unittest import mock from parameterized import parameterized from posthog.client import Client @@ -1728,7 +1727,7 @@ def test_overflow(self): self.assertIsNone(msg_uuid) def test_unicode(self): - Client(six.u("unicode_key")) + Client("unicode_key") def test_numeric_distinct_id(self): self.client.capture("python event", distinct_id=1234) diff --git a/posthog/test/test_consumer.py b/posthog/test/test_consumer.py index a832aa28..e032e813 100644 --- a/posthog/test/test_consumer.py +++ b/posthog/test/test_consumer.py @@ -3,7 +3,7 @@ import unittest from typing import Any -import mock +from unittest import mock from parameterized import parameterized try: diff --git a/posthog/test/test_feature_flag_result.py b/posthog/test/test_feature_flag_result.py index 7de428c6..5eebc4f6 100644 --- a/posthog/test/test_feature_flag_result.py +++ b/posthog/test/test_feature_flag_result.py @@ -1,6 +1,5 @@ import unittest - -import mock +from unittest import mock from posthog.client import Client from posthog.test.test_utils import FAKE_TEST_API_KEY diff --git a/posthog/test/test_feature_flags.py b/posthog/test/test_feature_flags.py index 1b0192ff..c6d3037c 100644 --- a/posthog/test/test_feature_flags.py +++ b/posthog/test/test_feature_flags.py @@ -1,7 +1,7 @@ import datetime import unittest -import mock +from unittest import mock from dateutil import parser, tz from freezegun import freeze_time diff --git a/posthog/test/test_request.py b/posthog/test/test_request.py index f1671973..8b7cf13d 100644 --- a/posthog/test/test_request.py +++ b/posthog/test/test_request.py @@ -1,8 +1,8 @@ import json import unittest from datetime import date, datetime +from unittest import mock -import mock import pytest import requests diff --git a/posthog/test/test_utils.py b/posthog/test/test_utils.py index 6474c519..b6907be1 100644 --- a/posthog/test/test_utils.py +++ b/posthog/test/test_utils.py @@ -7,7 +7,6 @@ from typing import Optional from uuid import UUID -import six from dateutil.tz import tzutc from parameterized import parameterized from pydantic import BaseModel @@ -48,7 +47,7 @@ def test_timezone_utils(self): def test_clean(self): simple = { "decimal": Decimal("0.142857"), - "unicode": six.u("woo"), + "unicode": "woo", "date": datetime.now(), "long": 200000000, "integer": 1, diff --git a/posthog/utils.py b/posthog/utils.py index 37f4a136..bffa3cf8 100644 --- a/posthog/utils.py +++ b/posthog/utils.py @@ -13,7 +13,6 @@ import platform import distro # For Linux OS detection -import six from dateutil.tz import tzlocal, tzutc log = logging.getLogger("posthog") @@ -58,9 +57,7 @@ def clean(item): return float(item) if isinstance(item, UUID): return str(item) - if isinstance( - item, (six.string_types, bool, numbers.Number, datetime, date, type(None)) - ): + if isinstance(item, (str, bool, numbers.Number, datetime, date, type(None))): return item if isinstance(item, (set, list, tuple)): return _clean_list(item) @@ -88,7 +85,7 @@ def _clean_list(list_): def _clean_dict(dict_): data = {} - for k, v in six.iteritems(dict_): + for k, v in dict_.items(): try: data[k] = clean(v) except TypeError: diff --git a/pyproject.toml b/pyproject.toml index 6928b94c..b9a6a6b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,6 @@ classifiers = [ ] dependencies = [ "requests>=2.7,<3.0", - "six>=1.5", "python-dateutil>=2.2", "backoff>=1.10.0", "distro>=1.5.0", @@ -43,11 +42,9 @@ dev = [ "lxml", "mypy", "mypy-baseline", - "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", - "types-six", "pre-commit", "pydantic", "ruff", @@ -59,7 +56,6 @@ dev = [ "tomli_w", ] test = [ - "mock>=2.0.0", "freezegun==1.5.1", "coverage", "pytest", diff --git a/uv.lock b/uv.lock index 475b34c1..57dad959 100644 --- a/uv.lock +++ b/uv.lock @@ -1516,15 +1516,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] -[[package]] -name = "mock" -version = "5.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/8c/14c2ae915e5f9dca5a22edd68b35be94400719ccfa068a03e0fb63d0f6f6/mock-5.2.0.tar.gz", hash = "sha256:4e460e818629b4b173f32d08bf30d3af8123afbb8e04bb5707a1fd4799e503f0", size = 92796, upload-time = "2025-03-03T12:31:42.911Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/d9/617e6af809bf3a1d468e0d58c3997b1dc219a9a9202e650d30c2fc85d481/mock-5.2.0-py3-none-any.whl", hash = "sha256:7ba87f72ca0e915175596069dbbcc7c75af7b5e9b9bc107ad6349ede0819982f", size = 31617, upload-time = "2025-03-03T12:31:41.518Z" }, -] - [[package]] name = "more-itertools" version = "10.8.0" @@ -2136,7 +2127,6 @@ dependencies = [ { name = "distro" }, { name = "python-dateutil" }, { name = "requests" }, - { name = "six" }, { name = "typing-extensions" }, ] @@ -2154,11 +2144,9 @@ dev = [ { name = "tomli" }, { name = "tomli-w" }, { name = "twine" }, - { name = "types-mock" }, { name = "types-python-dateutil" }, { name = "types-requests" }, { name = "types-setuptools" }, - { name = "types-six" }, { name = "wheel" }, ] langchain = [ @@ -2175,7 +2163,6 @@ test = [ { name = "langchain-core" }, { name = "langchain-openai" }, { name = "langgraph" }, - { name = "mock" }, { name = "openai" }, { name = "parameterized" }, { name = "pydantic" }, @@ -2201,7 +2188,6 @@ requires-dist = [ { name = "langchain-openai", marker = "extra == 'test'", specifier = ">=1.0" }, { name = "langgraph", marker = "extra == 'test'", specifier = ">=1.0" }, { name = "lxml", marker = "extra == 'dev'" }, - { name = "mock", marker = "extra == 'test'", specifier = ">=2.0.0" }, { name = "mypy", marker = "extra == 'dev'" }, { name = "mypy-baseline", marker = "extra == 'dev'" }, { name = "openai", marker = "extra == 'test'", specifier = ">=2.0" }, @@ -2217,15 +2203,12 @@ requires-dist = [ { name = "requests", specifier = ">=2.7,<3.0" }, { name = "ruff", marker = "extra == 'dev'" }, { name = "setuptools", marker = "extra == 'dev'" }, - { name = "six", specifier = ">=1.5" }, { name = "tomli", marker = "extra == 'dev'" }, { name = "tomli-w", marker = "extra == 'dev'" }, { name = "twine", marker = "extra == 'dev'" }, - { name = "types-mock", marker = "extra == 'dev'" }, { name = "types-python-dateutil", marker = "extra == 'dev'" }, { name = "types-requests", marker = "extra == 'dev'" }, { name = "types-setuptools", marker = "extra == 'dev'" }, - { name = "types-six", marker = "extra == 'dev'" }, { name = "typing-extensions", specifier = ">=4.2.0" }, { name = "wheel", marker = "extra == 'dev'" }, ] @@ -3147,15 +3130,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/7a/882d99539b19b1490cac5d77c67338d126e4122c8276bf640e411650c830/twine-6.2.0-py3-none-any.whl", hash = "sha256:418ebf08ccda9a8caaebe414433b0ba5e25eb5e4a927667122fbe8f829f985d8", size = 42727, upload-time = "2025-09-04T15:43:15.994Z" }, ] -[[package]] -name = "types-mock" -version = "5.2.0.20250924" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/50/c3/00cf1e62c27fd195aaf22b249884f82643141b73f151ff019aa24c99bd17/types_mock-5.2.0.20250924.tar.gz", hash = "sha256:953197543b4183f00363e8e626f6c7abea1a3f7a4dd69d199addb70b01b6bb35", size = 11319, upload-time = "2025-09-24T02:53:33.093Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/85/52004fb81add2b05494cbd1c0dab71f3706f19935cabb4ad220643884382/types_mock-5.2.0.20250924-py3-none-any.whl", hash = "sha256:23617ffb4cf948c085db69ec90bd474afbce634ef74995045ae0a5748afbe57d", size = 10499, upload-time = "2025-09-24T02:53:32.054Z" }, -] - [[package]] name = "types-python-dateutil" version = "2.9.0.20251115" @@ -3195,15 +3169,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b6/2d/475bf15c1cdc172e7a0d665b6e373ebfb1e9bf734d3f2f543d668b07a142/types_setuptools-80.9.0.20250822-py3-none-any.whl", hash = "sha256:53bf881cb9d7e46ed12c76ef76c0aaf28cfe6211d3fab12e0b83620b1a8642c3", size = 63179, upload-time = "2025-08-22T03:02:07.643Z" }, ] -[[package]] -name = "types-six" -version = "1.17.0.20251009" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/f7/448215bc7695cfa0c8a7e0dcfa54fe31b1d52fb87004fed32e659dd85c80/types_six-1.17.0.20251009.tar.gz", hash = "sha256:efe03064ecd0ffb0f7afe133990a2398d8493d8d1c1cc10ff3dfe476d57ba44f", size = 15552, upload-time = "2025-10-09T02:54:26.02Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/2f/94baa623421940e3eb5d2fc63570ebb046f2bb4d9573b8787edab3ed2526/types_six-1.17.0.20251009-py3-none-any.whl", hash = "sha256:2494f4c2a58ada0edfe01ea84b58468732e43394c572d9cf5b1dd06d86c487a3", size = 19935, upload-time = "2025-10-09T02:54:25.096Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0"