use regex::Regex;
pub struct PythonPatterns {
external_patterns: Vec<Regex>,
cache_patterns: Vec<Regex>,
extensions: Vec<String>,
}
impl PythonPatterns {
pub fn new() -> Self {
let external_patterns = vec![
Regex::new(r"__pycache__").unwrap(),
Regex::new(r"\.pyc$").unwrap(),
Regex::new(r"\.pyo$").unwrap(),
Regex::new(r"\.pyd$").unwrap(),
Regex::new(r"site-packages").unwrap(),
Regex::new(r"dist-packages").unwrap(),
Regex::new(r"\.egg-info").unwrap(),
Regex::new(r"\.dist-info").unwrap(),
Regex::new(r"\.whl$").unwrap(),
Regex::new(r"\.egg$").unwrap(),
Regex::new(r"\.venv/").unwrap(),
Regex::new(r"venv/").unwrap(),
Regex::new(r"env/").unwrap(),
Regex::new(r"\.env/").unwrap(),
Regex::new(r"virtualenv/").unwrap(),
Regex::new(r"\.conda/").unwrap(),
Regex::new(r"conda-meta/").unwrap(),
Regex::new(r"envs/").unwrap(),
Regex::new(r"pkgs/").unwrap(),
Regex::new(r"build/").unwrap(),
Regex::new(r"dist/").unwrap(),
Regex::new(r"\.build/").unwrap(),
Regex::new(r"\.dist/").unwrap(),
];
let cache_patterns = vec![
Regex::new(r"\.pytest_cache").unwrap(),
Regex::new(r"\.tox/").unwrap(),
Regex::new(r"\.nox/").unwrap(),
Regex::new(r"\.coverage").unwrap(),
Regex::new(r"htmlcov/").unwrap(),
Regex::new(r"\.coverage\..*").unwrap(),
Regex::new(r"\.mypy_cache").unwrap(),
Regex::new(r"\.pytype/").unwrap(),
Regex::new(r"\.pyre/").unwrap(),
Regex::new(r"\.dmypy\.json").unwrap(),
Regex::new(r"\.ruff_cache").unwrap(),
Regex::new(r"\.black").unwrap(),
Regex::new(r"\.pylint\.d/").unwrap(),
Regex::new(r"\.flake8").unwrap(),
Regex::new(r"\.ipynb_checkpoints").unwrap(),
Regex::new(r"\.jupyter/").unwrap(),
Regex::new(r"\.sphinx/").unwrap(),
Regex::new(r"docs/_build/").unwrap(),
Regex::new(r"docs/build/").unwrap(),
Regex::new(r"\.doctrees/").unwrap(),
Regex::new(r"\.prof").unwrap(),
Regex::new(r"\.profile").unwrap(),
Regex::new(r"\.pstats").unwrap(),
Regex::new(r"\.eggs/").unwrap(),
Regex::new(r"\.cache/").unwrap(),
Regex::new(r"\.pip/").unwrap(),
Regex::new(r"\.django_cache/").unwrap(),
Regex::new(r"\.flask_session/").unwrap(),
Regex::new(r"\.wandb/").unwrap(),
Regex::new(r"\.mlflow/").unwrap(),
Regex::new(r"\.tensorboard/").unwrap(),
];
let extensions = vec![
"py".to_string(), "pyw".to_string(), "pyi".to_string(),
"pyx".to_string(), "pxd".to_string(), "pxi".to_string(),
"ipynb".to_string(),
"pyt".to_string(), "pth".to_string(),
"wsgi".to_string(), "asgi".to_string(),
"cfg".to_string(), "ini".to_string(),
];
Self {
external_patterns,
cache_patterns,
extensions,
}
}
pub fn get_external_patterns(&self) -> &[Regex] {
&self.external_patterns
}
pub fn get_cache_patterns(&self) -> &[Regex] {
&self.cache_patterns
}
pub fn get_extensions(&self) -> &[String] {
&self.extensions
}
pub fn get_script_names() -> Vec<&'static str> {
vec![
"requirements.txt", "requirements-dev.txt", "requirements-test.txt",
"dev-requirements.txt", "test-requirements.txt",
"setup.py", "setup.cfg", "pyproject.toml", "poetry.lock",
"Pipfile", "Pipfile.lock", "pipenv.lock",
"environment.yml", "environment.yaml", "conda.yaml",
"conda-requirements.txt", "environment-dev.yml",
"pyproject.toml", "setup.cfg", "MANIFEST.in",
"flit.ini", "pdm.lock", "poetry.toml",
"tox.ini", "pytest.ini", "pytest.cfg",
"nose.cfg", "nose2.cfg", "unittest.cfg",
"conftest.py", "test_*.py", "*_test.py",
".coveragerc", "coverage.ini",
"mypy.ini", ".mypy.ini", "mypy.cfg",
".flake8", ".pylintrc", "pylint.cfg",
".bandit", "bandit.yaml", "bandit.yml",
".pre-commit-config.yaml", ".pre-commit-hooks.yaml",
"pycodestyle.cfg", "pep8.cfg",
"ruff.toml", ".ruff.toml",
"conf.py", "make.bat", "Makefile",
"docs/conf.py", "doc/conf.py",
"sphinx.cfg", "readthedocs.yml", ".readthedocs.yml",
"manage.py", "wsgi.py", "asgi.py",
"app.py", "main.py", "run.py",
"flask_app.py", "django_app.py",
"fastapi_app.py", "starlette_app.py",
"gunicorn.conf.py", "uwsgi.ini",
"jupyter_notebook_config.py", "ipython_config.py",
"notebook.json", "lab.json",
"requirements-gpu.txt", "requirements-cpu.txt",
"Dockerfile", "docker-compose.yml", "docker-compose.yaml",
"Procfile", "runtime.txt", "app.yaml",
"serverless.yml", "serverless.yaml",
".github/workflows/python.yml", ".gitlab-ci.yml",
"azure-pipelines.yml", "Jenkinsfile",
"noxfile.py", "tasks.py",
"alembic.ini", "migrations/", "models.py",
"database.py", "db.py", "schema.py",
"config.py", "settings.py", "local_settings.py",
".env", ".env.local", ".env.example",
"logging.conf", "logging.ini",
]
}
}