1use regex::Regex;
2
3pub struct PythonPatterns {
4 external_patterns: Vec<Regex>,
5 cache_patterns: Vec<Regex>,
6 extensions: Vec<String>,
7}
8
9impl PythonPatterns {
10 pub fn new() -> Self {
11 let external_patterns = vec![
12 Regex::new(r"__pycache__").unwrap(),
14 Regex::new(r"\.pyc$").unwrap(),
15 Regex::new(r"\.pyo$").unwrap(),
16 Regex::new(r"\.pyd$").unwrap(),
17
18 Regex::new(r"site-packages").unwrap(),
20 Regex::new(r"dist-packages").unwrap(),
21 Regex::new(r"\.egg-info").unwrap(),
22 Regex::new(r"\.dist-info").unwrap(),
23 Regex::new(r"\.whl$").unwrap(),
24 Regex::new(r"\.egg$").unwrap(),
25
26 Regex::new(r"\.venv/").unwrap(),
28 Regex::new(r"venv/").unwrap(),
29 Regex::new(r"env/").unwrap(),
30 Regex::new(r"\.env/").unwrap(),
31 Regex::new(r"virtualenv/").unwrap(),
32
33 Regex::new(r"\.conda/").unwrap(),
35 Regex::new(r"conda-meta/").unwrap(),
36 Regex::new(r"envs/").unwrap(),
37 Regex::new(r"pkgs/").unwrap(),
38
39 Regex::new(r"build/").unwrap(),
41 Regex::new(r"dist/").unwrap(),
42 Regex::new(r"\.build/").unwrap(),
43 Regex::new(r"\.dist/").unwrap(),
44 ];
45
46 let cache_patterns = vec![
47 Regex::new(r"\.pytest_cache").unwrap(),
49 Regex::new(r"\.tox/").unwrap(),
50 Regex::new(r"\.nox/").unwrap(),
51 Regex::new(r"\.coverage").unwrap(),
52 Regex::new(r"htmlcov/").unwrap(),
53 Regex::new(r"\.coverage\..*").unwrap(),
54
55 Regex::new(r"\.mypy_cache").unwrap(),
57 Regex::new(r"\.pytype/").unwrap(),
58 Regex::new(r"\.pyre/").unwrap(),
59 Regex::new(r"\.dmypy\.json").unwrap(),
60
61 Regex::new(r"\.ruff_cache").unwrap(),
63 Regex::new(r"\.black").unwrap(),
64 Regex::new(r"\.pylint\.d/").unwrap(),
65 Regex::new(r"\.flake8").unwrap(),
66
67 Regex::new(r"\.ipynb_checkpoints").unwrap(),
69 Regex::new(r"\.jupyter/").unwrap(),
70
71 Regex::new(r"\.sphinx/").unwrap(),
73 Regex::new(r"docs/_build/").unwrap(),
74 Regex::new(r"docs/build/").unwrap(),
75 Regex::new(r"\.doctrees/").unwrap(),
76
77 Regex::new(r"\.prof").unwrap(),
79 Regex::new(r"\.profile").unwrap(),
80 Regex::new(r"\.pstats").unwrap(),
81
82 Regex::new(r"\.eggs/").unwrap(),
84 Regex::new(r"\.cache/").unwrap(),
85 Regex::new(r"\.pip/").unwrap(),
86
87 Regex::new(r"\.django_cache/").unwrap(),
89 Regex::new(r"\.flask_session/").unwrap(),
90
91 Regex::new(r"\.wandb/").unwrap(),
93 Regex::new(r"\.mlflow/").unwrap(),
94 Regex::new(r"\.tensorboard/").unwrap(),
95 ];
96
97 let extensions = vec![
98 "py".to_string(), "pyw".to_string(), "pyi".to_string(),
100 "pyx".to_string(), "pxd".to_string(), "pxi".to_string(),
101
102 "ipynb".to_string(),
104
105 "pyt".to_string(), "pth".to_string(),
107
108 "wsgi".to_string(), "asgi".to_string(),
110
111 "cfg".to_string(), "ini".to_string(),
113 ];
114
115 Self {
116 external_patterns,
117 cache_patterns,
118 extensions,
119 }
120 }
121
122 pub fn get_external_patterns(&self) -> &[Regex] {
123 &self.external_patterns
124 }
125
126 pub fn get_cache_patterns(&self) -> &[Regex] {
127 &self.cache_patterns
128 }
129
130 pub fn get_extensions(&self) -> &[String] {
131 &self.extensions
132 }
133
134 pub fn get_script_names() -> Vec<&'static str> {
135 vec![
136 "requirements.txt", "requirements-dev.txt", "requirements-test.txt",
138 "dev-requirements.txt", "test-requirements.txt",
139 "setup.py", "setup.cfg", "pyproject.toml", "poetry.lock",
140 "Pipfile", "Pipfile.lock", "pipenv.lock",
141 "environment.yml", "environment.yaml", "conda.yaml",
142 "conda-requirements.txt", "environment-dev.yml",
143
144 "pyproject.toml", "setup.cfg", "MANIFEST.in",
146 "flit.ini", "pdm.lock", "poetry.toml",
147
148 "tox.ini", "pytest.ini", "pytest.cfg",
150 "nose.cfg", "nose2.cfg", "unittest.cfg",
151 "conftest.py", "test_*.py", "*_test.py",
152 ".coveragerc", "coverage.ini",
153
154 "mypy.ini", ".mypy.ini", "mypy.cfg",
156 ".flake8", ".pylintrc", "pylint.cfg",
157 ".bandit", "bandit.yaml", "bandit.yml",
158 ".pre-commit-config.yaml", ".pre-commit-hooks.yaml",
159 "pycodestyle.cfg", "pep8.cfg",
160 "ruff.toml", ".ruff.toml",
161
162 "conf.py", "make.bat", "Makefile",
164 "docs/conf.py", "doc/conf.py",
165 "sphinx.cfg", "readthedocs.yml", ".readthedocs.yml",
166
167 "manage.py", "wsgi.py", "asgi.py",
169 "app.py", "main.py", "run.py",
170 "flask_app.py", "django_app.py",
171 "fastapi_app.py", "starlette_app.py",
172 "gunicorn.conf.py", "uwsgi.ini",
173
174 "jupyter_notebook_config.py", "ipython_config.py",
176 "notebook.json", "lab.json",
177 "requirements-gpu.txt", "requirements-cpu.txt",
178
179 "Dockerfile", "docker-compose.yml", "docker-compose.yaml",
181 "Procfile", "runtime.txt", "app.yaml",
182 "serverless.yml", "serverless.yaml",
183
184 ".github/workflows/python.yml", ".gitlab-ci.yml",
186 "azure-pipelines.yml", "Jenkinsfile",
187 "noxfile.py", "tasks.py",
188
189 "alembic.ini", "migrations/", "models.py",
191 "database.py", "db.py", "schema.py",
192
193 "config.py", "settings.py", "local_settings.py",
195 ".env", ".env.local", ".env.example",
196 "logging.conf", "logging.ini",
197 ]
198 }
199}