pypi-query-mcp/pypi_query_mcp/prompts/trending_analysis.py
longhao a28d999958 fix: resolve all lint issues and fix failing tests
- Fix blank line whitespace issues (W293) using ruff --unsafe-fixes
- Reformat code using ruff format for consistent styling
- Fix analyze_package_quality function to return list[Message] instead of string
- Add missing 'assessment' keyword to package analysis template
- Update tests to use real prompt functions instead of mocks for structure validation
- Fix import ordering in test files
- All 64 tests now pass with 47% code coverage

Signed-off-by: longhao <hal.long@outlook.com>
2025-05-29 18:47:15 +08:00

362 lines
11 KiB
Python

"""Trending analysis prompt templates for PyPI MCP server."""
from typing import Annotated, Literal
from fastmcp import Context
from pydantic import Field
class Message:
"""Simple message class for prompt templates."""
def __init__(self, text: str, role: str = "user"):
self.text = text
self.role = role
async def analyze_daily_trends(
date: Annotated[
str | None,
Field(description="Specific date to analyze (YYYY-MM-DD) or 'today'"),
] = "today",
category: Annotated[
str | None,
Field(description="Package category to focus on (web, data, ml, etc.)"),
] = None,
limit: Annotated[
int, Field(description="Number of top packages to analyze", ge=5, le=50)
] = 20,
ctx: Context | None = None,
) -> str:
"""Generate a prompt template for analyzing daily PyPI trends.
This prompt template helps analyze the most downloaded packages on PyPI
for a specific day and understand trending patterns.
Returns a template string with {{date}}, {{category_filter}}, and {{limit}} variables.
"""
template = """Please analyze the daily PyPI download trends for {{date}}{{category_filter}}.
## 📊 Daily PyPI Trends Analysis
Show me the top {{limit}} most downloaded Python packages and provide insights into current trends.
### Download Statistics Analysis
- **Top Downloaded Packages**: List the most popular packages by download count
- **Download Numbers**: Specific download counts for each package
- **Growth Patterns**: Compare with previous days/weeks if possible
- **Market Share**: Relative popularity within the ecosystem
## 🔍 Trend Analysis Framework
### For Each Top Package, Analyze:
1. **Package Overview**
- Package name and primary purpose
- Current version and release status
- Maintainer and community info
2. **Download Metrics**
- Daily download count
- Weekly/monthly trends (if available)
- Growth rate and momentum
- Geographic distribution (if available)
3. **Ecosystem Context**
- Category/domain (web, data science, ML, etc.)
- Competing packages in same space
- Integration with other popular packages
- Enterprise vs. individual usage patterns
### Trending Insights
#### 🚀 Rising Stars
- Packages with significant growth
- New packages gaining traction
- Emerging technologies and frameworks
#### 📈 Steady Leaders
- Consistently popular packages
- Foundational libraries and tools
- Mature ecosystem components
#### 📉 Declining Trends
- Packages losing popularity
- Potential reasons for decline
- Alternative packages gaining ground
## 🎯 Market Intelligence
### Technology Trends
- What technologies are developers adopting?
- Which frameworks are gaining momentum?
- What problem domains are hot?
### Developer Behavior
- Package selection patterns
- Adoption speed of new technologies
- Community preferences and choices
### Ecosystem Health
- Diversity of popular packages
- Innovation vs. stability balance
- Open source project vitality
## 📋 Actionable Insights
Provide recommendations for:
- **Developers**: Which packages to consider for new projects
- **Maintainers**: Opportunities for package improvement
- **Organizations**: Technology adoption strategies
- **Investors**: Emerging technology trends
Include specific download numbers, growth percentages, and trend analysis."""
return template
async def find_trending_packages(
time_period: Annotated[
Literal["daily", "weekly", "monthly"],
Field(description="Time period for trend analysis"),
] = "weekly",
trend_type: Annotated[
Literal["rising", "declining", "new", "all"],
Field(description="Type of trends to focus on"),
] = "rising",
domain: Annotated[
str | None,
Field(description="Specific domain or category (web, ai, data, etc.)"),
] = None,
ctx: Context | None = None,
) -> str:
"""Generate a prompt template for finding trending packages.
This prompt template helps identify packages that are trending up or down
in the PyPI ecosystem over specific time periods.
Returns a template string with {{time_period}}, {{trend_type}}, and {{domain_filter}} variables.
"""
template = """Please identify {{trend_type}} trending Python packages over the {{time_period}} period{{domain_filter}}.
## 📈 Trending Package Discovery
Focus on packages showing significant {{trend_type}} trends in downloads and adoption.
### Trend Analysis Criteria
#### For {{trend_type}} Packages:
- **Rising**: Packages with increasing download velocity
- **Declining**: Packages losing popularity or downloads
- **New**: Recently published packages gaining traction
- **All**: Comprehensive trend analysis across categories
### Time Period: {{time_period}}
- **Daily**: Last 24-48 hours trend analysis
- **Weekly**: 7-day trend patterns and changes
- **Monthly**: 30-day trend analysis and momentum
## 🔍 Discovery Framework
### Trend Identification Metrics
1. **Download Growth Rate**
- Percentage increase/decrease in downloads
- Velocity of change (acceleration/deceleration)
- Consistency of trend direction
2. **Community Engagement**
- GitHub stars and forks growth
- Issue activity and resolution
- Community discussions and mentions
3. **Release Activity**
- Recent version releases
- Update frequency and quality
- Feature development pace
### For Each Trending Package, Provide:
#### 📊 Trend Metrics
- Current download numbers
- Growth/decline percentage
- Trend duration and stability
- Comparison with similar packages
#### 🔍 Package Analysis
- **Purpose and Functionality**: What problem does it solve?
- **Target Audience**: Who is using this package?
- **Unique Value Proposition**: Why is it trending?
- **Competition Analysis**: How does it compare to alternatives?
#### 🚀 Trend Drivers
- **Technology Shifts**: New frameworks or paradigms
- **Community Events**: Conferences, tutorials, viral content
- **Industry Adoption**: Enterprise or startup usage
- **Integration Opportunities**: Works well with popular tools
## 🎯 Trend Categories
### 🌟 Breakout Stars
- New packages with explosive growth
- Innovative solutions to common problems
- Next-generation tools and frameworks
### 📈 Steady Climbers
- Consistent growth over time
- Building solid user base
- Proven value and reliability
### ⚡ Viral Hits
- Sudden popularity spikes
- Social media or community driven
- May need sustainability assessment
### 🔄 Comeback Stories
- Previously popular packages regaining traction
- Major updates or improvements
- Community revival efforts
## 📋 Strategic Insights
### For Developers
- Which trending packages to evaluate for projects
- Early adoption opportunities and risks
- Technology direction indicators
### For Package Maintainers
- Competitive landscape changes
- Opportunities for collaboration
- Feature gaps in trending solutions
### For Organizations
- Technology investment directions
- Skill development priorities
- Strategic technology partnerships
Include specific trend data, growth metrics, and actionable recommendations."""
return template
async def track_package_updates(
time_range: Annotated[
Literal["today", "week", "month"],
Field(description="Time range for update tracking"),
] = "today",
update_type: Annotated[
Literal["all", "major", "security", "new"],
Field(description="Type of updates to track"),
] = "all",
popular_only: Annotated[
bool, Field(description="Focus only on popular packages (>1M downloads)")
] = False,
ctx: Context | None = None,
) -> str:
"""Generate a prompt template for tracking recent package updates.
This prompt template helps track and analyze recent package updates
on PyPI with filtering and categorization options.
Returns a template string with {{time_range}}, {{update_type}}, and {{popularity_filter}} variables.
"""
template = """Please track and analyze Python package updates from {{time_range}}{{popularity_filter}}.
## 📦 Package Update Tracking
Focus on {{update_type}} updates and provide insights into recent changes in the Python ecosystem.
### Update Analysis Scope
- **Time Range**: {{time_range}}
- **Update Type**: {{update_type}} updates
- **Package Selection**: {{popularity_description}}
## 🔍 Update Categories
### 🚨 Security Updates
- CVE fixes and security patches
- Vulnerability remediation
- Security-related improvements
### 🎯 Major Version Updates
- Breaking changes and API modifications
- New features and capabilities
- Architecture improvements
### 🔧 Minor Updates & Bug Fixes
- Bug fixes and stability improvements
- Performance enhancements
- Compatibility updates
### 🌟 New Package Releases
- Brand new packages published
- First stable releases (1.0.0)
- Emerging tools and libraries
## 📊 For Each Update, Provide:
### Update Details
1. **Package Information**
- Package name and description
- Previous version → New version
- Release date and timing
2. **Change Analysis**
- Key changes and improvements
- Breaking changes (if any)
- New features and capabilities
- Bug fixes and security patches
3. **Impact Assessment**
- Who should update and when
- Compatibility considerations
- Testing requirements
- Migration effort (for major updates)
### Ecosystem Impact
- **Dependency Effects**: How updates affect dependent packages
- **Community Response**: Developer adoption and feedback
- **Integration Impact**: Effects on popular development stacks
## 🎯 Update Insights
### 🔥 Notable Updates
- Most significant updates of the period
- High-impact changes for developers
- Security-critical updates requiring immediate attention
### 📈 Trend Patterns
- Which types of updates are most common
- Package maintenance activity levels
- Ecosystem health indicators
### ⚠️ Breaking Changes Alert
- Major version updates with breaking changes
- Migration guides and resources
- Timeline recommendations for updates
### 🌟 Innovation Highlights
- New features and capabilities
- Emerging patterns and technologies
- Developer experience improvements
## 📋 Action Recommendations
### Immediate Actions
- Critical security updates to apply now
- High-priority bug fixes
- Compatibility updates needed
### Planned Updates
- Major version upgrades requiring testing
- Feature updates worth evaluating
- Performance improvements to consider
### Monitoring Setup
- Packages to watch for future updates
- Automated update strategies
- Dependency management improvements
Include specific version numbers, release notes highlights, and update commands."""
return template