msn-weather-wrapper 1.1.5__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.
- msn_weather_wrapper-1.1.5/.containerignore +49 -0
- msn_weather_wrapper-1.1.5/.env.example +146 -0
- msn_weather_wrapper-1.1.5/.github/CODEOWNERS +39 -0
- msn_weather_wrapper-1.1.5/.github/ISSUE_TEMPLATE/bug_report.yml +126 -0
- msn_weather_wrapper-1.1.5/.github/ISSUE_TEMPLATE/config.yml +11 -0
- msn_weather_wrapper-1.1.5/.github/ISSUE_TEMPLATE/feature_request.yml +131 -0
- msn_weather_wrapper-1.1.5/.github/PULL_REQUEST_TEMPLATE.md +80 -0
- msn_weather_wrapper-1.1.5/.github/PYPI_SETUP.md +216 -0
- msn_weather_wrapper-1.1.5/.github/SECURITY.md +192 -0
- msn_weather_wrapper-1.1.5/.github/actions/setup-python-env/action.yml +36 -0
- msn_weather_wrapper-1.1.5/.github/dependabot.yml +141 -0
- msn_weather_wrapper-1.1.5/.github/workflows/README.md +251 -0
- msn_weather_wrapper-1.1.5/.github/workflows/ci.yml +722 -0
- msn_weather_wrapper-1.1.5/.github/workflows/dependencies.yml +169 -0
- msn_weather_wrapper-1.1.5/.github/workflows/performance.yml +137 -0
- msn_weather_wrapper-1.1.5/.github/workflows/release.yml +168 -0
- msn_weather_wrapper-1.1.5/.github/workflows/security-scan.yml +230 -0
- msn_weather_wrapper-1.1.5/.gitignore +114 -0
- msn_weather_wrapper-1.1.5/.pre-commit-config.yaml +26 -0
- msn_weather_wrapper-1.1.5/CHANGELOG.md +201 -0
- msn_weather_wrapper-1.1.5/CODE_OF_CONDUCT.md +133 -0
- msn_weather_wrapper-1.1.5/CONTRIBUTING.md +396 -0
- msn_weather_wrapper-1.1.5/Containerfile +73 -0
- msn_weather_wrapper-1.1.5/Containerfile.dev +42 -0
- msn_weather_wrapper-1.1.5/Containerfile.playwright +7 -0
- msn_weather_wrapper-1.1.5/LICENSE +21 -0
- msn_weather_wrapper-1.1.5/PKG-INFO +314 -0
- msn_weather_wrapper-1.1.5/README.md +266 -0
- msn_weather_wrapper-1.1.5/api.py +919 -0
- msn_weather_wrapper-1.1.5/config/nginx.conf +59 -0
- msn_weather_wrapper-1.1.5/config/supervisord.conf +20 -0
- msn_weather_wrapper-1.1.5/dev.sh +429 -0
- msn_weather_wrapper-1.1.5/docs/API.md +681 -0
- msn_weather_wrapper-1.1.5/docs/AUTOMATIC_VERSIONING.md +394 -0
- msn_weather_wrapper-1.1.5/docs/CHANGELOG.md +201 -0
- msn_weather_wrapper-1.1.5/docs/CONTAINER_DEV_SETUP.md +191 -0
- msn_weather_wrapper-1.1.5/docs/DEVELOPMENT.md +372 -0
- msn_weather_wrapper-1.1.5/docs/SECURITY.md +236 -0
- msn_weather_wrapper-1.1.5/docs/SWAGGER.md +206 -0
- msn_weather_wrapper-1.1.5/docs/SYFT_GUIDE.md +424 -0
- msn_weather_wrapper-1.1.5/docs/TESTING.md +718 -0
- msn_weather_wrapper-1.1.5/docs/VERSIONING.md +420 -0
- msn_weather_wrapper-1.1.5/docs/VERSIONING_QUICKSTART.md +57 -0
- msn_weather_wrapper-1.1.5/docs/index.md +99 -0
- msn_weather_wrapper-1.1.5/docs/reports/ci-cd.md +454 -0
- msn_weather_wrapper-1.1.5/docs/reports/coverage-report.md +300 -0
- msn_weather_wrapper-1.1.5/docs/reports/index.md +145 -0
- msn_weather_wrapper-1.1.5/docs/reports/license-report.md +177 -0
- msn_weather_wrapper-1.1.5/docs/reports/security-report.md +344 -0
- msn_weather_wrapper-1.1.5/docs/reports/test-report.md +229 -0
- msn_weather_wrapper-1.1.5/frontend/.dockerignore +31 -0
- msn_weather_wrapper-1.1.5/frontend/.gitignore +29 -0
- msn_weather_wrapper-1.1.5/frontend/.nvmrc +1 -0
- msn_weather_wrapper-1.1.5/frontend/Containerfile +29 -0
- msn_weather_wrapper-1.1.5/frontend/Containerfile.dev +28 -0
- msn_weather_wrapper-1.1.5/frontend/README.md +116 -0
- msn_weather_wrapper-1.1.5/frontend/TESTING.md +234 -0
- msn_weather_wrapper-1.1.5/frontend/index.html +39 -0
- msn_weather_wrapper-1.1.5/frontend/nginx.conf +41 -0
- msn_weather_wrapper-1.1.5/frontend/package-lock.json +1739 -0
- msn_weather_wrapper-1.1.5/frontend/package.json +28 -0
- msn_weather_wrapper-1.1.5/frontend/playwright.config.ts +45 -0
- msn_weather_wrapper-1.1.5/frontend/public/site.webmanifest +16 -0
- msn_weather_wrapper-1.1.5/frontend/public/weather.svg +19 -0
- msn_weather_wrapper-1.1.5/frontend/src/App.css +412 -0
- msn_weather_wrapper-1.1.5/frontend/src/App.tsx +313 -0
- msn_weather_wrapper-1.1.5/frontend/src/components/CityAutocomplete.css +62 -0
- msn_weather_wrapper-1.1.5/frontend/src/components/CityAutocomplete.tsx +125 -0
- msn_weather_wrapper-1.1.5/frontend/src/data/cities.ts +623 -0
- msn_weather_wrapper-1.1.5/frontend/src/main.tsx +15 -0
- msn_weather_wrapper-1.1.5/frontend/src/types.ts +25 -0
- msn_weather_wrapper-1.1.5/frontend/src/vite-env.d.ts +1 -0
- msn_weather_wrapper-1.1.5/frontend/tests/e2e/accessibility.spec.ts +186 -0
- msn_weather_wrapper-1.1.5/frontend/tests/e2e/visual.spec.ts +204 -0
- msn_weather_wrapper-1.1.5/frontend/tests/e2e/weather.spec.ts +370 -0
- msn_weather_wrapper-1.1.5/frontend/tsconfig.json +31 -0
- msn_weather_wrapper-1.1.5/frontend/tsconfig.node.json +10 -0
- msn_weather_wrapper-1.1.5/frontend/vite.config.js +21 -0
- msn_weather_wrapper-1.1.5/mkdocs.yml +172 -0
- msn_weather_wrapper-1.1.5/podman-compose.dev.yml +59 -0
- msn_weather_wrapper-1.1.5/podman-compose.test.yml +47 -0
- msn_weather_wrapper-1.1.5/podman-compose.yml +23 -0
- msn_weather_wrapper-1.1.5/pyproject.toml +165 -0
- msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/__init__.py +8 -0
- msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/client.py +310 -0
- msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/models.py +22 -0
- msn_weather_wrapper-1.1.5/src/msn_weather_wrapper/py.typed +0 -0
- msn_weather_wrapper-1.1.5/tests/__init__.py +1 -0
- msn_weather_wrapper-1.1.5/tests/conftest.py +14 -0
- msn_weather_wrapper-1.1.5/tests/test_api.py +418 -0
- msn_weather_wrapper-1.1.5/tests/test_client.py +487 -0
- msn_weather_wrapper-1.1.5/tests/test_integration.py +304 -0
- msn_weather_wrapper-1.1.5/tests/test_models.py +52 -0
- msn_weather_wrapper-1.1.5/tests/test_new_features.py +116 -0
- msn_weather_wrapper-1.1.5/tests/test_security.py +484 -0
- msn_weather_wrapper-1.1.5/tools/README.md +303 -0
- msn_weather_wrapper-1.1.5/tools/generate_reports.py +488 -0
- msn_weather_wrapper-1.1.5/tools/generate_sbom.sh +264 -0
- msn_weather_wrapper-1.1.5/tools/generate_sbom_ci.sh +46 -0
- msn_weather_wrapper-1.1.5/tools/test_deployment.sh +153 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Python cache
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
*.egg-info/
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
*.egg
|
|
11
|
+
|
|
12
|
+
# Virtual environment
|
|
13
|
+
.venv/
|
|
14
|
+
venv/
|
|
15
|
+
ENV/
|
|
16
|
+
|
|
17
|
+
# Testing
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
htmlcov/
|
|
20
|
+
.coverage
|
|
21
|
+
.tox/
|
|
22
|
+
|
|
23
|
+
# IDE
|
|
24
|
+
.vscode/
|
|
25
|
+
.idea/
|
|
26
|
+
*.swp
|
|
27
|
+
*.swo
|
|
28
|
+
*~
|
|
29
|
+
|
|
30
|
+
# Git
|
|
31
|
+
.git/
|
|
32
|
+
.gitignore
|
|
33
|
+
.github/
|
|
34
|
+
|
|
35
|
+
# Documentation - exclude most but keep README.md for package build
|
|
36
|
+
API.md
|
|
37
|
+
|
|
38
|
+
# Frontend - only exclude node_modules and build artifacts
|
|
39
|
+
frontend/node_modules/
|
|
40
|
+
frontend/dist/
|
|
41
|
+
|
|
42
|
+
# Example files
|
|
43
|
+
example.py
|
|
44
|
+
test_api_manual.py
|
|
45
|
+
WeatherWidget.jsx
|
|
46
|
+
WeatherWidget.tsx
|
|
47
|
+
|
|
48
|
+
# GitHub
|
|
49
|
+
.github/
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# MSN Weather Wrapper Environment Configuration
|
|
2
|
+
# Copy this file to .env and configure as needed
|
|
3
|
+
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Flask Configuration
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# Flask environment mode (development, production)
|
|
9
|
+
# In production, set to "production" to disable debug mode
|
|
10
|
+
FLASK_ENV=production
|
|
11
|
+
|
|
12
|
+
# Secret key for Flask sessions (generate a secure random key in production)
|
|
13
|
+
# Generate with: python -c "import secrets; print(secrets.token_hex(32))"
|
|
14
|
+
FLASK_SECRET_KEY=change-this-to-a-secure-random-key-in-production
|
|
15
|
+
|
|
16
|
+
# Flask debug mode (true/false)
|
|
17
|
+
# NEVER enable debug mode in production
|
|
18
|
+
FLASK_DEBUG=false
|
|
19
|
+
|
|
20
|
+
# =============================================================================
|
|
21
|
+
# Application Configuration
|
|
22
|
+
# =============================================================================
|
|
23
|
+
|
|
24
|
+
# Application host and port
|
|
25
|
+
HOST=0.0.0.0
|
|
26
|
+
PORT=5000
|
|
27
|
+
|
|
28
|
+
# =============================================================================
|
|
29
|
+
# Rate Limiting Configuration
|
|
30
|
+
# =============================================================================
|
|
31
|
+
|
|
32
|
+
# Rate limit per IP address (requests per minute)
|
|
33
|
+
RATE_LIMIT_PER_IP=30
|
|
34
|
+
|
|
35
|
+
# Global rate limit (requests per hour)
|
|
36
|
+
RATE_LIMIT_GLOBAL=200
|
|
37
|
+
|
|
38
|
+
# =============================================================================
|
|
39
|
+
# Caching Configuration
|
|
40
|
+
# =============================================================================
|
|
41
|
+
|
|
42
|
+
# Weather data cache duration (seconds)
|
|
43
|
+
# Default: 300 seconds (5 minutes)
|
|
44
|
+
CACHE_DURATION=300
|
|
45
|
+
|
|
46
|
+
# =============================================================================
|
|
47
|
+
# CORS Configuration
|
|
48
|
+
# =============================================================================
|
|
49
|
+
|
|
50
|
+
# Allowed origins for CORS (comma-separated list)
|
|
51
|
+
# Use "*" for all origins (not recommended in production)
|
|
52
|
+
# Example: https://example.com,https://app.example.com
|
|
53
|
+
CORS_ORIGINS=*
|
|
54
|
+
|
|
55
|
+
# =============================================================================
|
|
56
|
+
# Logging Configuration
|
|
57
|
+
# =============================================================================
|
|
58
|
+
|
|
59
|
+
# Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
60
|
+
LOG_LEVEL=INFO
|
|
61
|
+
|
|
62
|
+
# Enable structured JSON logging (true/false)
|
|
63
|
+
STRUCTURED_LOGGING=true
|
|
64
|
+
|
|
65
|
+
# =============================================================================
|
|
66
|
+
# Gunicorn Configuration (Production)
|
|
67
|
+
# =============================================================================
|
|
68
|
+
|
|
69
|
+
# Number of Gunicorn worker processes
|
|
70
|
+
# Recommended: (2 x CPU cores) + 1
|
|
71
|
+
GUNICORN_WORKERS=4
|
|
72
|
+
|
|
73
|
+
# Gunicorn timeout (seconds)
|
|
74
|
+
GUNICORN_TIMEOUT=120
|
|
75
|
+
|
|
76
|
+
# Gunicorn bind address
|
|
77
|
+
GUNICORN_BIND=0.0.0.0:5000
|
|
78
|
+
|
|
79
|
+
# =============================================================================
|
|
80
|
+
# Database Configuration (Future Use)
|
|
81
|
+
# =============================================================================
|
|
82
|
+
|
|
83
|
+
# Database URL (not currently used, reserved for future features)
|
|
84
|
+
# DATABASE_URL=postgresql://user:password@localhost:5432/weather_db
|
|
85
|
+
|
|
86
|
+
# =============================================================================
|
|
87
|
+
# External API Configuration
|
|
88
|
+
# =============================================================================
|
|
89
|
+
|
|
90
|
+
# MSN Weather base URL (default should work, but can be customized)
|
|
91
|
+
MSN_WEATHER_BASE_URL=https://www.msn.com/en-us/weather
|
|
92
|
+
|
|
93
|
+
# Request timeout for external API calls (seconds)
|
|
94
|
+
REQUEST_TIMEOUT=30
|
|
95
|
+
|
|
96
|
+
# User agent for HTTP requests
|
|
97
|
+
USER_AGENT=Mozilla/5.0 (compatible; MSNWeatherWrapper/1.0)
|
|
98
|
+
|
|
99
|
+
# =============================================================================
|
|
100
|
+
# Security Configuration
|
|
101
|
+
# =============================================================================
|
|
102
|
+
|
|
103
|
+
# Maximum input length for city/country names
|
|
104
|
+
MAX_INPUT_LENGTH=100
|
|
105
|
+
|
|
106
|
+
# Enable input validation (true/false)
|
|
107
|
+
# NEVER disable in production
|
|
108
|
+
ENABLE_INPUT_VALIDATION=true
|
|
109
|
+
|
|
110
|
+
# =============================================================================
|
|
111
|
+
# Development Configuration
|
|
112
|
+
# =============================================================================
|
|
113
|
+
|
|
114
|
+
# Enable hot reload in development (true/false)
|
|
115
|
+
DEV_HOT_RELOAD=true
|
|
116
|
+
|
|
117
|
+
# Frontend development server URL (for CORS in development)
|
|
118
|
+
FRONTEND_DEV_URL=http://localhost:5173
|
|
119
|
+
|
|
120
|
+
# =============================================================================
|
|
121
|
+
# Container Configuration
|
|
122
|
+
# =============================================================================
|
|
123
|
+
|
|
124
|
+
# Container registry (for pushing images)
|
|
125
|
+
CONTAINER_REGISTRY=ghcr.io
|
|
126
|
+
|
|
127
|
+
# Container image name
|
|
128
|
+
CONTAINER_IMAGE=jim-wyatt/msn-weather-wrapper
|
|
129
|
+
|
|
130
|
+
# =============================================================================
|
|
131
|
+
# Health Check Configuration
|
|
132
|
+
# =============================================================================
|
|
133
|
+
|
|
134
|
+
# Health check timeout (seconds)
|
|
135
|
+
HEALTH_CHECK_TIMEOUT=10
|
|
136
|
+
|
|
137
|
+
# =============================================================================
|
|
138
|
+
# Notes
|
|
139
|
+
# =============================================================================
|
|
140
|
+
|
|
141
|
+
# 1. Never commit .env files to version control
|
|
142
|
+
# 2. Use strong, unique values for SECRET_KEY in production
|
|
143
|
+
# 3. Adjust rate limits based on your server capacity
|
|
144
|
+
# 4. Set appropriate CORS origins in production (not "*")
|
|
145
|
+
# 5. Use environment-specific .env files (.env.production, .env.development)
|
|
146
|
+
# 6. Consider using secrets management tools (AWS Secrets Manager, HashiCorp Vault)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# CODEOWNERS - Automatically request reviews from code owners
|
|
2
|
+
# Docs: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
|
|
3
|
+
|
|
4
|
+
# Default owner for everything
|
|
5
|
+
* @jim-wyatt
|
|
6
|
+
|
|
7
|
+
# Python package and core library
|
|
8
|
+
/src/ @jim-wyatt
|
|
9
|
+
/tests/ @jim-wyatt
|
|
10
|
+
pyproject.toml @jim-wyatt
|
|
11
|
+
|
|
12
|
+
# Flask API
|
|
13
|
+
api.py @jim-wyatt
|
|
14
|
+
|
|
15
|
+
# Frontend
|
|
16
|
+
/frontend/ @jim-wyatt
|
|
17
|
+
|
|
18
|
+
# CI/CD workflows
|
|
19
|
+
/.github/workflows/ @jim-wyatt
|
|
20
|
+
/.github/actions/ @jim-wyatt
|
|
21
|
+
|
|
22
|
+
# Documentation
|
|
23
|
+
/docs/ @jim-wyatt
|
|
24
|
+
README.md @jim-wyatt
|
|
25
|
+
*.md @jim-wyatt
|
|
26
|
+
|
|
27
|
+
# Configuration files
|
|
28
|
+
*.yml @jim-wyatt
|
|
29
|
+
*.yaml @jim-wyatt
|
|
30
|
+
*.toml @jim-wyatt
|
|
31
|
+
.pre-commit-config.yaml @jim-wyatt
|
|
32
|
+
|
|
33
|
+
# Containerfiles
|
|
34
|
+
Containerfile* @jim-wyatt
|
|
35
|
+
podman-compose.yml @jim-wyatt
|
|
36
|
+
|
|
37
|
+
# Security-related files
|
|
38
|
+
/docs/SECURITY.md @jim-wyatt
|
|
39
|
+
/.github/workflows/security-scan.yml @jim-wyatt
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug or unexpected behavior
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug", "triage"]
|
|
5
|
+
assignees: []
|
|
6
|
+
|
|
7
|
+
body:
|
|
8
|
+
- type: markdown
|
|
9
|
+
attributes:
|
|
10
|
+
value: |
|
|
11
|
+
Thanks for taking the time to report this bug! Please fill out the sections below to help us investigate.
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: description
|
|
15
|
+
attributes:
|
|
16
|
+
label: Bug Description
|
|
17
|
+
description: A clear and concise description of what the bug is.
|
|
18
|
+
placeholder: When I try to... I expect... but instead...
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
|
|
22
|
+
- type: textarea
|
|
23
|
+
id: reproduction
|
|
24
|
+
attributes:
|
|
25
|
+
label: Steps to Reproduce
|
|
26
|
+
description: Steps to reproduce the behavior
|
|
27
|
+
placeholder: |
|
|
28
|
+
1. Go to '...'
|
|
29
|
+
2. Click on '...'
|
|
30
|
+
3. Execute command '...'
|
|
31
|
+
4. See error
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
|
|
35
|
+
- type: textarea
|
|
36
|
+
id: expected
|
|
37
|
+
attributes:
|
|
38
|
+
label: Expected Behavior
|
|
39
|
+
description: What did you expect to happen?
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
|
|
43
|
+
- type: textarea
|
|
44
|
+
id: actual
|
|
45
|
+
attributes:
|
|
46
|
+
label: Actual Behavior
|
|
47
|
+
description: What actually happened? Include error messages, stack traces, or screenshots.
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
|
|
51
|
+
- type: dropdown
|
|
52
|
+
id: component
|
|
53
|
+
attributes:
|
|
54
|
+
label: Component
|
|
55
|
+
description: Which component is affected?
|
|
56
|
+
options:
|
|
57
|
+
- Python Library (msn_weather_wrapper)
|
|
58
|
+
- REST API (Flask/api.py)
|
|
59
|
+
- Web Frontend (React)
|
|
60
|
+
- Docker/Container
|
|
61
|
+
- CI/CD
|
|
62
|
+
- Documentation
|
|
63
|
+
- Other
|
|
64
|
+
validations:
|
|
65
|
+
required: true
|
|
66
|
+
|
|
67
|
+
- type: dropdown
|
|
68
|
+
id: severity
|
|
69
|
+
attributes:
|
|
70
|
+
label: Severity
|
|
71
|
+
description: How severe is this issue?
|
|
72
|
+
options:
|
|
73
|
+
- Critical (system crash, data loss)
|
|
74
|
+
- High (major feature broken)
|
|
75
|
+
- Medium (feature partially broken)
|
|
76
|
+
- Low (minor issue, workaround exists)
|
|
77
|
+
validations:
|
|
78
|
+
required: true
|
|
79
|
+
|
|
80
|
+
- type: textarea
|
|
81
|
+
id: environment
|
|
82
|
+
attributes:
|
|
83
|
+
label: Environment
|
|
84
|
+
description: |
|
|
85
|
+
Provide environment details:
|
|
86
|
+
- OS (e.g., Ubuntu 22.04, macOS 14.0, Windows 11)
|
|
87
|
+
- Python version (e.g., 3.12.0)
|
|
88
|
+
- Package version (e.g., 1.0.0)
|
|
89
|
+
- Deployment method (local, Docker, Podman)
|
|
90
|
+
value: |
|
|
91
|
+
- OS:
|
|
92
|
+
- Python:
|
|
93
|
+
- Version:
|
|
94
|
+
- Deployment:
|
|
95
|
+
render: markdown
|
|
96
|
+
validations:
|
|
97
|
+
required: true
|
|
98
|
+
|
|
99
|
+
- type: textarea
|
|
100
|
+
id: logs
|
|
101
|
+
attributes:
|
|
102
|
+
label: Relevant Logs
|
|
103
|
+
description: Include relevant log output, stack traces, or error messages
|
|
104
|
+
render: shell
|
|
105
|
+
validations:
|
|
106
|
+
required: false
|
|
107
|
+
|
|
108
|
+
- type: textarea
|
|
109
|
+
id: additional
|
|
110
|
+
attributes:
|
|
111
|
+
label: Additional Context
|
|
112
|
+
description: Any other context, screenshots, or information about the problem
|
|
113
|
+
validations:
|
|
114
|
+
required: false
|
|
115
|
+
|
|
116
|
+
- type: checkboxes
|
|
117
|
+
id: checklist
|
|
118
|
+
attributes:
|
|
119
|
+
label: Pre-submission Checklist
|
|
120
|
+
options:
|
|
121
|
+
- label: I have searched existing issues to avoid duplicates
|
|
122
|
+
required: true
|
|
123
|
+
- label: I have tested with the latest version
|
|
124
|
+
required: true
|
|
125
|
+
- label: I have included sufficient information to reproduce
|
|
126
|
+
required: true
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: 💬 Discussions
|
|
4
|
+
url: https://github.com/jim-wyatt/msn-weather-wrapper/discussions
|
|
5
|
+
about: Ask questions, share ideas, or discuss the project with the community
|
|
6
|
+
- name: 📖 Documentation
|
|
7
|
+
url: https://jim-wyatt.github.io/msn-weather-wrapper/
|
|
8
|
+
about: Read the full documentation and guides
|
|
9
|
+
- name: 🔒 Security Issue
|
|
10
|
+
url: https://github.com/jim-wyatt/msn-weather-wrapper/security/advisories/new
|
|
11
|
+
about: Report a security vulnerability privately
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Suggest a new feature or enhancement
|
|
3
|
+
title: "[Feature]: "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
assignees: []
|
|
6
|
+
|
|
7
|
+
body:
|
|
8
|
+
- type: markdown
|
|
9
|
+
attributes:
|
|
10
|
+
value: |
|
|
11
|
+
Thanks for suggesting a new feature! Please provide as much detail as possible.
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: problem
|
|
15
|
+
attributes:
|
|
16
|
+
label: Problem Statement
|
|
17
|
+
description: Describe the problem or pain point this feature would solve
|
|
18
|
+
placeholder: I'm frustrated when... It would be great if... Currently there's no way to...
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
|
|
22
|
+
- type: textarea
|
|
23
|
+
id: solution
|
|
24
|
+
attributes:
|
|
25
|
+
label: Proposed Solution
|
|
26
|
+
description: Describe your proposed solution
|
|
27
|
+
placeholder: Add a new endpoint/feature that...
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
|
|
31
|
+
- type: textarea
|
|
32
|
+
id: alternatives
|
|
33
|
+
attributes:
|
|
34
|
+
label: Alternatives Considered
|
|
35
|
+
description: What alternative solutions or workarounds have you considered?
|
|
36
|
+
validations:
|
|
37
|
+
required: false
|
|
38
|
+
|
|
39
|
+
- type: dropdown
|
|
40
|
+
id: component
|
|
41
|
+
attributes:
|
|
42
|
+
label: Component
|
|
43
|
+
description: Which component would this feature affect?
|
|
44
|
+
options:
|
|
45
|
+
- Python Library (msn_weather_wrapper)
|
|
46
|
+
- REST API (Flask/api.py)
|
|
47
|
+
- Web Frontend (React)
|
|
48
|
+
- Docker/Container
|
|
49
|
+
- CI/CD
|
|
50
|
+
- Documentation
|
|
51
|
+
- Multiple Components
|
|
52
|
+
- New Component
|
|
53
|
+
validations:
|
|
54
|
+
required: true
|
|
55
|
+
|
|
56
|
+
- type: dropdown
|
|
57
|
+
id: priority
|
|
58
|
+
attributes:
|
|
59
|
+
label: Priority
|
|
60
|
+
description: How important is this feature to you?
|
|
61
|
+
options:
|
|
62
|
+
- Critical (blocking my use case)
|
|
63
|
+
- High (significant improvement)
|
|
64
|
+
- Medium (nice to have)
|
|
65
|
+
- Low (minor enhancement)
|
|
66
|
+
validations:
|
|
67
|
+
required: true
|
|
68
|
+
|
|
69
|
+
- type: textarea
|
|
70
|
+
id: usecase
|
|
71
|
+
attributes:
|
|
72
|
+
label: Use Case
|
|
73
|
+
description: Describe your specific use case and how this feature would help
|
|
74
|
+
placeholder: |
|
|
75
|
+
As a [user type], I want to [goal] so that [benefit].
|
|
76
|
+
|
|
77
|
+
Example: As a mobile app developer, I want to get 7-day forecasts so that I can show weekly weather in my app.
|
|
78
|
+
validations:
|
|
79
|
+
required: true
|
|
80
|
+
|
|
81
|
+
- type: textarea
|
|
82
|
+
id: examples
|
|
83
|
+
attributes:
|
|
84
|
+
label: Examples
|
|
85
|
+
description: |
|
|
86
|
+
Provide code examples, API designs, or UI mockups showing how this feature would work
|
|
87
|
+
render: python
|
|
88
|
+
validations:
|
|
89
|
+
required: false
|
|
90
|
+
|
|
91
|
+
- type: textarea
|
|
92
|
+
id: impact
|
|
93
|
+
attributes:
|
|
94
|
+
label: Impact Assessment
|
|
95
|
+
description: |
|
|
96
|
+
- Who would benefit from this feature?
|
|
97
|
+
- Are there any breaking changes?
|
|
98
|
+
- What are the performance/resource implications?
|
|
99
|
+
validations:
|
|
100
|
+
required: false
|
|
101
|
+
|
|
102
|
+
- type: dropdown
|
|
103
|
+
id: willing
|
|
104
|
+
attributes:
|
|
105
|
+
label: Contribution
|
|
106
|
+
description: Are you willing to contribute this feature?
|
|
107
|
+
options:
|
|
108
|
+
- Yes, I can submit a PR
|
|
109
|
+
- Yes, with guidance
|
|
110
|
+
- No, but I can help test
|
|
111
|
+
- No
|
|
112
|
+
validations:
|
|
113
|
+
required: false
|
|
114
|
+
|
|
115
|
+
- type: textarea
|
|
116
|
+
id: additional
|
|
117
|
+
attributes:
|
|
118
|
+
label: Additional Context
|
|
119
|
+
description: Any other context, screenshots, or references (links to similar features in other projects)
|
|
120
|
+
validations:
|
|
121
|
+
required: false
|
|
122
|
+
|
|
123
|
+
- type: checkboxes
|
|
124
|
+
id: checklist
|
|
125
|
+
attributes:
|
|
126
|
+
label: Pre-submission Checklist
|
|
127
|
+
options:
|
|
128
|
+
- label: I have searched existing issues and PRs to avoid duplicates
|
|
129
|
+
required: true
|
|
130
|
+
- label: This feature aligns with the project's goals and scope
|
|
131
|
+
required: true
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
<!-- Provide a brief description of the changes in this PR -->
|
|
4
|
+
|
|
5
|
+
## Type of Change
|
|
6
|
+
|
|
7
|
+
<!-- Check all that apply -->
|
|
8
|
+
|
|
9
|
+
- [ ] 🐛 Bug fix (non-breaking change which fixes an issue)
|
|
10
|
+
- [ ] ✨ New feature (non-breaking change which adds functionality)
|
|
11
|
+
- [ ] 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
|
12
|
+
- [ ] 📝 Documentation update
|
|
13
|
+
- [ ] 🎨 Code style update (formatting, renaming)
|
|
14
|
+
- [ ] ♻️ Code refactoring (no functional changes)
|
|
15
|
+
- [ ] ⚡ Performance improvement
|
|
16
|
+
- [ ] ✅ Test update
|
|
17
|
+
- [ ] 🔧 Build/CI configuration change
|
|
18
|
+
- [ ] 🔒 Security fix
|
|
19
|
+
|
|
20
|
+
## Related Issue
|
|
21
|
+
|
|
22
|
+
<!-- Link to related issue(s) -->
|
|
23
|
+
Fixes #(issue number)
|
|
24
|
+
|
|
25
|
+
## Changes Made
|
|
26
|
+
|
|
27
|
+
<!-- List the specific changes made in this PR -->
|
|
28
|
+
|
|
29
|
+
-
|
|
30
|
+
-
|
|
31
|
+
-
|
|
32
|
+
|
|
33
|
+
## Testing
|
|
34
|
+
|
|
35
|
+
<!-- Describe the tests you ran and how to reproduce -->
|
|
36
|
+
|
|
37
|
+
- [ ] All existing tests pass (`pytest`)
|
|
38
|
+
- [ ] Added new tests for new functionality
|
|
39
|
+
- [ ] Frontend tests pass (`npm test` in frontend/)
|
|
40
|
+
- [ ] Integration tests pass
|
|
41
|
+
- [ ] Manual testing performed
|
|
42
|
+
|
|
43
|
+
### Test Evidence
|
|
44
|
+
|
|
45
|
+
<!-- Paste test output or screenshots showing tests passing -->
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
# Paste relevant test output here
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Checklist
|
|
52
|
+
|
|
53
|
+
<!-- Check all that apply before requesting review -->
|
|
54
|
+
|
|
55
|
+
- [ ] My code follows the project's style guidelines (ruff, mypy)
|
|
56
|
+
- [ ] I have performed a self-review of my code
|
|
57
|
+
- [ ] I have commented my code, particularly in hard-to-understand areas
|
|
58
|
+
- [ ] I have made corresponding changes to the documentation
|
|
59
|
+
- [ ] My changes generate no new warnings or errors
|
|
60
|
+
- [ ] I have added tests that prove my fix is effective or that my feature works
|
|
61
|
+
- [ ] New and existing unit tests pass locally with my changes
|
|
62
|
+
- [ ] Any dependent changes have been merged and published
|
|
63
|
+
- [ ] I have updated the CHANGELOG.md (if applicable)
|
|
64
|
+
- [ ] I have used conventional commit messages (`feat:`, `fix:`, etc.)
|
|
65
|
+
|
|
66
|
+
## Screenshots/Demo
|
|
67
|
+
|
|
68
|
+
<!-- If applicable, add screenshots or GIFs to demonstrate the changes -->
|
|
69
|
+
|
|
70
|
+
## Additional Context
|
|
71
|
+
|
|
72
|
+
<!-- Add any other context about the PR here -->
|
|
73
|
+
|
|
74
|
+
## Deployment Notes
|
|
75
|
+
|
|
76
|
+
<!-- Any special deployment considerations? -->
|
|
77
|
+
|
|
78
|
+
## Reviewer Notes
|
|
79
|
+
|
|
80
|
+
<!-- Any specific areas you'd like reviewers to focus on? -->
|