Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Use Python 3.11 with Debian Bullseye as the base image
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
FROM mcr.microsoft.com/devcontainers/python:3.10-bullseye

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONPATH=/workspaces/mssql-python
ENV CMAKE_BUILD_TYPE=Debug

# Install system dependencies
RUN apt-get update && apt-get install -y \
# Build tools
build-essential \
cmake \
pkg-config \
ninja-build \
# Additional tools
curl \
Comment thread
bewithgaurav marked this conversation as resolved.
wget \
git \
vim \
nano \
htop \
tree \
jq \
# Clean up
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Install Microsoft ODBC Driver for SQL Server
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql18 \
Comment thread
bewithgaurav marked this conversation as resolved.
&& ACCEPT_EULA=Y apt-get install -y mssql-tools18 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Add mssql-tools to PATH
ENV PATH="$PATH:/opt/mssql-tools18/bin"

# Upgrade pip and install common Python development tools
RUN python -m pip install --upgrade pip setuptools wheel \
&& pip install \
black \
Comment thread
bewithgaurav marked this conversation as resolved.
Outdated
flake8 \
mypy \
isort \
pre-commit \
twine \
build \
wheel \
"pybind11[global]" \
pytest-xdist \
pytest-mock \
"coverage[toml]"

# Set the default user to vscode (created by the base image)
USER vscode

# Set the working directory
WORKDIR /workspaces/mssql-python

# Add helpful aliases to .bashrc
RUN echo 'alias ll="ls -alF"' >> ~/.bashrc \
&& echo 'alias la="ls -A"' >> ~/.bashrc \
&& echo 'alias l="ls -CF"' >> ~/.bashrc

# Default command
CMD ["/bin/bash"]
76 changes: 76 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"name": "MSSQL Python Driver",
"build": {
"dockerfile": "Dockerfile",
"context": "."
},
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"python.defaultInterpreterPath": "/usr/local/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
"python.formatting.blackPath": "/usr/local/py-utils/bin/black",
"python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
"python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
"python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
"python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
"python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
"python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
"python.linting.pylintPath": "/usr/local/py-utils/bin/pylint",
"cmake.configureOnOpen": false
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.pylint",
"ms-toolsai.jupyter",
"ms-vscode.cmake-tools",
"ms-vscode.cpptools",
"ms-vscode.cpptools-extension-pack",
"github.copilot",
"github.copilot-chat",
"ms-vscode.test-adapter-converter",
"littlefoxteam.vscode-python-test-adapter",
"ms-azuretools.vscode-docker",
"ms-mssql.mssql",
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
]
}
},
// Features to add to the dev container. More info: https://containers.dev/features.
"features": {
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": true,
"configureZshAsDefaultShell": true,
"installOhMyZsh": true,
"upgradePackages": true,
"username": "vscode",
"userUid": "automatic",
"userGid": "automatic"
}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/post-create.sh",
// Use 'postStartCommand' to run commands after the container starts.
"postStartCommand": "",
// Configure tool-specific properties.
"remoteUser": "vscode",
// Set container environment variables
"containerEnv": {
"PYTHONPATH": "/workspaces/mssql-python",
"CMAKE_BUILD_TYPE": "Debug"
},
// Mount the project directory
"workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/mssql-python,type=bind,consistency=cached",
"workspaceFolder": "/workspaces/mssql-python",
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
}
85 changes: 85 additions & 0 deletions .devcontainer/post-create.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#!/bin/bash

# Post-create script for MSSQL Python Driver devcontainer
set -e

echo "🚀 Setting up MSSQL Python Driver development environment..."

# Update package lists
echo "📦 Updating package lists..."
sudo apt-get update

# Install system dependencies required for the project
echo "🔧 Installing system dependencies..."
sudo apt-get install -y \
python3 \
python3-pip \
python3-venv \
python3-full \
cmake \
curl \
wget \
gnupg \
software-properties-common \
build-essential \
python3-dev \
pybind11-dev

export TZ=UTC
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Install Microsoft ODBC Driver for SQL Server (required for mssql connectivity)
echo "🗄️ Installing Microsoft ODBC Driver for SQL Server..."
curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb || true
rm packages-microsoft-prod.deb

sudo apt-get update
# Install the driver
ACCEPT_EULA=Y sudo apt-get install -y msodbcsql18
# optional: for bcp and sqlcmd
ACCEPT_EULA=Y sudo apt-get install -y mssql-tools18
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev

# Create a Python virtual environment
echo "🐍 Creating Python virtual environment..."
python3 -m venv /workspaces/mssql-python/opt/venv
source /workspaces/mssql-python/opt/venv/bin/activate

python -m pip install --upgrade pip

# Make the virtual environment globally available
echo 'source /workspaces/mssql-python/opt/venv/bin/activate' >> ~/.bashrc

# Install project dependencies
echo "📚 Installing project dependencies..."
pip install -r requirements.txt

# Create useful aliases
echo "⚡ Setting up aliases..."
cat >> ~/.bashrc << 'EOF'

# MSSQL Python Driver aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias clean='find . -type f -name "*.pyc" -delete && find . -type d -name "__pycache__" -delete'

EOF

# Set up git configuration (if not already configured)
echo "🔧 Configuring git..."
if [ -z "$(git config --global user.name)" ]; then
echo "Git user name not set. You may want to configure it with:"
echo " git config --global user.name 'Your Name'"
fi
if [ -z "$(git config --global user.email)" ]; then
echo "Git user email not set. You may want to configure it with:"
echo " git config --global user.email 'your.email@example.com'"
fi

# Display information about the environment
echo ""
echo "✅ Development environment setup complete!"

120 changes: 120 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Git
.git
.gitignore
.gitattributes

# Python
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.log
.git
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
.mypy_cache
.pytest_cache
.hypothesis

# Distribution / packaging
.Python
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
Comment thread
bewithgaurav marked this conversation as resolved.
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
*.manifest
*.spec

# Installer logs
pip-log.txt
Comment thread
saurabh500 marked this conversation as resolved.
pip-delete-this-directory.txt
Comment thread
saurabh500 marked this conversation as resolved.
Outdated

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
Comment thread
saurabh500 marked this conversation as resolved.
.coverage.*
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
Comment thread
saurabh500 marked this conversation as resolved.
.cache
Comment thread
saurabh500 marked this conversation as resolved.
Outdated
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Documentation
docs/_build/

# PyBuilder
target/

# IDEs
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Temporary files
*.tmp
*.temp
*.log
Comment thread
saurabh500 marked this conversation as resolved.

# Node.js (if any)
node_modules/
npm-debug.log*

# CMake
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
Makefile
*.cmake

# Build artifacts
*.so
Comment thread
bewithgaurav marked this conversation as resolved.
*.dll
*.dylib
*.pdb
*.obj
*.exe

# Test results
test-results/
.pytest_cache/
Comment thread
saurabh500 marked this conversation as resolved.

# Azure DevOps
.azure/
Loading