dsfolder 0.0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dsfolder-0.0.0.1/MANIFEST.in +2 -0
- dsfolder-0.0.0.1/PKG-INFO +45 -0
- dsfolder-0.0.0.1/README.md +38 -0
- dsfolder-0.0.0.1/dsfolder.egg-info/PKG-INFO +45 -0
- dsfolder-0.0.0.1/dsfolder.egg-info/SOURCES.txt +75 -0
- dsfolder-0.0.0.1/dsfolder.egg-info/dependency_links.txt +1 -0
- dsfolder-0.0.0.1/dsfolder.egg-info/entry_points.txt +3 -0
- dsfolder-0.0.0.1/dsfolder.egg-info/requires.txt +4 -0
- dsfolder-0.0.0.1/dsfolder.egg-info/top_level.txt +1 -0
- dsfolder-0.0.0.1/dspackagefolder/__init__.py +1 -0
- dsfolder-0.0.0.1/dspackagefolder/install_precommit_and_create_env.py +184 -0
- dsfolder-0.0.0.1/dspackagefolder/main.py +46 -0
- dsfolder-0.0.0.1/dspackagefolder/template/.config/.gitkeep +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/.config/example.toml +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/.gitignore +18 -0
- dsfolder-0.0.0.1/dspackagefolder/template/.pre-commit-config.yaml +13 -0
- dsfolder-0.0.0.1/dspackagefolder/template/.python-version +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/Dockerfile +33 -0
- dsfolder-0.0.0.1/dspackagefolder/template/EXAMPLE/example.py +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/README.md +13 -0
- dsfolder-0.0.0.1/dspackagefolder/template/checklist/.gitignore +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/checklist/GENERIC_CHECKLIST.xlsx +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/checklist/ML_CHECKLIST.xlsx +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/checklist/STATISTICS_CHECKLIST.xlsx +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/data/.gitkeep +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/data/INPUT/.gitkeep +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/data/OUTPUT/.gitkeep +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/logs/.gitkeep +2 -0
- dsfolder-0.0.0.1/dspackagefolder/template/main.py +60 -0
- dsfolder-0.0.0.1/dspackagefolder/template/main_dashboard.py +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/models/.gitignore +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/requirements.txt +6 -0
- dsfolder-0.0.0.1/dspackagefolder/template/sql/.gitkeep +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/sql/query.sql +1 -0
- dsfolder-0.0.0.1/dspackagefolder/template/src/.gitkeep +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/src/__init__.py +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/src/sqlcrud.py +114 -0
- dsfolder-0.0.0.1/dspackagefolder/template/src/utils/config_loader.py +20 -0
- dsfolder-0.0.0.1/dspackagefolder/template/src/utils/env_loader.py +20 -0
- dsfolder-0.0.0.1/dspackagefolder/template/src/utils/logging_config.py +48 -0
- dsfolder-0.0.0.1/dspackagefolder/template/template_notebook.ipynb +384 -0
- dsfolder-0.0.0.1/dspackagefolder/template/unit_testing/.gitkeep +0 -0
- dsfolder-0.0.0.1/dspackagefolder/template/validation/.gitkeep +0 -0
- dsfolder-0.0.0.1/pyproject.toml +37 -0
- dsfolder-0.0.0.1/setup.cfg +4 -0
- dsfolder-0.0.0.1/setup.py +28 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: dsfolder
|
|
3
|
+
Version: 0.0.0.1
|
|
4
|
+
Summary: Add your description here
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
|
|
8
|
+
## Data Science Folder Structure Setup
|
|
9
|
+
|
|
10
|
+
1. This was developed for creating a Python folder to start a data science project.
|
|
11
|
+
|
|
12
|
+
2. It includes preconfigured connections to different systems:
|
|
13
|
+
- uv
|
|
14
|
+
- git
|
|
15
|
+
- GitHub workflow
|
|
16
|
+
- .gitignore
|
|
17
|
+
|
|
18
|
+
3. It also provides small code snippets for connecting to other systems.
|
|
19
|
+
|
|
20
|
+
4. Below are some of the systems included, along with additional setup steps to get them working:
|
|
21
|
+
- logging
|
|
22
|
+
- SQL
|
|
23
|
+
- src
|
|
24
|
+
- config
|
|
25
|
+
- pre-commit hook
|
|
26
|
+
- .gitignore
|
|
27
|
+
- git
|
|
28
|
+
- GitHub workflow
|
|
29
|
+
- uv
|
|
30
|
+
- env
|
|
31
|
+
- validation
|
|
32
|
+
- testing
|
|
33
|
+
- requirements.txt
|
|
34
|
+
- Install dependencies with: `uv install requirements.txt`
|
|
35
|
+
|
|
36
|
+
5. Install the package:
|
|
37
|
+
```bash
|
|
38
|
+
pip install datascience-folder-structure
|
|
39
|
+
6. Create a folder structure:
|
|
40
|
+
```bash
|
|
41
|
+
createdatasciencefolder NameOfProject
|
|
42
|
+
|
|
43
|
+
or
|
|
44
|
+
```bash
|
|
45
|
+
dsf NameOfProject
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
## Data Science Folder Structure Setup
|
|
2
|
+
|
|
3
|
+
1. This was developed for creating a Python folder to start a data science project.
|
|
4
|
+
|
|
5
|
+
2. It includes preconfigured connections to different systems:
|
|
6
|
+
- uv
|
|
7
|
+
- git
|
|
8
|
+
- GitHub workflow
|
|
9
|
+
- .gitignore
|
|
10
|
+
|
|
11
|
+
3. It also provides small code snippets for connecting to other systems.
|
|
12
|
+
|
|
13
|
+
4. Below are some of the systems included, along with additional setup steps to get them working:
|
|
14
|
+
- logging
|
|
15
|
+
- SQL
|
|
16
|
+
- src
|
|
17
|
+
- config
|
|
18
|
+
- pre-commit hook
|
|
19
|
+
- .gitignore
|
|
20
|
+
- git
|
|
21
|
+
- GitHub workflow
|
|
22
|
+
- uv
|
|
23
|
+
- env
|
|
24
|
+
- validation
|
|
25
|
+
- testing
|
|
26
|
+
- requirements.txt
|
|
27
|
+
- Install dependencies with: `uv install requirements.txt`
|
|
28
|
+
|
|
29
|
+
5. Install the package:
|
|
30
|
+
```bash
|
|
31
|
+
pip install datascience-folder-structure
|
|
32
|
+
6. Create a folder structure:
|
|
33
|
+
```bash
|
|
34
|
+
createdatasciencefolder NameOfProject
|
|
35
|
+
|
|
36
|
+
or
|
|
37
|
+
```bash
|
|
38
|
+
dsf NameOfProject
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: dsfolder
|
|
3
|
+
Version: 0.0.0.1
|
|
4
|
+
Summary: Add your description here
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
|
|
8
|
+
## Data Science Folder Structure Setup
|
|
9
|
+
|
|
10
|
+
1. This was developed for creating a Python folder to start a data science project.
|
|
11
|
+
|
|
12
|
+
2. It includes preconfigured connections to different systems:
|
|
13
|
+
- uv
|
|
14
|
+
- git
|
|
15
|
+
- GitHub workflow
|
|
16
|
+
- .gitignore
|
|
17
|
+
|
|
18
|
+
3. It also provides small code snippets for connecting to other systems.
|
|
19
|
+
|
|
20
|
+
4. Below are some of the systems included, along with additional setup steps to get them working:
|
|
21
|
+
- logging
|
|
22
|
+
- SQL
|
|
23
|
+
- src
|
|
24
|
+
- config
|
|
25
|
+
- pre-commit hook
|
|
26
|
+
- .gitignore
|
|
27
|
+
- git
|
|
28
|
+
- GitHub workflow
|
|
29
|
+
- uv
|
|
30
|
+
- env
|
|
31
|
+
- validation
|
|
32
|
+
- testing
|
|
33
|
+
- requirements.txt
|
|
34
|
+
- Install dependencies with: `uv install requirements.txt`
|
|
35
|
+
|
|
36
|
+
5. Install the package:
|
|
37
|
+
```bash
|
|
38
|
+
pip install datascience-folder-structure
|
|
39
|
+
6. Create a folder structure:
|
|
40
|
+
```bash
|
|
41
|
+
createdatasciencefolder NameOfProject
|
|
42
|
+
|
|
43
|
+
or
|
|
44
|
+
```bash
|
|
45
|
+
dsf NameOfProject
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
MANIFEST.in
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
setup.py
|
|
5
|
+
./dspackagefolder/__init__.py
|
|
6
|
+
./dspackagefolder/install_precommit_and_create_env.py
|
|
7
|
+
./dspackagefolder/main.py
|
|
8
|
+
./dspackagefolder/template/.gitignore
|
|
9
|
+
./dspackagefolder/template/.pre-commit-config.yaml
|
|
10
|
+
./dspackagefolder/template/.python-version
|
|
11
|
+
./dspackagefolder/template/Dockerfile
|
|
12
|
+
./dspackagefolder/template/README.md
|
|
13
|
+
./dspackagefolder/template/main.py
|
|
14
|
+
./dspackagefolder/template/main_dashboard.py
|
|
15
|
+
./dspackagefolder/template/requirements.txt
|
|
16
|
+
./dspackagefolder/template/template_notebook.ipynb
|
|
17
|
+
./dspackagefolder/template/.config/.gitkeep
|
|
18
|
+
./dspackagefolder/template/.config/example.toml
|
|
19
|
+
./dspackagefolder/template/EXAMPLE/example.py
|
|
20
|
+
./dspackagefolder/template/checklist/.gitignore
|
|
21
|
+
./dspackagefolder/template/checklist/GENERIC_CHECKLIST.xlsx
|
|
22
|
+
./dspackagefolder/template/checklist/ML_CHECKLIST.xlsx
|
|
23
|
+
./dspackagefolder/template/checklist/STATISTICS_CHECKLIST.xlsx
|
|
24
|
+
./dspackagefolder/template/data/.gitkeep
|
|
25
|
+
./dspackagefolder/template/data/INPUT/.gitkeep
|
|
26
|
+
./dspackagefolder/template/data/OUTPUT/.gitkeep
|
|
27
|
+
./dspackagefolder/template/logs/.gitkeep
|
|
28
|
+
./dspackagefolder/template/models/.gitignore
|
|
29
|
+
./dspackagefolder/template/sql/.gitkeep
|
|
30
|
+
./dspackagefolder/template/sql/query.sql
|
|
31
|
+
./dspackagefolder/template/src/.gitkeep
|
|
32
|
+
./dspackagefolder/template/src/__init__.py
|
|
33
|
+
./dspackagefolder/template/src/sqlcrud.py
|
|
34
|
+
./dspackagefolder/template/src/utils/config_loader.py
|
|
35
|
+
./dspackagefolder/template/src/utils/env_loader.py
|
|
36
|
+
./dspackagefolder/template/src/utils/logging_config.py
|
|
37
|
+
./dspackagefolder/template/unit_testing/.gitkeep
|
|
38
|
+
./dspackagefolder/template/validation/.gitkeep
|
|
39
|
+
dsfolder.egg-info/PKG-INFO
|
|
40
|
+
dsfolder.egg-info/SOURCES.txt
|
|
41
|
+
dsfolder.egg-info/dependency_links.txt
|
|
42
|
+
dsfolder.egg-info/entry_points.txt
|
|
43
|
+
dsfolder.egg-info/requires.txt
|
|
44
|
+
dsfolder.egg-info/top_level.txt
|
|
45
|
+
dspackagefolder/template/.gitignore
|
|
46
|
+
dspackagefolder/template/.pre-commit-config.yaml
|
|
47
|
+
dspackagefolder/template/.python-version
|
|
48
|
+
dspackagefolder/template/Dockerfile
|
|
49
|
+
dspackagefolder/template/README.md
|
|
50
|
+
dspackagefolder/template/main.py
|
|
51
|
+
dspackagefolder/template/main_dashboard.py
|
|
52
|
+
dspackagefolder/template/requirements.txt
|
|
53
|
+
dspackagefolder/template/template_notebook.ipynb
|
|
54
|
+
dspackagefolder/template/.config/.gitkeep
|
|
55
|
+
dspackagefolder/template/.config/example.toml
|
|
56
|
+
dspackagefolder/template/EXAMPLE/example.py
|
|
57
|
+
dspackagefolder/template/checklist/.gitignore
|
|
58
|
+
dspackagefolder/template/checklist/GENERIC_CHECKLIST.xlsx
|
|
59
|
+
dspackagefolder/template/checklist/ML_CHECKLIST.xlsx
|
|
60
|
+
dspackagefolder/template/checklist/STATISTICS_CHECKLIST.xlsx
|
|
61
|
+
dspackagefolder/template/data/.gitkeep
|
|
62
|
+
dspackagefolder/template/data/INPUT/.gitkeep
|
|
63
|
+
dspackagefolder/template/data/OUTPUT/.gitkeep
|
|
64
|
+
dspackagefolder/template/logs/.gitkeep
|
|
65
|
+
dspackagefolder/template/models/.gitignore
|
|
66
|
+
dspackagefolder/template/sql/.gitkeep
|
|
67
|
+
dspackagefolder/template/sql/query.sql
|
|
68
|
+
dspackagefolder/template/src/.gitkeep
|
|
69
|
+
dspackagefolder/template/src/__init__.py
|
|
70
|
+
dspackagefolder/template/src/sqlcrud.py
|
|
71
|
+
dspackagefolder/template/src/utils/config_loader.py
|
|
72
|
+
dspackagefolder/template/src/utils/env_loader.py
|
|
73
|
+
dspackagefolder/template/src/utils/logging_config.py
|
|
74
|
+
dspackagefolder/template/unit_testing/.gitkeep
|
|
75
|
+
dspackagefolder/template/validation/.gitkeep
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dspackagefolder
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .main import create_ds_folder
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
## install uv
|
|
2
|
+
## uv add requirements.txt
|
|
3
|
+
## install pre-commit
|
|
4
|
+
## pre-commit install
|
|
5
|
+
## creeate env file into the new folder
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def setup_project_environment(project_dir: str | Path = "."):
|
|
14
|
+
project_dir = Path(project_dir).resolve()
|
|
15
|
+
|
|
16
|
+
try:
|
|
17
|
+
if not project_dir.exists():
|
|
18
|
+
raise FileNotFoundError(f"{project_dir} does not exist")
|
|
19
|
+
except Exception as e:
|
|
20
|
+
print(f"❌ Invalid project directory: {e}")
|
|
21
|
+
return
|
|
22
|
+
|
|
23
|
+
def run(cmd: list[str]):
|
|
24
|
+
try:
|
|
25
|
+
subprocess.check_call(cmd, cwd=project_dir)
|
|
26
|
+
except subprocess.CalledProcessError as e:
|
|
27
|
+
print(f"❌ Command failed: {' '.join(cmd)}\n{e}")
|
|
28
|
+
except FileNotFoundError as e:
|
|
29
|
+
print(f"❌ Command not found: {cmd[0]}\n{e}")
|
|
30
|
+
except Exception as e:
|
|
31
|
+
print(f"❌ Unexpected error running {' '.join(cmd)}: {e}")
|
|
32
|
+
|
|
33
|
+
# 1️⃣ Install uv if missing
|
|
34
|
+
try:
|
|
35
|
+
subprocess.check_call([sys.executable, "-m", "uv", "--version"])
|
|
36
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
37
|
+
try:
|
|
38
|
+
print("Installing uv...")
|
|
39
|
+
subprocess.check_call([sys.executable, "-m", "pip", "install", "uv"])
|
|
40
|
+
except Exception as e:
|
|
41
|
+
print(f"❌ Failed to install uv: {e}")
|
|
42
|
+
|
|
43
|
+
# 2️⃣ Initialise uv project if pyproject.toml is missing
|
|
44
|
+
try:
|
|
45
|
+
pyproject = project_dir / "pyproject.toml"
|
|
46
|
+
if not pyproject.exists():
|
|
47
|
+
print("Initialising uv project...")
|
|
48
|
+
run(["uv", "init"])
|
|
49
|
+
except Exception as e:
|
|
50
|
+
print(f"❌ Error during uv init: {e}")
|
|
51
|
+
|
|
52
|
+
# 3️⃣ Add requirements.txt using uv
|
|
53
|
+
try:
|
|
54
|
+
requirements = project_dir / "requirements.txt"
|
|
55
|
+
if requirements.exists():
|
|
56
|
+
run(["uv", "add", "-r", "requirements.txt"])
|
|
57
|
+
else:
|
|
58
|
+
print("requirements.txt not found — skipping uv add")
|
|
59
|
+
except Exception as e:
|
|
60
|
+
print(f"❌ Error adding requirements: {e}")
|
|
61
|
+
|
|
62
|
+
# 4️⃣ Install pre-commit if missing
|
|
63
|
+
try:
|
|
64
|
+
subprocess.check_call(["pre-commit", "--version"])
|
|
65
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
66
|
+
try:
|
|
67
|
+
print("Installing pre-commit...")
|
|
68
|
+
subprocess.check_call(
|
|
69
|
+
[sys.executable, "-m", "pip", "install", "pre-commit"]
|
|
70
|
+
)
|
|
71
|
+
except Exception as e:
|
|
72
|
+
print(f"❌ Failed to install pre-commit: {e}")
|
|
73
|
+
|
|
74
|
+
# 5️⃣ Install pre-commit hooks
|
|
75
|
+
try:
|
|
76
|
+
run(["git", "init"])
|
|
77
|
+
except FileNotFoundError:
|
|
78
|
+
print("❌ Git is not installed or is not in your PATH.")
|
|
79
|
+
print("Please install Git from https://git-scm.com/downloads")
|
|
80
|
+
print("After installing Git, restart your terminal and try again.")
|
|
81
|
+
except Exception as e:
|
|
82
|
+
print(f"❌ Error initializing git repository: {e}")
|
|
83
|
+
try:
|
|
84
|
+
run(["pre-commit", "install"])
|
|
85
|
+
except Exception as e:
|
|
86
|
+
print(f"❌ Error setting up pre-commit hooks: {e}")
|
|
87
|
+
|
|
88
|
+
# 6️⃣ Create ENVIRONMENT folder and .env file
|
|
89
|
+
try:
|
|
90
|
+
env_folder = project_dir / "ENVIRONMENT"
|
|
91
|
+
env_folder.mkdir(parents=True, exist_ok=True)
|
|
92
|
+
|
|
93
|
+
env_file = env_folder / ".env"
|
|
94
|
+
if not env_file.exists():
|
|
95
|
+
env_file.write_text("# Environment variables\n", encoding="utf-8")
|
|
96
|
+
print(f"Created {env_file}")
|
|
97
|
+
else:
|
|
98
|
+
print(f"{env_file} already exists")
|
|
99
|
+
|
|
100
|
+
gitignore_file = env_folder / ".gitignore"
|
|
101
|
+
if not gitignore_file.exists():
|
|
102
|
+
gitignore_file.write_text("*\n", encoding="utf-8")
|
|
103
|
+
print(f"Created {gitignore_file}")
|
|
104
|
+
else:
|
|
105
|
+
print(f"{gitignore_file} already exists")
|
|
106
|
+
|
|
107
|
+
except Exception as e:
|
|
108
|
+
print(f"❌ Error creating environment files: {e}")
|
|
109
|
+
|
|
110
|
+
# 7️⃣ Create GitHub Actions workflow
|
|
111
|
+
try:
|
|
112
|
+
github_workflows = project_dir / ".github" / "workflows"
|
|
113
|
+
github_workflows.mkdir(parents=True, exist_ok=True)
|
|
114
|
+
|
|
115
|
+
precommit_workflow = github_workflows / "pre-commit.yml"
|
|
116
|
+
|
|
117
|
+
if not precommit_workflow.exists():
|
|
118
|
+
precommit_workflow.write_text(
|
|
119
|
+
"""name: Pre-commit
|
|
120
|
+
|
|
121
|
+
on:
|
|
122
|
+
push:
|
|
123
|
+
pull_request:
|
|
124
|
+
|
|
125
|
+
jobs:
|
|
126
|
+
pre-commit:
|
|
127
|
+
runs-on: ubuntu-latest
|
|
128
|
+
|
|
129
|
+
steps:
|
|
130
|
+
- name: Checkout code
|
|
131
|
+
uses: actions/checkout@v4
|
|
132
|
+
|
|
133
|
+
- name: Set up Python
|
|
134
|
+
uses: actions/setup-python@v5
|
|
135
|
+
with:
|
|
136
|
+
python-version: "3.11"
|
|
137
|
+
|
|
138
|
+
- name: Install dependencies
|
|
139
|
+
run: |
|
|
140
|
+
pip install pre-commit
|
|
141
|
+
|
|
142
|
+
- name: Run pre-commit
|
|
143
|
+
run: |
|
|
144
|
+
pre-commit run --all-files
|
|
145
|
+
""",
|
|
146
|
+
encoding="utf-8",
|
|
147
|
+
)
|
|
148
|
+
print(f"Created GitHub Actions workflow at {precommit_workflow}")
|
|
149
|
+
else:
|
|
150
|
+
print(f"{precommit_workflow} already exists")
|
|
151
|
+
|
|
152
|
+
except Exception as e:
|
|
153
|
+
print(f"❌ Error creating GitHub workflow: {e}")
|
|
154
|
+
|
|
155
|
+
# 7️⃣ Create GitHub Actions workflow
|
|
156
|
+
try:
|
|
157
|
+
precommit_workflow = project_dir / ".pre-commit-config.yaml"
|
|
158
|
+
|
|
159
|
+
if not precommit_workflow.exists():
|
|
160
|
+
precommit_workflow.write_text(
|
|
161
|
+
"""repos:
|
|
162
|
+
- repo: https://github.com/kynan/nbstripout
|
|
163
|
+
rev: 0.6.1
|
|
164
|
+
hooks:
|
|
165
|
+
- id: nbstripout
|
|
166
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
167
|
+
rev: v1.5.0
|
|
168
|
+
hooks:
|
|
169
|
+
- id: detect-secrets
|
|
170
|
+
- repo: https://github.com/psf/black
|
|
171
|
+
rev: 24.4.2
|
|
172
|
+
hooks:
|
|
173
|
+
- id: black
|
|
174
|
+
""",
|
|
175
|
+
encoding="utf-8",
|
|
176
|
+
)
|
|
177
|
+
print(f"Created pre-commit configuration at {precommit_workflow}")
|
|
178
|
+
else:
|
|
179
|
+
print(f"{precommit_workflow} already exists")
|
|
180
|
+
|
|
181
|
+
except Exception as e:
|
|
182
|
+
print(f"❌ Error creating pre-commit configuration: {e}")
|
|
183
|
+
|
|
184
|
+
print("✅ Project environment setup complete")
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
import shutil
|
|
3
|
+
import importlib.resources as resources
|
|
4
|
+
import sys
|
|
5
|
+
from dspackagefolder.install_precommit_and_create_env import setup_project_environment
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def create_ds_folder(folder_name: str = "dsframework"):
|
|
9
|
+
# 1️⃣ Create destination folder
|
|
10
|
+
# 2️⃣ Locate the template folder INSIDE the package
|
|
11
|
+
with resources.path("dspackagefolder", "template") as template_path:
|
|
12
|
+
target = Path(folder_name)
|
|
13
|
+
|
|
14
|
+
if target.exists():
|
|
15
|
+
print(f"Folder already exists: {target}")
|
|
16
|
+
return
|
|
17
|
+
|
|
18
|
+
# 3️⃣ Copy template into destination
|
|
19
|
+
shutil.copytree(template_path, target)
|
|
20
|
+
|
|
21
|
+
print(f"Project created at: {target.resolve()}")
|
|
22
|
+
# 4️⃣ Setup project environment
|
|
23
|
+
setup_project_environment(target)
|
|
24
|
+
print("🎉 Setup complete! Happy coding!")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def create_ds_folder_cli():
|
|
28
|
+
# 1️⃣ Create destination folder
|
|
29
|
+
# dest_root = Path("dspackagefolder")
|
|
30
|
+
# dest_root.mkdir(exist_ok=True)
|
|
31
|
+
project_name = sys.argv[1] if len(sys.argv) > 1 else "data_science_project"
|
|
32
|
+
# 2️⃣ Locate the template folder INSIDE the package
|
|
33
|
+
with resources.path("dspackagefolder", "template") as template_path:
|
|
34
|
+
target = Path(project_name)
|
|
35
|
+
|
|
36
|
+
if target.exists():
|
|
37
|
+
print(f"Folder already exists: {target}")
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
# 3️⃣ Copy template into destination
|
|
41
|
+
shutil.copytree(template_path, target)
|
|
42
|
+
|
|
43
|
+
print(f"Project created at: {target.resolve()}")
|
|
44
|
+
# 4️⃣ Setup project environment
|
|
45
|
+
setup_project_environment(project_name)
|
|
46
|
+
print("🎉 Setup complete! Happy coding!")
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"data" = 3
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/kynan/nbstripout
|
|
3
|
+
rev: 0.6.1
|
|
4
|
+
hooks:
|
|
5
|
+
- id: nbstripout
|
|
6
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
7
|
+
rev: v1.5.0
|
|
8
|
+
hooks:
|
|
9
|
+
- id: detect-secrets
|
|
10
|
+
- repo: https://github.com/psf/black
|
|
11
|
+
rev: 24.4.2
|
|
12
|
+
hooks:
|
|
13
|
+
- id: black
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Dockerfile
|
|
2
|
+
FROM python:3.12-slim
|
|
3
|
+
|
|
4
|
+
WORKDIR /app
|
|
5
|
+
|
|
6
|
+
# Install uv and Jupyter
|
|
7
|
+
RUN pip install --no-cache-dir uv jupyterlab notebook
|
|
8
|
+
|
|
9
|
+
CMD ["bash"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Build the Docker image
|
|
13
|
+
# Run the following command from the folder containing this Dockerfile:
|
|
14
|
+
# docker build -t my-dev-env .
|
|
15
|
+
|
|
16
|
+
## Run the container (mount your local project directory)
|
|
17
|
+
# Linux/macOS:
|
|
18
|
+
# docker run -it -p 8888:8888 -v $(pwd):/app my-dev-env bash
|
|
19
|
+
#
|
|
20
|
+
# Windows (Command Prompt):
|
|
21
|
+
# docker run -it -p 8888:8888 -v %cd%:/app my-dev-env cmd
|
|
22
|
+
|
|
23
|
+
## Start Jupyter Notebook inside the container
|
|
24
|
+
# jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root
|
|
25
|
+
#
|
|
26
|
+
# Then open your browser and go to:
|
|
27
|
+
# http://localhost:8888
|
|
28
|
+
|
|
29
|
+
## Restart an existing container
|
|
30
|
+
# docker restart <container_name_or_id>
|
|
31
|
+
|
|
32
|
+
## Reconnect to a running container
|
|
33
|
+
# docker exec -it <container_name_or_id> bash
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## TO USE THIS FOLDER:
|
|
2
|
+
run the install_precommit_and_create_env.py first
|
|
3
|
+
run uv add requirements.txt
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## main_dashboard use and running
|
|
8
|
+
main_dashboard.py is used for visualizing the dashboard of the data.
|
|
9
|
+
you run it by uv run streamlit run main_dashboard.py
|
|
10
|
+
|
|
11
|
+
# WHAT TO DO NEXT
|
|
12
|
+
I need to show examples of how to connect the data/sql/validation/logs/config/src
|
|
13
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!*/
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!*/
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
##### This is a template for making src available in any folder.
|
|
2
|
+
import sys
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
6
|
+
from src.utils.logging_config import setup_logger
|
|
7
|
+
from src.utils.config_loader import load_config
|
|
8
|
+
|
|
9
|
+
###### Set up logger
|
|
10
|
+
import sys
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
14
|
+
from src.utils.logging_config import setup_logger
|
|
15
|
+
|
|
16
|
+
logger = setup_logger(__name__, base_filename="pipeline")
|
|
17
|
+
|
|
18
|
+
logger.info("Started run")
|
|
19
|
+
logger.error("Failure occurred")
|
|
20
|
+
|
|
21
|
+
# logging = setup_logging()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Load config
|
|
25
|
+
import sys
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
29
|
+
from src.utils.config_loader import load_config
|
|
30
|
+
|
|
31
|
+
config = load_config()
|
|
32
|
+
print(config)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Load env variables
|
|
36
|
+
import sys
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
|
|
39
|
+
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
40
|
+
from src.utils.env_loader import load_env_from_root
|
|
41
|
+
|
|
42
|
+
env_path = load_env_from_root()
|
|
43
|
+
print(f"Loaded env variables from: {env_path}")
|
|
44
|
+
##import os
|
|
45
|
+
##os.getenv("YOUR_ENV_VAR")
|
|
46
|
+
|
|
47
|
+
### Example usage of SQLCRUD
|
|
48
|
+
import sys
|
|
49
|
+
from pathlib import Path
|
|
50
|
+
|
|
51
|
+
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
52
|
+
from src.sqlcrud import SQLServerCRUD
|
|
53
|
+
|
|
54
|
+
connection_string = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=your_server;DATABASE=your_db;UID=your_user;PWD=your_password"
|
|
55
|
+
sql_crud = SQLServerCRUD(connection_string)
|
|
56
|
+
sql_crud.connect()
|
|
57
|
+
sql_crud.build_query("sql/query.sql", params={"param1": "value1"})
|
|
58
|
+
df = sql_crud.read_data()
|
|
59
|
+
print(df)
|
|
60
|
+
sql_crud.close_connection()
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!*/
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
File without changes
|
|
File without changes
|