diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index 1bb119e..bc25a32 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -8,7 +8,7 @@ steps: image: python:3.11 commands: - pip install uv - - uv sync --extra testing --extra ci + - uv sync --group ci - ./.venv/bin/ruff check src/ - ./.venv/bin/ruff format --check src/ diff --git a/.woodpecker/tests.yaml b/.woodpecker/tests.yaml index 09649aa..fed2254 100644 --- a/.woodpecker/tests.yaml +++ b/.woodpecker/tests.yaml @@ -25,7 +25,7 @@ steps: POSTGRES_PASSWORD: sekrit commands: - pip install uv - - uv sync --extra testing --extra ci + - uv sync --group ci - ./.venv/bin/coverage run ./src/manage.py test newsreader - ./.venv/bin/coverage report --show-missing diff --git a/docker/django b/docker/django index ab8821d..77f0c1d 100644 --- a/docker/django +++ b/docker/django @@ -15,7 +15,7 @@ RUN mkdir /app/media COPY uv.lock pyproject.toml /app/ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv -RUN uv sync --frozen --no-install-project +RUN uv sync --frozen --no-default-groups --no-install-project # stage 2 @@ -58,7 +58,7 @@ COPY --from=frontend-build /app/src/newsreader/static /app/src/newsreader/static COPY ./src /app/src -RUN uv sync --frozen --extra production +RUN uv sync --frozen --only-group production --extra sentry RUN useradd -M -u 1000 newsreader RUN chown -R newsreader:newsreader /app @@ -99,4 +99,4 @@ COPY ./bin/docker-entrypoint.sh /app/bin/docker-entrypoint.sh COPY --from=backend /app/src/ /app/src/ COPY --from=backend /bin/uv /bin/uv -RUN uv sync --frozen --extra testing --extra development +RUN uv sync --frozen --group development diff --git a/pyproject.toml b/pyproject.toml index ad04c68..fc497d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = 'newsreader' version = '0.5.3' -authors = [{name = 'Sonny', email= 'sonnyba871@gmail.com'}] +authors = [{ name = 'Sonny', email= 'sonny871@hotmail.com' }] license = {text = 'GPL-3.0'} requires-python = '>=3.11' dependencies = [ @@ -24,35 +24,45 @@ dependencies = [ 'lxml', ] -[project.optional-dependencies] -testing = [ - 'factory-boy', - 'freezegun', - 'tblib', - "ruff>=0.6.3", -] +[dependency-groups] +test-tools = ['ruff', 'factory_boy', 'freezegun'] development = [ 'django-debug-toolbar', 'django-stubs', 'django-extensions', ] ci = ['coverage~=7.6.1'] -production = ['gunicorn~=23.0', 'sentry-sdk~=2.0'] +production = ['gunicorn~=23.0'] + +[project.optional-dependencies] +sentry = ['sentry-sdk~=2.0'] [tool.uv] environments = ["sys_platform == 'linux'"] +default-groups = ['test-tools'] [tool.ruff] include = ['pyproject.toml', 'src/**/*.py'] line-length = 88 -[tool.ruff.lint.isort] -default-section = 'third-party' -known-first-party = ['newsreader'] +[tool.ruff.lint] +select = ['E4', 'E7', 'E9', 'F', 'I'] +[tool.ruff.lint.isort] lines-between-types=1 lines-after-imports=2 +default-section = 'third-party' +known-first-party = ['transip_client'] +section-order = [ + 'future', + 'standard-library', + 'django', + 'third-party', + 'first-party', + 'local-folder', +] + [tool.ruff.lint.isort.sections] django = ['django'] diff --git a/uv.lock b/uv.lock index fec9fbe..629a7b3 100644 --- a/uv.lock +++ b/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 1 requires-python = ">=3.11" resolution-markers = [ "sys_platform == 'linux'", @@ -124,9 +125,6 @@ wheels = [ name = "click" version = "8.1.7" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "platform_system == 'Windows' and sys_platform == 'linux'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121 } wheels = [ { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, @@ -169,15 +167,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/52/40/9d857001228658f0d59e97ebd4c346fe73e138c6de1bce61dc568a57c7f8/click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812", size = 10289 }, ] -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, -] - [[package]] name = "coverage" version = "7.6.1" @@ -366,26 +355,26 @@ sdist = { url = "https://files.pythonhosted.org/packages/f4/87/647ce93053cb5e35e [[package]] name = "factory-boy" -version = "3.3.1" +version = "3.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "faker", marker = "sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/3d/8070dde623341401b1c80156583d4c793058fe250450178218bb6e45526c/factory_boy-3.3.1.tar.gz", hash = "sha256:8317aa5289cdfc45f9cae570feb07a6177316c82e34d14df3c2e1f22f26abef0", size = 163924 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/98/75cacae9945f67cfe323829fc2ac451f64517a8a330b572a06a323997065/factory_boy-3.3.3.tar.gz", hash = "sha256:866862d226128dfac7f2b4160287e899daf54f2612778327dd03d0e2cb1e3d03", size = 164146 } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/cf/44ec67152f3129d0114c1499dd34f0a0a0faf43d9c2af05bc535746ca482/factory_boy-3.3.1-py2.py3-none-any.whl", hash = "sha256:7b1113c49736e1e9995bc2a18f4dbf2c52cf0f841103517010b1d825712ce3ca", size = 36878 }, + { url = "https://files.pythonhosted.org/packages/27/8d/2bc5f5546ff2ccb3f7de06742853483ab75bf74f36a92254702f8baecc79/factory_boy-3.3.3-py2.py3-none-any.whl", hash = "sha256:1c39e3289f7e667c4285433f305f8d506efc2fe9c73aaea4151ebd5cdea394fc", size = 37036 }, ] [[package]] name = "faker" -version = "28.0.0" +version = "37.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "python-dateutil", marker = "sys_platform == 'linux'" }, + { name = "tzdata", marker = "sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fe/d6/f1a81065124b23d1b56367570a4e00531005b4cca76a739b50ebf79a026d/faker-28.0.0.tar.gz", hash = "sha256:0d3c0399204aaf8205cc1750db443474ca0436f177126b2c27b798e8336cc74f", size = 1782120 } +sdist = { url = "https://files.pythonhosted.org/packages/37/62/80f15fe1b5abf3e5b09815178d7eb63a150fc7fcfebd5271ca4aab1d885a/faker-37.0.2.tar.gz", hash = "sha256:948bd27706478d3aa0b6f9f58b9f25207098f6ca79852c7b49c44a8ced2bc59b", size = 1875441 } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/09/74f194bc3f5fe1d88cd4a882d51669431f82b17327840bd7fdd7b516c97e/Faker-28.0.0-py3-none-any.whl", hash = "sha256:6a3a08be54c37e05f7943d7ba5211d252c1de737687a46ad6f29209d8d5db11f", size = 1820129 }, + { url = "https://files.pythonhosted.org/packages/a9/8b/b738d3d79ee4502ca966a2a4fa6833c11f50130127bdd57729e9b29c6d2f/faker-37.0.2-py3-none-any.whl", hash = "sha256:8955706c56c28099585e9e2b6f814eb0a3a227eb36a2ee3eb9ab577c4764eacc", size = 1918397 }, ] [[package]] @@ -507,7 +496,7 @@ wheels = [ [[package]] name = "newsreader" -version = "0.4.4" +version = "0.5.3" source = { virtual = "." } dependencies = [ { name = "beautifulsoup4", marker = "sys_platform == 'linux'" }, @@ -530,6 +519,11 @@ dependencies = [ ] [package.optional-dependencies] +sentry = [ + { name = "sentry-sdk", marker = "sys_platform == 'linux'" }, +] + +[package.dev-dependencies] ci = [ { name = "coverage", marker = "sys_platform == 'linux'" }, ] @@ -540,13 +534,11 @@ development = [ ] production = [ { name = "gunicorn", marker = "sys_platform == 'linux'" }, - { name = "sentry-sdk", marker = "sys_platform == 'linux'" }, ] -testing = [ +test-tools = [ { name = "factory-boy", marker = "sys_platform == 'linux'" }, { name = "freezegun", marker = "sys_platform == 'linux'" }, { name = "ruff", marker = "sys_platform == 'linux'" }, - { name = "tblib", marker = "sys_platform == 'linux'" }, ] [package.metadata] @@ -554,30 +546,36 @@ requires-dist = [ { name = "beautifulsoup4" }, { name = "bleach" }, { name = "celery", specifier = "~=5.4" }, - { name = "coverage", marker = "extra == 'ci'", specifier = "~=7.6.1" }, { name = "django", specifier = "~=4.2" }, { name = "django-axes" }, { name = "django-celery-beat", specifier = "~=2.7.0" }, - { name = "django-debug-toolbar", marker = "extra == 'development'" }, - { name = "django-extensions", marker = "extra == 'development'" }, { name = "django-registration-redux", specifier = "~=2.7" }, { name = "django-rest-framework" }, - { name = "django-stubs", marker = "extra == 'development'" }, { name = "djangorestframework-camel-case" }, - { name = "factory-boy", marker = "extra == 'testing'" }, { name = "feedparser" }, - { name = "freezegun", marker = "extra == 'testing'" }, { name = "ftfy", specifier = "~=6.2" }, - { name = "gunicorn", marker = "extra == 'production'", specifier = "~=23.0" }, { name = "lxml" }, { name = "psycopg" }, { name = "pymemcache" }, { name = "python-dotenv", specifier = "~=1.0.1" }, { name = "requests" }, { name = "requests-oauthlib" }, - { name = "ruff", marker = "extra == 'testing'", specifier = ">=0.6.3" }, - { name = "sentry-sdk", marker = "extra == 'production'", specifier = "~=2.0" }, - { name = "tblib", marker = "extra == 'testing'" }, + { name = "sentry-sdk", marker = "extra == 'sentry'", specifier = "~=2.0" }, +] +provides-extras = ["sentry"] + +[package.metadata.requires-dev] +ci = [{ name = "coverage", specifier = "~=7.6.1" }] +development = [ + { name = "django-debug-toolbar" }, + { name = "django-extensions" }, + { name = "django-stubs" }, +] +production = [{ name = "gunicorn", specifier = "~=23.0" }] +test-tools = [ + { name = "factory-boy" }, + { name = "freezegun" }, + { name = "ruff" }, ] [[package]] @@ -758,15 +756,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/a5/b2860373aa8de1e626b2bdfdd6df4355f0565b47e51f7d0c54fe70faf8fe/sqlparse-0.5.1-py3-none-any.whl", hash = "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4", size = 44156 }, ] -[[package]] -name = "tblib" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/df/4f2cd7eaa6d41a7994d46527349569d46e34d9cdd07590b5c5b0dcf53de3/tblib-3.0.0.tar.gz", hash = "sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6", size = 30616 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl", hash = "sha256:80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129", size = 12478 }, -] - [[package]] name = "types-pyyaml" version = "6.0.12.20240808"