25th November 2022
Coding⚑
Languages⚑
PDM⚑
-
Correction: Solve circular dependencies by manual constraining.
It also helps to run
pdm updatewith the-vflag, that way you see which are the candidates that are rejected, and you can put the constrain you want. For example, I was seeing the next traceback:pdm.termui: Conflicts detected: pyflakes>=3.0.0 (from <Candidate autoflake 2.0.0 from https://pypi.org/simple/autoflake/>) pyflakes<2.5.0,>=2.4.0 (from <Candidate flake8 4.0.1 from unknown>)So I added a new dependency to pin it:
[tool.pdm.dev-dependencies] dependencies = [ # Until flakeheaven supports flake8 5.x # https://github.com/flakeheaven/flakeheaven/issues/132 "flake8>=4.0.1,<5.0.0", "pyflakes<2.5.0", ]If none of the above works, you can override them:
[tool.pdm.overrides] "importlib-metadata" = ">=3.10"
Click⚑
-
For basic command line tools with file system operations, the
CliRunner.isolated_filesystem()method is useful for setting the current working directory to a new, empty folder.from click.testing import CliRunner from cat import cat def test_cat(): runner = CliRunner() with runner.isolated_filesystem(): with open("hello.txt", "w") as f: f.write("Hello World!") result = runner.invoke(cat, ["hello.txt"]) assert result.exit_code == 0 assert result.output == "Hello World!\n"Pass
temp_dirto control where the temporary directory is created. The directory will not be removed by Click in this case. This is useful to integrate with a framework like Pytest that manages temporary files.def test_keep_dir(tmp_path): runner = CliRunner() with runner.isolated_filesystem(temp_dir=tmp_path) as td: ...
Python Snippets⚑
-
New: Pathlib make parent directories if they don't exist.
pathlib.Path("/tmp/sub1/sub2").mkdir(parents=True, exist_ok=True)From the docs:
-
If
parentsistrue, any missing parents of this path are created as needed; they are created with the default permissions without taking mode into account (mimicking the POSIXmkdir -pcommand). -
If
parentsisfalse(the default), a missing parent raisesFileNotFoundError. -
If
exist_okisfalse(the default),FileExistsErroris raised if the target directory already exists. -
If
exist_okistrue,FileExistsErrorexceptions will be ignored (same behavior as the POSIXmkdir -pcommand), but only if the last path component is not an existing non-directory file.
-
-
Create a file at this given path.
pathlib.Path("/tmp/file.txt").touch(exist_ok=True)If the file already exists, the function succeeds if
exist_okistrue(and its modification time is updated to the current time), otherwiseFileExistsErroris raised.If the parent directory doesn't exist you need to create it first.
```python global_conf_path = xdg_home / "autoimport" / "config.toml" global_conf_path.parent.mkdir(parents=True) global_conf_path.touch(exist_ok=True)