Giter Club home page Giter Club logo

sync_with_poetry's Introduction

Ciao 👋, I'm Andrea

Solutions Architect & Software Engineer

Me on Twitter Me on Linkedin Me on Stack Overflow i_m_andrea.me RSS

floatingpurr

Ciao, I'm Andrea, a Solutions Architect & Software Engineer focusing on the design and development of robust and resilient systems. Addicted to cappuccino. I’m as curious as my two cats! ^..^ ₍⸍⸌̣ʷ̣̫⸍̣⸌₎

💬 Check out my blog for more! (actually, it resembles much more my personal cookbook)

Cheers!

sync_with_poetry's People

Contributors

berk-tosun avatar chris-rl avatar floatingpurr avatar joshuata avatar pre-commit-ci[bot] avatar real-yfprojects avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

sync_with_poetry's Issues

Matching seems to fails when revision has double quotes

If .pre-commit-config.yaml contains:

- repo: https://github.com/psf/black
  rev: "22.3.0"
  hooks:
  - id: black

then sync_with poetry exists with code 1, but changes nothing.

I added a print there, it told me that pre_commit_repo.rev is 22.3.0while match[4] is 22.3.0"

Sure enough, the regex apparently accepts a double quote at the beginning but not at the end.

From an engineering point of view, I'd say think using regex here is quite brittle. You'd probably be much better off with a style-preserving yaml editor such as ruamel.yaml, which lets you load a yaml, modify it and save it back while preserving empty lines, comments etc.

That said, I see that pre-commit autoupdate uses more or less the same code. And autoupdate does work with quoted revs.

In our case, the main issue is that the check should be with the yaml-loaded version stored in the variable pre_commit_data and not with a regex match.

FR: Strip `frozen: x.x.x` comments

I like to regularly update my pre-commit hooks with pre-commit autoupdate --freeze. Afterwards I run SWP to pin those hooks that are also configured via poetry. (Some hooks aren't python packages so I can't manage all of them via poetry)

This result in lines like the following

rev: 1.7.5 # frozen: 1.7.5
rev: 22.10 # frozen: 22.12

I like that SWP preserves comments (in contrast to pre-commit autoupdate). But I would like it to remove frozen: xxx comments still.

Alternative solution

Instead of a sync hook, can't you just use the poetry environment for hooks that have a CLI (via language: system)? Like with mypy, we do

  - repo: local
    hooks:
      - id: mypy
        name: mypy
        language: system
        entry: poetry run mypy .
        types_or: [ python, pyi ]
        require_serial: true
        pass_filenames: false

This also saves space by not creating two environments. What are your thoughts on that approach?

Autoupdate for flake8 does not work

Hi,
I tried this pre-commit-hook. It seems like something is not working properly (at least for me).

I have the following setup:

.pre-commit-config.yaml

- repo: https://gitlab.com/pycqa/flake8
    rev: 3.9.0
    hooks:
      - id: flake8
        additional_dependencies: [
            'pycodestyle==2.7.0',  # E,W
            'pyflakes==2.3.0',  # F
            'mccabe==0.6.1',  # C
            'flake8-bugbear==21.3.2',  # B
            'flake8-builtins==1.5.3',  # A
            'flake8-comprehensions==3.3.1',  # C4
            'flake8-debugger==4.0.0',  # T1
            'flake8-logging-format==0.6.0',  # G
            'flake8-print==4.0.0',  # T0
        ]
        args: [
            '--select=E,W,F,C,B,A,C4,T1,G,T0',
            '--ignore=W503,B305,A003,G003,G004',
            '--max-complexity=10',
            '--max-line-length=120',
        ]
- repo: https://github.com/floatingpurr/sync_with_poetry
    rev: 0.2.0
    hooks:
      - id: sync_with_poetry
        name: sync pre-commit dependencies with poetry
        args: [
            '--config', 'src/python/.pre-commit-config.yaml',
            '--all',  # Scan all dependencies in poetry.lock (main and dev)
        ]

poetry.lock

[[package]]
name = "flake8"
version = "4.0.1"
description = "the modular source code checker: pep8 pyflakes and co"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
mccabe = ">=0.6.0,<0.7.0"
pycodestyle = ">=2.8.0,<2.9.0"
pyflakes = ">=2.4.0,<2.5.0"

When running the pre-commit hook, flake8 won't update. Other dependencies like black do update.
First I thought it might be because of a major version jump. But the issue also remains if the rev in pre-commit-config is 4.0.0. It won't update to 4.0.1 (from poetry.lock).

Any ideas?

Feature request: static checks dependencies

When using pre-commit with a static type checker (mypy, pyright, ...), one often needs to add dependencies to the hook so that the type checker knows how to navigate the project (example)

It would be nice if sync_with_poetry would also sync those. For example, we could bind a hook name with a poetry group name in the sync_with_poetry args, and it would get all of the deps defined in the poetry group, put them in the expected format and write them back in the yaml ?

Allow passing in custom db

It would be very useful to be able to define a file with mappings that could be passed as an argument/config option to the hook so that a user could define their own outside of those shipped with the hook

Run sync_with_poetry after changing the .pre-commit.config.yaml

I noticed that sync_with_poetry only runs after changing and committing the poetry.lock file. Since in our project there are more frequent changes within .pre-commit.config.yaml, it would be great that a commit of this file would also trigger "sync_with_poetry". Is this possible?

Poetry 1.5.0 removes category field.

With v1.5.0 poetry no longer writes a category field to poetry.lock.
This results in the following error:

Traceback (most recent call last):
  File "/home/user/.cache/pre-commit/repo6cjh4d2_/py_env-python3.8/bin/swp", line 8, in <module>
    sys.exit(main())
  File "/home/user/.cache/pre-commit/repo6cjh4d2_/py_env-python3.8/lib/python3.8/site-packages/sync_with_poetry/swp.py", line 170, in main
    retv |= sync_repos(filename, args.all, args.skip, args.config, mapping)
  File "/home/user/.cache/pre-commit/repo6cjh4d2_/py_env-python3.8/lib/python3.8/site-packages/sync_with_poetry/swp.py", line 99, in sync_repos
    poetry_items = PoetryItems(content["package"], all, skip, db)
  File "/home/user/.cache/pre-commit/repo6cjh4d2_/py_env-python3.8/lib/python3.8/site-packages/sync_with_poetry/swp.py", line 58, in __init__
    if ((not all) and package["category"] != "dev") or package["name"] in skip:
  File "/home/user/.cache/pre-commit/repo6cjh4d2_/py_env-python3.8/lib/python3.8/site-packages/tomlkit/items.py", line 1007, in __getitem__
    return self._value[key]
  File "/home/user/.cache/pre-commit/repo6cjh4d2_/py_env-python3.8/lib/python3.8/site-packages/tomlkit/container.py", line 553, in __getitem__
    raise NonExistentKey(key)
tomlkit.exceptions.NonExistentKey: 'Key "category" does not exist.'

Request: Sync rev of sync_with_poetry and poetry

First of all, great hook!

The idea behind the hook is to have a single source of truth for all our packages, right? The rev of all my pre-commit hooks are managed in the pyproject.toml except for sync_with_poetry and poetry itself. I have to adjust my .pre-commit-config.yaml manually, for these two.

Perhaps, sync of these two special cases can be covered by sync_with_poetry as well?


I have tried using a custom db.json which includes:

    "poetry": {
        "repo": "https://github.com/python-poetry/poetry",
        "rev": "${rev}"
    },

It did not work.


Relevant part of .pre-commit-config.yaml:

- repo: https://github.com/floatingpurr/sync_with_poetry
    rev: 0.4.0
    hooks:
      - id: sync_with_poetry
        args: [--db, .sync-with-poetry-db.json]
- repo: https://github.com/python-poetry/poetry
    rev: 1.2.0  # sync_with_poetry fails
    hooks:
      - id: poetry-check
      - id: poetry-lock
      - id: poetry-export
        args: ["-f", "requirements.txt", "-o", "requirements.txt"]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.