File size: 7,837 Bytes
8374fda
 
4fa3cbe
 
55a9c25
c85d455
5aebe76
4d21d00
beee51f
8374fda
 
c85d455
 
 
8374fda
 
9f38345
 
 
8374fda
134226f
8374fda
9f38345
8374fda
1df53d1
5643197
9d94a96
 
178ebc4
823ee2f
9d94a96
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79ba043
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79ba043
5e57402
8374fda
 
4bbf21d
9d94a96
4bbf21d
 
 
9d94a96
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d331990
9d94a96
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c30a1d
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fae68c9
 
8374fda
4b2ea64
 
 
9d94a96
5e57402
1df53d1
9d94a96
4b2ea64
8374fda
 
 
9d94a96
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
977caf6
8374fda
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
977caf6
5e57402
 
 
1df53d1
 
 
 
 
 
 
ecc7784
 
d0f416b
 
8374fda
 
 
 
 
 
 
 
9d94a96
8374fda
 
 
9d94a96
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
[gh-actions]
python =
    3.9: py39
    3.10: py310
    # 3.8: py38, rst_linux, rst_mac, readme, linters, coverage-report, qa
    # 3.11: py311, rst_linux, rst_mac, readme, linters, coverage-report, qa
    3.11: py311, rst_linux, rst_mac, readme, coverage-report
    # 3.9: py39
    # 3.10: py310

[tox]
# todo: add back the linters and qa
# envlist = py39, py310, py311, rst_linux, rst_mac, readme, rst, linters, coverage-report, qa
envlist = py39, py310, py311, rst_linux, rst_mac, readme, rst, coverage-report

[testenv]
; conda_deps =
;     rdkit
; conda_channels = rdkit
deps =
    -r{toxinidir}/requirements_dev.txt
commands =
    # coverage run --rcfile=tox.ini -m pytest tests
    python -m pip install --upgrade pip
    # pip install -r requirements.txt
    # pip install .
    # coverage run --source=selector --rcfile=tox.ini -m pytest selector selector/test
    # python -m pytest --cov-config=.coveragerc --cov=selector --cov-report=xml --color=yes selector/test
    python -m pytest --cov-config=.coveragerc --cov=selector --cov-report=xml --color=yes

# pytest --cov-config=.coveragerc --cov=selector/test
# can run it if needed
# coverage report -m
# prevent exit when error is encountered
ignore_errors = true

[testenv:readme]
skip_install = true
deps =
    readme_renderer
    twine
commands =
    python setup.py sdist bdist_wheel
    twine check dist/*

[testenv:rst_linux]
platform =
    linux
skip_install = true
deps =
    doc8
    rstcheck==3.3.1
commands =
    doc8 --config tox.ini doc/
# ignore code-block related error because
# the Sphinx support in rstcheck is minimal. This results in false positives
# rstcheck uses Docutils to parse reStructuredText files and extract code blocks
# fixme: check updates on the following website in the future
# coala.gitbooks.io/projects/content/en/projects/rstcheck-with-better-sphinx-suppor.html
    rstcheck --recursive doc/ --report error \
    --ignore-directives automodule,autoclass,autofunction,bibliography,code-block \
    --ignore-roles cite,mod,class,lineno --ignore-messages code-block

[testenv:rst_mac]
platform =
    darwin
skip_install = true
deps = {[testenv:rst_linux]deps}
commands = {[testenv:rst_linux]commands}

[testenv:linters]
deps =
    flake8
    flake8-docstrings
    flake8-import-order>=0.9
    flake8-colors
    pep8-naming
    pylint==2.13.9
    # black
    bandit
commands =
    flake8 selector/ selector/test setup.py
    pylint selector --rcfile=tox.ini --disable=similarities
    # black -l 100 --check ./
    # black -l 100 --diff ./
    # Use bandit configuration file
    bandit -r selector -c .bandit.yml

ignore_errors = true

[testenv:coverage-report]
deps = coverage>=4.2
skip_install = true
commands =
# coverage combine --rcfile=tox.ini
    coverage report

[testenv:qa]
deps =
    {[testenv]deps}
    {[testenv:linters]deps}
    {[testenv:coverage-report]deps}
commands =
    {[testenv]commands}
    {[testenv:linters]commands}
# {[testenv:coverage-report]commands}
ignore_errors = true

# pytest configuration
[pytest]
addopts = --cache-clear
          --showlocals
          -v
          -r a
          --cov-report term-missing
          --cov selector
# Do not run tests in the build folder
norecursedirs = build

# flake8 configuration
[flake8]
exclude =
    __init__.py,
    .tox,
    .git,
    __pycache__,
    build,
    dist,
    *.pyc,
    *.egg-info,
    .cache,
    .eggs,
    _version.py,

max-line-length = 100
import-order-style = google
ignore =
# E121 : continuation line under-indented for hanging indent
    E121,
# E123 : closing bracket does not match indentation of opening bracket’s line
    E123,
# E126 : continuation line over-indented for hanging indent
    E126,
# E226 : missing whitespace around arithmetic operator
    E226,
# E241 : multiple spaces after ‘,’
# E242 : tab after ‘,’
    E24,
# E704 : multiple statements on one line (def)
    E704,
# W503 : line break occurred before a binary operator
    W503,
# W504 : Line break occurred after a binary operator
    W504,
# D202: No blank lines allowed after function docstring
    D202,
# E203: Whitespace before ':'
    E203,
# E731: Do not assign a lambda expression, use a def
    E731,
# D401: First line should be in imperative mood: 'Do', not 'Does'
    D401,

per-file-ignores =
# F401: Unused import
# this is used to define the data typing
    selector/utils.py: F401,
# E1101: rdkit.Chem has no attribute xxx
# D403: first word of the first line should be properly capitalized
    selector/feature.py: E1101, D403

# doc8 configuration
[doc8]
# Ignore target directories and autogenerated files
ignore-path = doc/_build/, build/, selector.egg-info/, selector.egg-info, .*/, doc/intro_about.rst
# File extensions to use
extensions = .rst, .txt
# Maximal line length should be 100
max-line-length = 100
# Disable some doc8 checks:
# D000: Check RST validity (cannot handle the "linenos" directive)
# D002: Trailing whitespace
# D004: Found literal carriage return
# Both D002 and D004 can be problematic in Windows platform, line ending is `\r\n`,
# but in Linux and MacOS, it's "\n"
# Known issue of doc8, https://bugs.launchpad.net/doc8/+bug/1756704
# ignore = D000,D002,D004
ignore = D000

# pylint configuration
[MASTER]
# This is a known issue of pylint with recognizing numpy members
# https://github.com/PyCQA/pylint/issues/779
# https://stackoverflow.com/questions/20553551/how-do-i-get-pylint-to-recognize-numpy-members
extension-pkg-whitelist=numpy

[FORMAT]
# Maximum number of characters on a single line.
max-line-length=100

[MESSAGES CONTROL]
# disable pylint warnings
disable=
# attribute-defined-outside-init (W0201):
# Attribute %r defined outside __init__ Used when an instance attribute is
# defined outside the __init__ method.
    W0201,
# too-many-instance-attributes (R0902):
# Too many instance attributes (%s/%s) Used when class has too many instance
# attributes, try to reduce this to get a simpler (and so easier to use)
# class.
    R0902,
# too many branches (R0912)
    R0912,
# too-many-arguments (R0913):
# Too many arguments (%s/%s) Used when a function or method takes too many
# arguments.
    R0913,
# Too many local variables (r0914)
    R0914,
# Too many statements (R0915)
    R0915,
# fixme (W0511):
# Used when a warning note as FIXME or XXX is detected.
    W0511,
# bad-continuation (C0330):
# Wrong hanging indentation before block (add 4 spaces).
    C0330,
# wrong-import-order (C0411):
# %s comes before %s Used when PEP8 import order is not respected (standard
# imports first, then third-party libraries, then local imports)
    C0411,
# arguments-differ (W0221):
# Parameters differ from %s %r method Used when a method has a different
# number of arguments than in the implemented interface or in an overridden
# method.
    W0221,
# unecessary "else" after "return" (R1705)
    R1705,
# Value XX is unsubscriptable (E1136). this is a open issue of pylint
# https://github.com/PyCQA/pylint/issues/3139
    E1136,
# Used when a name doesn't doesn't fit the naming convention associated to its type
# (constant, variable, class…).
    C0103,
# Unnecessary pass statement
    W0107,
# Module 'rdkit.Chem' has no 'ForwardSDMolSupplier' member (no-member)
    E1101,
# todo: fix this one later and this is a temporary solution
# E0401: Unable to import xxx (import-error)
    E0401,
# R1721: Unnecessary use of a comprehension
    R1721,
# I1101: Module xxx has no yyy member (no-member)
    I1101,
# R0903: Too few public methods (too-few-public-methods)
    R0903,
# R1702: Too many nested blocks (too-many-nested-blocks)
    R1702,

[SIMILARITIES]
min-similarity-lines=5

# coverage configuration
[run]
branch = True
parallel = True
source = selector

[paths]
source =
    selector
    .tox/*/lib/python*/site-packages/selector
    .tox/pypy*/site-packages/selector