initial script for importing trainer contacts

This commit is contained in:
2026-03-16 12:07:57 +01:00
commit 65d800685a
3 changed files with 683 additions and 0 deletions

286
package_loader.py Normal file
View File

@@ -0,0 +1,286 @@
import os
import sys
import subprocess
# set the name of the virtual environment
# if you want to find the venv from another folder or subfolder:
# go to Settings "ctrl + ," and set "Python: Venv Path (not synched)" to the path where the venv lives
venv_name = ".venv"
def get_list_of_packages_to_load():
# define the packages that should be installed
packages = []
packages.append('ipykernel')
packages.append('ipympl')
packages.append('numpy')
packages.append('pandas')
packages.append('pyarrow')
packages.append('fsspec')
# packages.append('openpyxl')
# packages.append('matplotlib')
# packages.append('pyqt5')
# packages.append('tirex-ts')
# packages.append('torch')
# packages.append('nbconvert')
# packages.append('pyinstaller')
# packages.append('oracledb')
# packages.append('sqlalchemy')
packages.append('requests')
# packages.append('requests_negotiate_sspi ')
# packages.append('ldap3')
# packages.append('mplcursors')
# packages.append('scipy')
# packages.append('geopandas')
# packages.append('geovoronoi')
# packages.append('ConfigParser')
# packages.append('tensorflow') # tensorflow for machine learing
print(packages)
return packages
# region functions
def create_venv(venv_name):
# Check if the venv already exists and if not create it
if os.path.isdir(venv_name):
print(f'Venv "{venv_name}" found')
else:
subprocess.check_call([sys.executable, '-m', 'venv', venv_name])
print(f'Venv "{venv_name}" created')
def get_path_of_venv_executable(venv_name):
# Get the path to the virtual environment
venv_path = os.path.join(os.getcwd(), venv_name)
# Determine the correct pip executable path based on the OS
if sys.platform == "win32":
pip_executable = os.path.join(venv_path, 'Scripts', 'pip.exe')
else:
pip_executable = os.path.join(venv_path, 'bin', 'pip')
return pip_executable
def install_packages(pip_executable, packages_to_load):
# Function that installs all packages whose names are listed in the packages list
list_of_failed_packages = []
for package in packages_to_load:
try:
subprocess.check_call([pip_executable, 'install', package])
except subprocess.CalledProcessError:
list_of_failed_packages.append(package)
# Some prints for logging
print("###############################")
print("The following packages failed to install:")
for failed_package in list_of_failed_packages:
print(f"\t\t{failed_package}")
def initialize_gitignore(venv_name=".venv"):
STANDARD_GITIGNORE = r"""
############################################
# project specific gitignore entries
############################################
############################################
# standard gitignore entries
############################################
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[codz]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py.cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# .python-version
# pipenv
#Pipfile.lock
# UV
#uv.lock
# poetry
#poetry.lock
#poetry.toml
# pdm
#pdm.lock
#pdm.toml
.pdm-python
.pdm-build/
# pixi
.pixi
# PEP 582
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.envrc
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# Abstra
.abstra/
# Ruff
.ruff_cache/
# PyPI config
.pypirc
# Cursor
.cursorignore
.cursorindexingignore
# Marimo
marimo/_static/
marimo/_lsp/
__marimo__/
""".strip()
project_section_start = (
"############################################\n"
"# project specific gitignore entries\n"
f"{venv_name}\n\n"
"############################################"
)
# If .gitignore does not exist create full template
if not os.path.exists(".gitignore"):
with open(".gitignore", "w") as f:
f.write(
project_section_start
+ STANDARD_GITIGNORE.split("############################################\n############################################")[0]
)
return
# Create the virtual environment with the given name (default = .venv)
create_venv(venv_name)
# Get the path to the pip executable of the venv
pip_executable = get_path_of_venv_executable(venv_name)
# Load the list of packages that should be loaded into the venv
packages = get_list_of_packages_to_load()
# Install the packages
install_packages(pip_executable, packages_to_load=packages)
# Make sure none of the contents of the venv folder are tracked in git
initialize_gitignore()