Skip to content

Commit

Permalink
Merge remote-tracking branch 'blueprint/dev' into dev
Browse files Browse the repository at this point in the history
# Conflicts:
#	hacs.json
#	requirements.txt
  • Loading branch information
Limych committed Feb 8, 2023
2 parents 6e43dfd + f1a647f commit 14b67da
Show file tree
Hide file tree
Showing 13 changed files with 255 additions and 25 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ jobs:
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
Expand All @@ -61,7 +61,7 @@ jobs:
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

# If the Autobuild fails above, remove it and uncomment the following three lines.
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

# - run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/issue-lock.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v3
- uses: dessant/lock-threads@v4
with:
github-token: ${{ github.token }}
issue-lock-inactive-days: 30
Expand Down
25 changes: 17 additions & 8 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,38 @@ repos:
entry: bin/update_manifest
language: script
files: ^(custom_components/.+/const\.py|requirements\.txt)$
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.0.241
hooks:
- id: ruff
args:
- --fix
files: ^(custom_components|bin|tests)/.+\.py$
- repo: https://github.com/asottile/pyupgrade
rev: v2.7.4
rev: v3.3.1
hooks:
- id: pyupgrade
args: [--py37-plus]
args: [ --py310-plus ]
stages: [manual]
- repo: https://github.com/psf/black
rev: 22.3.0
rev: 23.1.0
hooks:
- id: black
args:
- --safe
- --quiet
files: ^(custom_components|bin|tests)/.+\.py$
- repo: https://gitlab.com/pycqa/flake8
rev: 3.8.1
- repo: https://github.com/pycqa/flake8.git
rev: 6.0.0
hooks:
- id: flake8
additional_dependencies:
- flake8-docstrings==1.5.0
- pydocstyle==5.0.2
files: ^(custom_components|bin|tests)/.+\.py$
stages: [manual]
- repo: https://github.com/PyCQA/bandit
rev: 1.7.0
rev: 1.7.4
hooks:
- id: bandit
args:
Expand All @@ -37,11 +46,11 @@ repos:
- --configfile=tests/bandit.yaml
files: ^(custom_components|bin|tests)/.+\.py$
- repo: https://github.com/pre-commit/mirrors-isort
rev: v5.6.4
rev: v5.10.1
hooks:
- id: isort
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.5.0
rev: v4.4.0
hooks:
- id: check-executables-have-shebangs
stages: [manual]
Expand Down
1 change: 0 additions & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,3 @@
}
]
}

2 changes: 1 addition & 1 deletion bin/release
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ log.info "Commit tagged as v$new"
if echo "${new}" | grep -q "-"; then
dev=$(bump_prerel "${new}")
else
dev="$(echo "${new}" | awk -F. '/[0-9]+\./{$NF++;print}' OFS=.)-alpha"
dev="$(echo "${new}" | awk -F. '/[0-9]+\./{($NF)++;print}' OFS=.)-alpha"
fi

log.info "Patch files to version '${dev}'..."
Expand Down
4 changes: 3 additions & 1 deletion bin/setup
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ source ./bin/_common

if [ ! -d "venv" ]; then
log.info "Initializing the virtual environment..."
${python} -m venv venv
# For error 'executable `python` not found' run
# rm -Rf ~/.local/share/virtualenv
${python} -m venv ./venv
source ./venv/bin/activate
python="${ROOT}/venv/bin/python3"
fi
Expand Down
3 changes: 2 additions & 1 deletion bin/update_requirements
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ def get_package(requre: str) -> str:

harequire = ["homeassistant"]
request = requests.get(
"https://raw.githubusercontent.com/home-assistant/core/dev/requirements.txt"
"https://raw.githubusercontent.com/home-assistant/core/dev/requirements.txt",
timeout=10
)
request = request.text.split("\n")
for req in request:
Expand Down
2 changes: 1 addition & 1 deletion hacs.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "Gismeteo",
"hacs": "1.6.0",
"homeassistant": "2022.7.0"
"homeassistant": "2022.10.0"
}
219 changes: 219 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
[tool.black]
target-version = ["py310"]
extend-exclude = "/generated/"

[tool.isort]
# https://github.com/PyCQA/isort/wiki/isort-Settings
profile = "black"
# will group `import x` and `from x import` of the same module.
force_sort_within_sections = true
known_first_party = [
"homeassistant",
"tests",
]
forced_separate = [
"tests",
]
combine_as_imports = true

[tool.pylint.MAIN]
py-version = "3.10"
ignore = [
"tests",
]
# Use a conservative default here; 2 should speed up most setups and not hurt
# any too bad. Override on command line as appropriate.
jobs = 2
init-hook = """\
from pathlib import Path; \
import sys; \
from pylint.config import find_default_config_files; \
sys.path.append( \
str(Path(next(find_default_config_files())).parent.joinpath('pylint/plugins'))
) \
"""
load-plugins = [
"pylint.extensions.code_style",
"pylint.extensions.typing",
"hass_enforce_type_hints",
"hass_imports",
"hass_logger",
"pylint_per_file_ignores",
]
persistent = false
extension-pkg-allow-list = [
"av.audio.stream",
"av.stream",
"ciso8601",
"orjson",
"cv2",
]
fail-on = [
"I",
]

[tool.pylint.BASIC]
class-const-naming-style = "any"
good-names = [
"_",
"ev",
"ex",
"fp",
"i",
"id",
"j",
"k",
"Run",
"ip",
]

[tool.pylint."MESSAGES CONTROL"]
# Reasons disabled:
# format - handled by black
# locally-disabled - it spams too much
# duplicate-code - unavoidable
# cyclic-import - doesn't test if both import on load
# abstract-class-little-used - prevents from setting right foundation
# unused-argument - generic callbacks and setup methods create a lot of warnings
# too-many-* - are not enforced for the sake of readability
# too-few-* - same as too-many-*
# abstract-method - with intro of async there are always methods missing
# inconsistent-return-statements - doesn't handle raise
# too-many-ancestors - it's too strict.
# wrong-import-order - isort guards this
# consider-using-f-string - str.format sometimes more readable
# ---
# Pylint CodeStyle plugin
# consider-using-namedtuple-or-dataclass - too opinionated
# consider-using-assignment-expr - decision to use := better left to devs
disable = [
"format",
"abstract-method",
"cyclic-import",
"duplicate-code",
"inconsistent-return-statements",
"locally-disabled",
"not-context-manager",
"too-few-public-methods",
"too-many-ancestors",
"too-many-arguments",
"too-many-branches",
"too-many-instance-attributes",
"too-many-lines",
"too-many-locals",
"too-many-public-methods",
"too-many-return-statements",
"too-many-statements",
"too-many-boolean-expressions",
"unused-argument",
"wrong-import-order",
"consider-using-f-string",
"consider-using-namedtuple-or-dataclass",
"consider-using-assignment-expr",
]
enable = [
#"useless-suppression", # temporarily every now and then to clean them up
"use-symbolic-message-instead",
]

[tool.pylint.REPORTS]
score = false

[tool.pylint.TYPECHECK]
ignored-classes = [
"_CountingAttr", # for attrs
]
mixin-class-rgx = ".*[Mm]ix[Ii]n"

[tool.pylint.FORMAT]
expected-line-ending-format = "LF"

[tool.pylint.EXCEPTIONS]
overgeneral-exceptions = [
"builtins.BaseException",
"builtins.Exception",
# "homeassistant.exceptions.HomeAssistantError", # too many issues
]

[tool.pylint.TYPING]
runtime-typing = false

[tool.pylint.CODE_STYLE]
max-line-length-suggestions = 72

[tool.pylint-per-file-ignores]
# hass-component-root-import: Tests test non-public APIs
# protected-access: Tests do often test internals a lot
# redefined-outer-name: Tests reference fixtures in the test function
"/tests/"="hass-component-root-import,protected-access,redefined-outer-name"

[tool.pytest.ini_options]
testpaths = [
"tests",
]
norecursedirs = [
".git",
"testing_config",
]
log_format = "%(asctime)s.%(msecs)03d %(levelname)-8s %(threadName)s %(name)s:%(filename)s:%(lineno)s %(message)s"
log_date_format = "%Y-%m-%d %H:%M:%S"
asyncio_mode = "auto"

[tool.ruff]
target-version = "py310"

select = [
"C", # complexity
"D", # docstrings
"E", # pycodestyle
"F", # pyflakes/autoflake
"PGH004", # Use specific rule codes when using noqa
"PLC0414", # Useless import alias. Import alias does not rename original package.
"SIM105", # Use contextlib.suppress({exception}) instead of try-except-pass
"SIM117", # Merge with-statements that use the same scope
"SIM300", # Yoda conditions. Use 'age == 42' instead of '42 == age'.
"SIM401", # Use get from dict with default instead of an if block
"T20", # flake8-print
"TRY004", # Prefer TypeError exception for invalid type
"UP", # pyupgrade
"W", # pycodestyle
]

ignore = [
"D202", # No blank lines allowed after function docstring
"D203", # 1 blank line required before class docstring
"D213", # Multi-line docstring summary should start at the second line
"D404", # First word of the docstring should not be This
"D406", # Section name should end with a newline
"D407", # Section name underlining
"D411", # Missing blank line before section
"E501", # line too long
"E731", # do not assign a lambda expression, use a def
]

[tool.ruff.flake8-pytest-style]
fixture-parentheses = false

[tool.ruff.pyupgrade]
keep-runtime-typing = true

[tool.ruff.per-file-ignores]

# TODO: these files have functions that are too complex, but flake8's and ruff's
# complexity (and/or nested-function) handling differs; trying to add a noqa doesn't work
# because the flake8-noqa plugin then disagrees on whether there should be a C901 noqa
# on that line. So, for now, we just ignore C901s on these files as far as ruff is concerned.

"homeassistant/components/light/__init__.py" = ["C901"]
"homeassistant/components/mqtt/discovery.py" = ["C901"]
"homeassistant/components/websocket_api/http.py" = ["C901"]

# Allow for main entry & scripts to write to stdout
"homeassistant/__main__.py" = ["T201"]
"homeassistant/scripts/*" = ["T201"]
"script/*" = ["T20"]

[tool.ruff.mccabe]
max-complexity = 25
4 changes: 2 additions & 2 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
black==22.10.0
packaging==21.3
pre-commit~=2.20
PyGithub~=1.55
pyupgrade~=3.0
PyGithub~=1.57
pyupgrade~=3.3
yamllint~=1.28
6 changes: 3 additions & 3 deletions requirements-test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
asynctest~=0.13
flake8~=5.0
flake8-docstrings~=1.6
mypy==0.982
mypy==1.0.0
pylint~=2.15
pylint-strict-informational==0.1
pytest~=7.1
pytest-cov~=4.0
pytest-homeassistant-custom-component>=0.8
pytest-cov~=3.0
pytest-homeassistant-custom-component>=0.12
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
homeassistant>=2022.7.0
homeassistant>=2022.10.0
4 changes: 2 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ exclude_lines =
raise NotImplemented()
if __name__ == '__main__':
main()
fail_under = 93
; fixme:
;fail_under = 93
show_missing = true

[tool:pytest]
Expand Down Expand Up @@ -54,7 +55,6 @@ known_first_party = custom_components,tests
forced_separate = tests

[mypy]
python_version = 3.9
ignore_errors = true
follow_imports = silent
ignore_missing_imports = true
Expand Down

0 comments on commit 14b67da

Please sign in to comment.