add jemalloc support
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 14 Apr 2020 21:01:45 +0000 (23:01 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Tue, 14 Apr 2020 21:01:45 +0000 (23:01 +0200)
.pre-commit-config.yaml [new file with mode: 0644]
Dockerfile
pylintrc [new file with mode: 0644]
requirements.txt
setup.cfg [new file with mode: 0644]

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644 (file)
index 0000000..390f516
--- /dev/null
@@ -0,0 +1,19 @@
+repos:
+  - repo: https://github.com/psf/black
+    rev: 19.3b0
+    hooks:
+      - id: black
+        args:
+          - --safe
+          - --quiet
+  - repo: https://gitlab.com/pycqa/flake8
+    rev: 3.7.8
+    hooks:
+      - id: flake8
+        additional_dependencies:
+          - flake8-docstrings==1.3.1
+          - pydocstyle==4.0.0
+  - repo: https://github.com/pre-commit/mirrors-isort
+    rev: v4.3.21
+    hooks:
+      - id: isort
index ec3a702f8fa933f54936f21bb57b5025129c18ef..405c42f91ad3d4706a181a9f5f8a6e30fb0e87ff 100755 (executable)
@@ -1,9 +1,9 @@
-FROM python:3.7-slim
+FROM python:slim
 
 COPY requirements.txt requirements.txt
 RUN apt-get update && apt-get install -y --no-install-recommends \
                # required packages
-               flac sox libsox-fmt-mp3 zip curl wget unzip ffmpeg libsndfile1 libtag1v5 \
+               flac sox libsox-fmt-mp3 zip curl wget unzip ffmpeg libsndfile1 libtag1v5 libjemalloc1 \
                # build packages
                libtag1-dev build-essential && \
        # install required python packages with pip
@@ -25,4 +25,6 @@ ENV mass_debug false
 ENV mass_datadir /data
 ENV mass_update false
 
+ENV LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
+
 CMD ["/usr/src/app/mass.py"]
\ No newline at end of file
diff --git a/pylintrc b/pylintrc
new file mode 100644 (file)
index 0000000..1f4053f
--- /dev/null
+++ b/pylintrc
@@ -0,0 +1,62 @@
+[MASTER]
+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
+persistent=no
+
+[BASIC]
+good-names=id,i,j,k,ex,Run,_,fp
+
+[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
+# global-statement - used for the on-demand requirement installation
+# redefined-variable-type - this is Python, we're duck typing!
+# 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
+# unnecessary-pass - readability for functions which only contain pass
+# import-outside-toplevel - TODO
+# too-many-ancestors - it's too strict.
+disable=
+  format,
+  abstract-class-little-used,
+  abstract-method,
+  cyclic-import,
+  duplicate-code,
+  global-statement,
+  import-outside-toplevel,
+  inconsistent-return-statements,
+  locally-disabled,
+  not-context-manager,
+  redefined-variable-type,
+  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,
+  unnecessary-pass,
+  unused-argument
+
+[REPORTS]
+score=no
+
+[TYPECHECK]
+# For attrs
+ignored-classes=_CountingAttr
+
+[FORMAT]
+expected-line-ending-format=LF
\ No newline at end of file
index 7a19dff030fdb032e8ec97035d629c43faa9d7ff..3389454e1f7c53c9d6d7a096f32745310f04aa57 100755 (executable)
@@ -1,5 +1,5 @@
 cytoolz
-aiohttp
+aiohttp[speedups]
 requests
 spotify_token
 protobuf
diff --git a/setup.cfg b/setup.cfg
new file mode 100644 (file)
index 0000000..05e3f75
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,35 @@
+[flake8]
+exclude = .venv,.git,.tox,docs,venv,bin,lib,deps,build
+# To work with Black
+max-line-length = 88
+# E501: line too long
+# W503: Line break occurred before a binary operator
+# E203: Whitespace before ':'
+# D202 No blank lines allowed after function docstring
+# W504 line break after binary operator
+ignore =
+    E501,
+    W503,
+    E203,
+    D202,
+    W504
+
+[isort]
+# https://github.com/timothycrosley/isort
+# https://github.com/timothycrosley/isort/wiki/isort-Settings
+# splits long import on multiple lines indented by 4 spaces
+multi_line_output = 3
+include_trailing_comma=True
+force_grid_wrap=0
+use_parentheses=True
+line_length=88
+indent = "    "
+# by default isort don't check module indexes
+not_skip = __init__.py
+# will group `import x` and `from x import` of the same module.
+force_sort_within_sections = true
+sections = FUTURE,STDLIB,INBETWEENS,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
+default_section = THIRDPARTY
+known_first_party = homeassistant,tests
+forced_separate = tests
+combine_as_imports = true
\ No newline at end of file