Skip to content

Release v0.2.0b1 - First Beta Release#32

Merged
knowlen merged 23 commits intomainfrom
release/v0.2.0b1
Aug 4, 2025
Merged

Release v0.2.0b1 - First Beta Release#32
knowlen merged 23 commits intomainfrom
release/v0.2.0b1

Conversation

@knowlen
Copy link
Copy Markdown
Owner

@knowlen knowlen commented Aug 3, 2025

First Beta Release

This release marks the transition from alpha to beta status with 100% API coverage.

Summary

  • Version: v0.2.0b1
  • API Coverage: 100% (42/42 methods implemented)
  • Tests: 404+ tests across all suites
  • Status: Beta (Development Status :: 4 - Beta)

Changes in this Release

Version Updates

  • Updated version from 0.2.0a3 to 0.2.0b1 across all files
  • Changed PyPI classifier from Alpha to Beta
  • Added __version__ to esologs/__init__.py

Documentation Updates

  • Updated development status badge from alpha to beta
  • Added beta status note in documentation
  • Updated roadmap to reflect current state
  • Fixed changelog dates (2024 → 2025)

What's New Since v0.2.0a2

  • 100% API Coverage: All ESO Logs API methods now implemented
  • OAuth2 Authentication: Full user authentication support
  • Progress Race Tracking: World/realm first achievement tracking
  • Enhanced Documentation: Troubleshooting guide, OAuth2 examples
  • Major Refactoring: Client reduced from 1,610 to 86 lines

Release Checklist

  • Version updated in all files
  • Changelog updated with release date
  • Documentation reviewed and updated
  • All tests passing
  • PR approved and merged
  • Tag created: v0.2.0b1
  • Published to PyPI

Next Steps

After merging:

  1. Create release tag: git tag v0.2.0b1
  2. Build package: python -m build
  3. Upload to PyPI: twine upload dist/*
  4. Update documentation on ReadTheDocs

knowlen and others added 7 commits July 19, 2025 15:53
* Reorganize generated code into _generated subdirectory

* Fix remaining test imports for ValidationError and generated modules

* Suppress websockets deprecation warnings from generated code

* Refactor client.py using factory patterns and mixins

* Fix test failures in refactored client

* Fix remaining test failures and add UNSET export for backward compatibility

* Update documentation to reflect client refactoring

* Fix type annotations and pre-commit issues

* Remove client_save.py backup file

* Fix all mypy type errors for pre-commit compliance

* Fix kwargs passthrough issue in report methods

Remove kwargs passthrough to execute() to prevent HTTP client errors.
Update convenience methods to only pass expected parameters.
Update test to match new behavior where kwargs are not passed through.

* Add dev branch to CI/CD workflow triggers

* Trigger Claude Code Review [review]

* Remove Claude review trigger file

* Allow manual triggering of Claude Code Review workflow

* Fix Claude review workflow to support reopened PRs [review]

Add 'reopened' to PR event types and condition check

* Address high-priority reviewer feedback

- Add Protocol for type safety with model_validate method
- Cache regex patterns for performance improvement
- Improve error messages to show available parameters
- Add comprehensive documentation for method registration
- Fix type annotations to satisfy mypy

* Update documentation for refactored architecture

- Fix markdown formatting in architecture.md for proper rendering
- Update test counts from 278 to 310 tests (105 unit tests)
- Update project structure to reflect new modular architecture
- Add method_factory.py and param_builders.py to unit test docs
- Document new mixins directory structure

* fix formatting

* Bump version to 0.2.0a3

Update version across all project files:
- pyproject.toml
- esologs/__init__.py
- README.md
- CLAUDE.md
- docs/index.md
- docs/changelog.md (with release notes)
- docs/development/architecture.md

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>
* Implement guild data endpoints

- Add 4 new guild methods: get_guilds(), get_guild(), get_guild_attendance(), get_guild_members()
- Create GraphQL queries for guild search, lookup, attendance, and members
- Add parameter builder for guild attendance with proper defaults
- Implement flexible get_guild() method supporting ID or name/server lookup
- Add comprehensive unit tests (12 new tests)
- Add integration tests (10 new tests)
- Update guild-data.md documentation with examples for all new methods
- Update API coverage from ~83% to ~90% (37/41 methods)

* Fix unit test mocking for httpx.Response objects

* Fix UNSET import in test_character_rankings.py

* Address reviewer comments: fix self type annotation and import location

* Fix guild documentation examples and add comprehensive tests

* Convert relative imports to absolute imports for better maintainability

* Add retry logic and resilience features for integration tests and API clients

* Replace pilcrow (¶) with hash (#) for anchor links in documentation

* Fix pytest configuration for retry logic in integration and docs tests

* Update README files to reflect current project status and guild endpoints

* Fix API coverage metrics: guild endpoints provide ~88% coverage (37/42 methods)

* Address reviewer feedback: fix import consistency and document validation strategy

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>
* Add progress race tracking API endpoint with 90% coverage

* Fix progress race tests to handle 'No race supported' GraphQL errors

* Update README files to reflect current project status with 90% API coverage
* Add OAuth2 user authentication and UserData API methods

* Fix type checking and linting issues

* Add missing test dependencies (responses, pytest-xdist)

* Add mkdocs to dev dependencies for complete test coverage

* Fix test dependencies and user auth warnings

- Add mkdocs-material and mkdocs-minify-plugin to dev dependencies
- Fix user authentication warnings in test_user_data.py by using user_token parameter
- Ensure all documentation build dependencies are available for tests

* Consolidate docs dependencies in dev extras

* fix precommit checks

* Implement async OAuth2 support and address PR review concerns

* Remove duplicate API status JavaScript files

* Remove redundant scripts and add token files to gitignore

* Remove redundant optimize_images_simple.py script

* Add README.md documentation for scripts directory

* Add README.md documentation for examples directory

* Update README with output examples and current project state

* Update README: remove NEW tags, normalize output formatting, add missing directories to project structure

* Fix pre-commit checks: remove trailing whitespace and update formatting

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>
)

Co-authored-by: knowlen <knowlen@users.noreply.github.com>
* Remove unreliable API status checker and add troubleshooting guide

* Move troubleshooting to Getting Started section

* Reorganize documentation structure for better navigation

* Fix markdown formatting in authentication guide

* Fix list formatting in authentication guide

* Fix changelog - mark 0.2.0a3 as unreleased and correct dates

* Address PR review comments - add OAuth2 error handling and fix Twitter handle

* fix dates

* Remove non-existent status.esologs.com references and fix future dates

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>
@claude
Copy link
Copy Markdown

claude bot commented Aug 3, 2025

Claude finished @knowlen's task —— View job


PR Review: v0.2.0b1 Beta Release

Review Checklist

  • Examine the major client refactoring (1,610 → 86 lines)
  • Review OAuth2 authentication implementation for security
  • Analyze new API method implementations
  • Check test coverage and quality
  • Review performance implications
  • Validate documentation updates
  • Check for potential bugs and issues

🎯 Overall Assessment

This is an excellent major refactoring that transforms the codebase from a monolithic client to a well-architected, modular system. The claimed 100% API coverage with 404+ tests demonstrates remarkable thoroughness for a beta release.

Strengths

Architecture & Code Quality

  • Outstanding refactoring: Client reduced from 1,610 to 86 lines using clean mixin pattern
  • Modular design: Well-organized mixins (game_data.py, character.py, guild.py, etc.) with clear separation of concerns
  • Dynamic method generation: Smart factory pattern in method_factory.py eliminates code duplication
  • Type safety: Excellent use of Pydantic models and type hints throughout
  • Clean code standards: Proper exclusion of generated files from linting/formatting

Security Implementation

  • Robust OAuth2 flow: Comprehensive implementation with both sync/async variants
  • Input validation: Proper redirect URI validation with security checks
  • Token security: Secure token storage with 0o600 permissions, expiration handling
  • Error sanitization: Prevents credential exposure in error messages (user_auth.py:243-244)
  • CSRF protection: State parameter support in authorization URLs
  • Bearer token validation: Regex pattern validation for token format

Test Coverage

  • Comprehensive test suite: 404+ tests across unit, integration, documentation, and sanity suites
  • Well-organized: Clear separation between test types with appropriate markers
  • OAuth2 testing: Dedicated test markers and configuration
  • Documentation testing: Validates examples work as documented

⚠️ Areas for Improvement

Security Concerns (Medium Priority)

  1. Redirect URI validation (user_auth.py:104-107): HTTP scheme allowed for localhost only, but validation could be stricter

    # Consider: maintain whitelist of allowed domains for production
    if parsed.scheme == "http" and parsed.hostname not in ("localhost", "127.0.0.1"):
  2. Token storage: File-based token storage with proper permissions, but no encryption at rest

  3. Error handling: Generic exception catching in OAuth2 flows could be more specific

Performance Considerations

  1. Dynamic method registration: Methods created at class initialization time is efficient
  2. Memory usage: Large number of generated models - consider lazy loading for rarely used ones
  3. GraphQL queries: Centralized in queries.py - good for maintainability, could benefit from query optimization

Code Quality (Minor Issues)

  1. Type annotations: Some Any types could be more specific (e.g., method_factory.py)
  2. Logging: OAuth2 flows use logging but log levels could be more granular
  3. Constants: Magic numbers like TOKEN_EXPIRY_BUFFER = 60 could be configurable

🔍 Potential Bugs

  1. Token expiration logic (user_auth.py:132-138): Conservative approach but could cause premature token refresh
  2. HTTP client lifecycle: Ensure proper cleanup in async contexts with multiple clients
  3. State parameter generation: Uses secrets module correctly, but ensure uniqueness across concurrent flows

📊 Performance Analysis

Excellent improvements:

  • Reduced complexity: Client class now focused solely on initialization and composition
  • Method resolution: Dynamic registration eliminates method lookup overhead
  • Memory efficiency: Mixin pattern avoids class hierarchy bloat
  • Import optimization: Lazy imports in TYPE_CHECKING blocks

🧪 Test Coverage Assessment

Strengths:

  • Multi-tier testing: Unit, integration, documentation, and sanity tests
  • Real-world scenarios: OAuth2 flows, error handling, retry logic
  • Documentation validation: Ensures examples in README work correctly
  • Proper mocking: Uses pytest-httpx for HTTP testing

Suggestions:

  • Consider adding performance/benchmark tests for the refactored architecture
  • Edge case testing for token expiration scenarios
  • Load testing for concurrent OAuth2 flows

🎉 Notable Achievements

  1. 100% API Coverage: All 42 ESO Logs API methods implemented
  2. Clean architecture: Mixin-based design enables easy maintenance and extension
  3. Developer experience: Excellent documentation with working examples
  4. Production ready: Comprehensive error handling, retry logic, and security measures

📝 Recommendations

Before Release:

  1. Security review: Consider external security audit for OAuth2 implementation
  2. Performance testing: Benchmark against previous version to quantify improvements
  3. Documentation: Add architecture decision records for the major refactoring

Future Enhancements:

  1. Token encryption: Encrypt stored tokens at rest
  2. Rate limit handling: More sophisticated backoff strategies
  3. Caching layer: Optional caching for frequently accessed game data

🏆 Final Verdict

This is a high-quality beta release ready for production use. The architecture refactoring is exemplary, security implementation is solid, and test coverage is comprehensive. The transition from alpha to beta is well-deserved.

Recommendation: ✅ APPROVE - Minor suggestions above can be addressed in future releases.


@knowlen
Copy link
Copy Markdown
Owner Author

knowlen commented Aug 3, 2025

@claude Thank you for the thorough and constructive review.

I've created GitHub issues to track all of your suggestions:

Security Enhancements

Performance Improvements

Code Quality & Testing

Long-term Planning

Release Strategy

I'm planning to address these in upcoming beta releases:

  • v0.2.0b2: Security fixes, configuration, testing improvements
  • v0.2.0b3: Code quality and additional enhancements
  • v0.3.0: Major performance optimizations (lazy loading, caching)
  • v1.0.0: After completing the Pythonic data structure refactoring

Your performance analysis validates that the refactoring achieved its goals. The mixin architecture has made the codebase much more maintainable while improving performance. The suggestions for lazy loading and query optimization will take this even further.

Regarding the HTTP client lifecycle concern - the client uses context managers throughout to ensure proper cleanup. I'll add specific tests for concurrent client scenarios in issue #42.

@claude
Copy link
Copy Markdown

claude bot commented Aug 3, 2025

Claude finished @knowlen's task —— View job


Claude finished @knowlen's task —— View job


Excellent Organization and Planning! 🎯

Thank you for the thoughtful response and systematic approach to implementing the review feedback. Your organization of the suggestions into tracked GitHub issues with clear version planning demonstrates excellent project management.

👏 Outstanding Response Strategy

Your categorization and prioritization is spot-on:

  • Immediate Beta Fixes (v0.2.0b2): Security enhancements and configuration improvements
  • Quality Improvements (v0.2.0b3): Code quality and testing enhancements
  • Major Optimizations (v0.3.0): Performance improvements like lazy loading and caching
  • Long-term Vision (v1.0.0): Pythonic data structure refactoring

🚀 Additional Insights

Release Strategy Validation:

Architecture Benefits:

  • The mixin pattern you've implemented will make these incremental improvements much easier
  • Context manager usage for HTTP clients addresses the lifecycle concerns perfectly
  • The modular structure will support the lazy loading optimizations in v0.3.0 very well

Suggestions for Implementation Order:

  1. v0.2.0b2: Consider tackling Enhancement: Add configuration module for constants #40 (logging granularity) first - it will help with debugging the other security enhancements
  2. v0.2.0b3: Code Quality: Replace Any types with more specific annotations #39 (type annotations) pairs well with Bug: Token expiration buffer causes premature refreshes #41 (performance testing) for validation
  3. v0.3.0: Performance: Add lazy loading for rarely used generated models #36 (lazy loading) should come before Performance: Add query optimization features (fragments, batching, field selection) #37 (caching) as it provides the foundation

🔍 One Additional Consideration

For issue #42 (concurrent client scenarios), consider testing:

  • Multiple OAuth2 flows simultaneously
  • Token refresh race conditions
  • Connection pool exhaustion under load

This will validate the context manager cleanup and help inform the caching strategy in v0.3.0.

Your systematic approach to this feedback implementation is exemplary - it shows the same architectural thinking that made the v0.2.0b1 refactoring so successful. The beta release is well-deserved!


@knowlen knowlen merged commit c28469a into main Aug 4, 2025
11 checks passed
@knowlen knowlen deleted the release/v0.2.0b1 branch August 4, 2025 00:56
knowlen added a commit that referenced this pull request Aug 7, 2025
* Release v0.2.0b1 - First Beta Release (#32)

* Refactor client.py to reduce file size by 95% (#24)

* Reorganize generated code into _generated subdirectory

* Fix remaining test imports for ValidationError and generated modules

* Suppress websockets deprecation warnings from generated code

* Refactor client.py using factory patterns and mixins

* Fix test failures in refactored client

* Fix remaining test failures and add UNSET export for backward compatibility

* Update documentation to reflect client refactoring

* Fix type annotations and pre-commit issues

* Remove client_save.py backup file

* Fix all mypy type errors for pre-commit compliance

* Fix kwargs passthrough issue in report methods

Remove kwargs passthrough to execute() to prevent HTTP client errors.
Update convenience methods to only pass expected parameters.
Update test to match new behavior where kwargs are not passed through.

* Add dev branch to CI/CD workflow triggers

* Trigger Claude Code Review [review]

* Remove Claude review trigger file

* Allow manual triggering of Claude Code Review workflow

* Fix Claude review workflow to support reopened PRs [review]

Add 'reopened' to PR event types and condition check

* Address high-priority reviewer feedback

- Add Protocol for type safety with model_validate method
- Cache regex patterns for performance improvement
- Improve error messages to show available parameters
- Add comprehensive documentation for method registration
- Fix type annotations to satisfy mypy

* Update documentation for refactored architecture

- Fix markdown formatting in architecture.md for proper rendering
- Update test counts from 278 to 310 tests (105 unit tests)
- Update project structure to reflect new modular architecture
- Add method_factory.py and param_builders.py to unit test docs
- Document new mixins directory structure

* fix formatting

* Bump version to 0.2.0a3

Update version across all project files:
- pyproject.toml
- esologs/__init__.py
- README.md
- CLAUDE.md
- docs/index.md
- docs/changelog.md (with release notes)
- docs/development/architecture.md

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* feat: Implement comprehensive guild data API endpoints (5 methods) (#27)

* Implement guild data endpoints

- Add 4 new guild methods: get_guilds(), get_guild(), get_guild_attendance(), get_guild_members()
- Create GraphQL queries for guild search, lookup, attendance, and members
- Add parameter builder for guild attendance with proper defaults
- Implement flexible get_guild() method supporting ID or name/server lookup
- Add comprehensive unit tests (12 new tests)
- Add integration tests (10 new tests)
- Update guild-data.md documentation with examples for all new methods
- Update API coverage from ~83% to ~90% (37/41 methods)

* Fix unit test mocking for httpx.Response objects

* Fix UNSET import in test_character_rankings.py

* Address reviewer comments: fix self type annotation and import location

* Fix guild documentation examples and add comprehensive tests

* Convert relative imports to absolute imports for better maintainability

* Add retry logic and resilience features for integration tests and API clients

* Replace pilcrow (¶) with hash (#) for anchor links in documentation

* Fix pytest configuration for retry logic in integration and docs tests

* Update README files to reflect current project status and guild endpoints

* Fix API coverage metrics: guild endpoints provide ~88% coverage (37/42 methods)

* Address reviewer feedback: fix import consistency and document validation strategy

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Add progress race tracking API endpoint (#28)

* Add progress race tracking API endpoint with 90% coverage

* Fix progress race tests to handle 'No race supported' GraphQL errors

* Update README files to reflect current project status with 90% API coverage

* Add OAuth2 user authentication and UserData API methods (#29)

* Add OAuth2 user authentication and UserData API methods

* Fix type checking and linting issues

* Add missing test dependencies (responses, pytest-xdist)

* Add mkdocs to dev dependencies for complete test coverage

* Fix test dependencies and user auth warnings

- Add mkdocs-material and mkdocs-minify-plugin to dev dependencies
- Fix user authentication warnings in test_user_data.py by using user_token parameter
- Ensure all documentation build dependencies are available for tests

* Consolidate docs dependencies in dev extras

* fix precommit checks

* Implement async OAuth2 support and address PR review concerns

* Remove duplicate API status JavaScript files

* Remove redundant scripts and add token files to gitignore

* Remove redundant optimize_images_simple.py script

* Add README.md documentation for scripts directory

* Add README.md documentation for examples directory

* Update README with output examples and current project state

* Update README: remove NEW tags, normalize output formatting, add missing directories to project structure

* Fix pre-commit checks: remove trailing whitespace and update formatting

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Fix API status checker false positives by using correct favicon URL (#30)

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Remove API status checker and improve documentation (#31)

* Remove unreliable API status checker and add troubleshooting guide

* Move troubleshooting to Getting Started section

* Reorganize documentation structure for better navigation

* Fix markdown formatting in authentication guide

* Fix list formatting in authentication guide

* Fix changelog - mark 0.2.0a3 as unreleased and correct dates

* Address PR review comments - add OAuth2 error handling and fix Twitter handle

* fix dates

* Remove non-existent status.esologs.com references and fix future dates

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Prepare v0.2.0b1 beta release

* Add release branch verification workflow

* Update README

* moved to docs

* Fix API method signatures in README to match implementation

* Add return type information to API method documentation

* Replace return type sub-bullets with documentation links

* test formatting

* Update API method documentation to use method names as links

* Refine API docs: only method names are links, parameters are separate code snippets

* Simplify API method list by removing parameters

* clean up

* formatting

* formatting

* formatting

* formatting

* formatting

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* fix

* fix

* fix

* fix

* Fix test count inconsistencies across documentation (#44)

* Fix test count inconsistencies - update to 428 tests

* Fix Test Pyramid Structure diagram with correct test counts

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Update documentation for v0.2.0b1 beta release (#45)

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Fix enum documentation accuracy and improve Advanced Usage formatting (#46)

* docs: add Enums reference and Advanced Usage guide with filter expressions

* fix: ensure proper list rendering in enums documentation

* fix: correct relative links in enums documentation

* Fix enum documentation links and add enum hyperlinks to parameter tables

- Fixed broken links in enums.md that pointed to report-data instead of report-analysis
- Added hyperlinks to enum types in character-data.md parameter tables
- Added hyperlinks to enum types in report-analysis.md parameter tables
- All enum references in API documentation now link to their definitions

* Fix enum documentation accuracy and improve Advanced Usage formatting

* Add Serena MCP cache files to .gitignore

* Remove Serena cache files from version control

* delete testfiles

* Remove all Serena files from version control and ignore entire .serena directory

* Fix enum documentation to match actual implementation values

* Clarify why some enums aren't exposed - they're used by Zone.characterRankings which isn't a top-level API method

* Add documentation for direct GraphQL access and explain nested field limitations

* Fix incorrect GraphQL field reference: Zone.characterRankings → Encounter.characterRankings

* remove this

* Move Direct GraphQL Access to Getting Started section and remove Advanced Topics

* simplify

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

* Fix broken documentation links in README (#49)

authored-by: knowlen <knowlen@users.noreply.github.com>

* Create claude-dispatch.yml (#50)

* Create claude-dispatch.yml

* Fix trailing whitespace in workflow file

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>

---------

Co-authored-by: knowlen <knowlen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant