Name | github-discussions JSON |
Version |
0.1.0
JSON |
| download |
home_page | https://github.com/Declytic/github-discussions-graphql |
Summary | A Python package for interacting with GitHub Discussions using GraphQL API |
upload_time | 2025-09-10 02:51:16 |
maintainer | None |
docs_url | None |
author | Bill Schumacher |
requires_python | >=3.8 |
license | MIT License
Copyright (c) 2025 Bill Schumacher
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
|
keywords |
github
graphql
discussions
api
python
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# GitHub Discussions GraphQL Client
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](https://badge.fury.io/py/github-discussions)
A comprehensive Python package for interacting with GitHub Discussions using the GraphQL API. This package provides a clean, type-safe interface for managing discussions, comments, and related functionality on GitHub.
This project is generated 99% by grok-code-fast-1, there may be missing, incomplete or incorrect features. Contributors welcome!
## Features
- ๐ **Secure Authentication**: Support for personal access tokens and GitHub Apps
- ๐ **Full Discussion Management**: Create, read, update, and delete discussions
- ๐ฌ **Comment Management**: Handle discussion comments with full CRUD operations
- ๐ท๏ธ **Category Support**: Work with discussion categories
- โญ **Pin/Unpin Discussions**: Manage pinned discussions
- ๐ฏ **Answer Marking**: Mark comments as answers
- ๐ **Advanced Pagination**: Fixed cursor-based pagination with automatic iteration
- ๐ **Search Integration**: Search discussions using GitHub's search API
- ๐ก๏ธ **Type Safety**: Full type hints and Pydantic models
- โก **Async Support**: Optional async/await support
- ๐งช **Well Tested**: "Comprehensive" test coverage, the llm is a bit optimistic here.
- ๐๏ธ **Clean Architecture**: Refactored to eliminate code duplication between sync/async clients
## Installation
```bash
pip install github-discussions
```
## Quick Start
```python
from github_discussions import GitHubDiscussionsClient
# Initialize the client
client = GitHubDiscussionsClient(token="your_github_token")
# Get discussions for a repository
discussions = client.get_discussions(
owner="octocat",
repo="Hello-World",
first=10
)
# Create a new discussion
discussion = client.create_discussion(
repository_id="R_kgDOAHz1OX",
category_id="DIC_kwDOAHz1OX4CW5wG",
title="My New Discussion",
body="This is the content of my discussion"
)
# Add a comment to a discussion
comment = client.add_discussion_comment(
discussion_id="D_kwDOAHz1OX4uYAah",
body="This is my comment"
)
```
## Authentication
The package supports multiple authentication methods:
### Personal Access Token
```python
from github_discussions import GitHubDiscussionsClient
client = GitHubDiscussionsClient(token="ghp_your_token_here")
```
### GitHub App
```python
from github_discussions import GitHubDiscussionsClient
client = GitHubDiscussionsClient(
token="installation_token",
app_id="your_app_id"
)
```
## Core Features
### Managing Discussions
```python
# Get all discussions
discussions = client.get_discussions("owner", "repo")
# Get a specific discussion
discussion = client.get_discussion("owner", "repo", number=1)
# Create a discussion
new_discussion = client.create_discussion(
repository_id="repo_id",
category_id="category_id",
title="Discussion Title",
body="Discussion content"
)
# Update a discussion
updated = client.update_discussion(
discussion_id="discussion_id",
title="New Title",
body="Updated content"
)
# Delete a discussion
client.delete_discussion("discussion_id")
```
### Working with Comments
```python
# Get comments for a discussion
comments = client.get_discussion_comments("discussion_id")
# Add a comment
comment = client.add_discussion_comment(
discussion_id="discussion_id",
body="Comment content",
reply_to_id="parent_comment_id" # Optional
)
# Update a comment
updated_comment = client.update_discussion_comment(
comment_id="comment_id",
body="Updated comment content"
)
# Delete a comment
client.delete_discussion_comment("comment_id")
# Mark comment as answer
client.mark_comment_as_answer("comment_id")
# Unmark comment as answer
client.unmark_comment_as_answer("comment_id")
```
### Managing Categories
```python
# Get discussion categories
categories = client.get_discussion_categories("owner", "repo")
# Create a category (if you have admin permissions)
category = client.create_discussion_category(
repository_id="repo_id",
name="New Category",
description="Category description",
emoji="๐ฏ"
)
```
### Pinned Discussions
```python
# Get pinned discussions
pinned = client.get_pinned_discussions("owner", "repo")
# Pin a discussion
client.pin_discussion("discussion_id")
# Unpin a discussion
client.unpin_discussion("discussion_id")
```
## Advanced Usage
### Async Support
```python
import asyncio
from github_discussions import AsyncGitHubDiscussionsClient
async def main():
async with AsyncGitHubDiscussionsClient(token="your_token") as client:
discussions = await client.get_discussions("owner", "repo")
print(discussions)
asyncio.run(main())
```
### Custom GraphQL Queries
```python
# Execute custom GraphQL queries
result = client.execute_query("""
query($owner: String!, $repo: String!) {
repository(owner: $owner, name: $repo) {
discussions(first: 10) {
nodes {
id
title
createdAt
author {
login
}
}
}
}
}
""", variables={"owner": "octocat", "repo": "Hello-World"})
```
### Pagination
```python
# Automatic pagination handling
all_discussions = []
for page in client.get_discussions_paginated("owner", "repo"):
all_discussions.extend(page)
```
### Error Handling
```python
from github_discussions import GitHubGraphQLError, RateLimitError
try:
discussion = client.get_discussion("owner", "repo", 1)
except RateLimitError as e:
print(f"Rate limited. Reset at: {e.reset_at}")
# Wait or retry with backoff
except GitHubGraphQLError as e:
print(f"GraphQL error: {e.message}")
# Handle GraphQL-specific errors
except Exception as e:
print(f"Other error: {e}")
```
## Architecture
### Clean Code Design
The package has been refactored to eliminate code duplication between synchronous and asynchronous clients:
- **Base Client**: `BaseGitHubDiscussionsClient` contains all shared functionality
- **Sync Client**: `GitHubDiscussionsClient` inherits from base and adds synchronous HTTP requests
- **Async Client**: `AsyncGitHubDiscussionsClient` inherits from base and adds asynchronous HTTP requests
This design ensures:
- โ
**DRY Principle**: No code duplication between sync and async implementations
- โ
**Maintainability**: Changes to core logic only need to be made in one place
- โ
**Consistency**: Both clients have identical functionality and behavior
- โ
**Type Safety**: Shared type definitions and validation
## Configuration
### Rate Limiting
The client automatically handles GitHub's rate limits:
```python
# Check current rate limit status
status = client.get_rate_limit_status()
print(f"Remaining: {status['remaining']}, Reset: {status['reset_at']}")
# Custom retry configuration
client = GitHubDiscussionsClient(
token="your_token",
max_retries=3,
retry_backoff=2.0
)
```
### Timeouts
```python
client = GitHubDiscussionsClient(
token="your_token",
timeout=30.0 # 30 second timeout
)
```
## API Reference
For complete API documentation, see the [API Reference](https://github.com/Declytic/github-discussions/docs/api.md).
## Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests
5. Submit a pull request
## Development
### Setup Development Environment
```bash
# Clone the repository
git clone https://github.com/Declytic/github-discussions.git
cd github-discussions
# Install dependencies
pip install -e ".[dev]"
# Install pre-commit hooks (recommended)
pre-commit install
# Run tests
pytest
# Run linting
black .
isort .
flake8 .
mypy .
```
### Testing
```bash
# Run all tests
pytest
# Run with coverage
pytest --cov=github_discussions
# Run specific test
pytest tests/test_discussions.py::test_get_discussions
```
## CI/CD
This project uses GitHub Actions for continuous integration and deployment. The following workflows are configured:
### Workflows
- **CI** (`.github/workflows/ci.yml`): Runs tests on multiple Python versions (3.8-3.12) across different operating systems (Ubuntu, Windows, macOS)
- **Code Quality** (`.github/workflows/code-quality.yml`): Runs linting, formatting checks, and type checking
- **Pre-commit** (`.github/workflows/pre-commit.yml`): Runs pre-commit hooks to ensure code quality
- **Security** (`.github/workflows/security.yml`): Scans for security vulnerabilities and dependency issues
- **Release** (`.github/workflows/release.yml`): Builds and publishes the package to PyPI when a release is created
- **Development** (`.github/workflows/dev.yml`): Manual workflow for development tasks (can be triggered manually)
### Automated Checks
The following checks run automatically on every push and pull request:
- **Testing**: Unit tests with pytest across multiple Python versions
- **Code Coverage**: Coverage reporting with Codecov integration
- **Linting**: flake8 for code style and error detection
- **Type Checking**: mypy for static type analysis
- **Formatting**: black and isort for code formatting
- **Security**: Bandit for security linting, Safety for dependency vulnerabilities
- **Pre-commit**: Automated code quality checks
### Releasing
To release a new version:
1. **Automatic Release**: Create a new release on GitHub with a version tag (e.g., `v1.0.0`)
2. **Manual Release**: Use the "Development" workflow with the "build" task, then manually upload to PyPI
The release workflow will:
- Build the package using `python -m build`
- Run final tests
- Publish to PyPI using trusted publishing
- Optionally deploy documentation to GitHub Pages
### Dependencies
Dependencies are automatically updated weekly using Dependabot:
- Python dependencies from `pyproject.toml`
- GitHub Actions versions
- Security updates with priority
### Pre-commit Hooks
Pre-commit hooks are configured to run locally and in CI:
```bash
# Install hooks
pre-commit install
# Run on all files
pre-commit run --all-files
# Update hook versions
pre-commit autoupdate
```
Configured hooks include:
- Code formatting (black, isort)
- Linting (flake8, mypy, bandit)
- General file checks (trailing whitespace, large files, etc.)
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Support
- ๐ [Documentation](https://github.com/Declytic/github-discussions/docs/)
- ๐ [Issue Tracker](https://github.com/Declytic/github-discussions/issues)
- ๐ฌ [Discussions](https://github.com/Declytic/github-discussions/discussions)
## Changelog
See [CHANGELOG.md](CHANGELOG.md) for a list of changes and version history.
Raw data
{
"_id": null,
"home_page": "https://github.com/Declytic/github-discussions-graphql",
"name": "github-discussions",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Bill Schumacher <34168009+BillSchumacher@users.noreply.github.com>",
"keywords": "github, graphql, discussions, api, python",
"author": "Bill Schumacher",
"author_email": "Bill Schumacher <34168009+BillSchumacher@users.noreply.github.com>",
"download_url": "https://files.pythonhosted.org/packages/81/dd/35dcb2d720020ba85c66f339176278710baf69d01191737092d69832d8ca/github_discussions-0.1.0.tar.gz",
"platform": null,
"description": "# GitHub Discussions GraphQL Client\r\n\r\n[](https://www.python.org/downloads/)\r\n[](https://opensource.org/licenses/MIT)\r\n[](https://badge.fury.io/py/github-discussions)\r\n\r\nA comprehensive Python package for interacting with GitHub Discussions using the GraphQL API. This package provides a clean, type-safe interface for managing discussions, comments, and related functionality on GitHub.\r\n\r\nThis project is generated 99% by grok-code-fast-1, there may be missing, incomplete or incorrect features. Contributors welcome!\r\n\r\n## Features\r\n\r\n- \ud83d\udd10 **Secure Authentication**: Support for personal access tokens and GitHub Apps\r\n- \ud83d\udcdd **Full Discussion Management**: Create, read, update, and delete discussions\r\n- \ud83d\udcac **Comment Management**: Handle discussion comments with full CRUD operations\r\n- \ud83c\udff7\ufe0f **Category Support**: Work with discussion categories\r\n- \u2b50 **Pin/Unpin Discussions**: Manage pinned discussions\r\n- \ud83c\udfaf **Answer Marking**: Mark comments as answers\r\n- \ud83d\udcca **Advanced Pagination**: Fixed cursor-based pagination with automatic iteration\r\n- \ud83d\udd0d **Search Integration**: Search discussions using GitHub's search API\r\n- \ud83d\udee1\ufe0f **Type Safety**: Full type hints and Pydantic models\r\n- \u26a1 **Async Support**: Optional async/await support\r\n- \ud83e\uddea **Well Tested**: \"Comprehensive\" test coverage, the llm is a bit optimistic here.\r\n- \ud83c\udfd7\ufe0f **Clean Architecture**: Refactored to eliminate code duplication between sync/async clients\r\n\r\n## Installation\r\n\r\n```bash\r\npip install github-discussions\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\nfrom github_discussions import GitHubDiscussionsClient\r\n\r\n# Initialize the client\r\nclient = GitHubDiscussionsClient(token=\"your_github_token\")\r\n\r\n# Get discussions for a repository\r\ndiscussions = client.get_discussions(\r\n owner=\"octocat\",\r\n repo=\"Hello-World\",\r\n first=10\r\n)\r\n\r\n# Create a new discussion\r\ndiscussion = client.create_discussion(\r\n repository_id=\"R_kgDOAHz1OX\",\r\n category_id=\"DIC_kwDOAHz1OX4CW5wG\",\r\n title=\"My New Discussion\",\r\n body=\"This is the content of my discussion\"\r\n)\r\n\r\n# Add a comment to a discussion\r\ncomment = client.add_discussion_comment(\r\n discussion_id=\"D_kwDOAHz1OX4uYAah\",\r\n body=\"This is my comment\"\r\n)\r\n```\r\n\r\n## Authentication\r\n\r\nThe package supports multiple authentication methods:\r\n\r\n### Personal Access Token\r\n\r\n```python\r\nfrom github_discussions import GitHubDiscussionsClient\r\n\r\nclient = GitHubDiscussionsClient(token=\"ghp_your_token_here\")\r\n```\r\n\r\n### GitHub App\r\n\r\n```python\r\nfrom github_discussions import GitHubDiscussionsClient\r\n\r\nclient = GitHubDiscussionsClient(\r\n token=\"installation_token\",\r\n app_id=\"your_app_id\"\r\n)\r\n```\r\n\r\n\r\n## Core Features\r\n\r\n### Managing Discussions\r\n\r\n```python\r\n# Get all discussions\r\ndiscussions = client.get_discussions(\"owner\", \"repo\")\r\n\r\n# Get a specific discussion\r\ndiscussion = client.get_discussion(\"owner\", \"repo\", number=1)\r\n\r\n# Create a discussion\r\nnew_discussion = client.create_discussion(\r\n repository_id=\"repo_id\",\r\n category_id=\"category_id\",\r\n title=\"Discussion Title\",\r\n body=\"Discussion content\"\r\n)\r\n\r\n# Update a discussion\r\nupdated = client.update_discussion(\r\n discussion_id=\"discussion_id\",\r\n title=\"New Title\",\r\n body=\"Updated content\"\r\n)\r\n\r\n# Delete a discussion\r\nclient.delete_discussion(\"discussion_id\")\r\n```\r\n\r\n### Working with Comments\r\n\r\n```python\r\n# Get comments for a discussion\r\ncomments = client.get_discussion_comments(\"discussion_id\")\r\n\r\n# Add a comment\r\ncomment = client.add_discussion_comment(\r\n discussion_id=\"discussion_id\",\r\n body=\"Comment content\",\r\n reply_to_id=\"parent_comment_id\" # Optional\r\n)\r\n\r\n# Update a comment\r\nupdated_comment = client.update_discussion_comment(\r\n comment_id=\"comment_id\",\r\n body=\"Updated comment content\"\r\n)\r\n\r\n# Delete a comment\r\nclient.delete_discussion_comment(\"comment_id\")\r\n\r\n# Mark comment as answer\r\nclient.mark_comment_as_answer(\"comment_id\")\r\n\r\n# Unmark comment as answer\r\nclient.unmark_comment_as_answer(\"comment_id\")\r\n```\r\n\r\n### Managing Categories\r\n\r\n```python\r\n# Get discussion categories\r\ncategories = client.get_discussion_categories(\"owner\", \"repo\")\r\n\r\n# Create a category (if you have admin permissions)\r\ncategory = client.create_discussion_category(\r\n repository_id=\"repo_id\",\r\n name=\"New Category\",\r\n description=\"Category description\",\r\n emoji=\"\ud83c\udfaf\"\r\n)\r\n```\r\n\r\n### Pinned Discussions\r\n\r\n```python\r\n# Get pinned discussions\r\npinned = client.get_pinned_discussions(\"owner\", \"repo\")\r\n\r\n# Pin a discussion\r\nclient.pin_discussion(\"discussion_id\")\r\n\r\n# Unpin a discussion\r\nclient.unpin_discussion(\"discussion_id\")\r\n```\r\n\r\n## Advanced Usage\r\n\r\n### Async Support\r\n\r\n```python\r\nimport asyncio\r\nfrom github_discussions import AsyncGitHubDiscussionsClient\r\n\r\nasync def main():\r\n async with AsyncGitHubDiscussionsClient(token=\"your_token\") as client:\r\n discussions = await client.get_discussions(\"owner\", \"repo\")\r\n print(discussions)\r\n\r\nasyncio.run(main())\r\n```\r\n\r\n### Custom GraphQL Queries\r\n\r\n```python\r\n# Execute custom GraphQL queries\r\nresult = client.execute_query(\"\"\"\r\n query($owner: String!, $repo: String!) {\r\n repository(owner: $owner, name: $repo) {\r\n discussions(first: 10) {\r\n nodes {\r\n id\r\n title\r\n createdAt\r\n author {\r\n login\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\"\"\", variables={\"owner\": \"octocat\", \"repo\": \"Hello-World\"})\r\n```\r\n\r\n### Pagination\r\n\r\n```python\r\n# Automatic pagination handling\r\nall_discussions = []\r\nfor page in client.get_discussions_paginated(\"owner\", \"repo\"):\r\n all_discussions.extend(page)\r\n```\r\n\r\n### Error Handling\r\n\r\n```python\r\nfrom github_discussions import GitHubGraphQLError, RateLimitError\r\n\r\ntry:\r\n discussion = client.get_discussion(\"owner\", \"repo\", 1)\r\nexcept RateLimitError as e:\r\n print(f\"Rate limited. Reset at: {e.reset_at}\")\r\n # Wait or retry with backoff\r\nexcept GitHubGraphQLError as e:\r\n print(f\"GraphQL error: {e.message}\")\r\n # Handle GraphQL-specific errors\r\nexcept Exception as e:\r\n print(f\"Other error: {e}\")\r\n```\r\n\r\n## Architecture\r\n\r\n### Clean Code Design\r\n\r\nThe package has been refactored to eliminate code duplication between synchronous and asynchronous clients:\r\n\r\n- **Base Client**: `BaseGitHubDiscussionsClient` contains all shared functionality\r\n- **Sync Client**: `GitHubDiscussionsClient` inherits from base and adds synchronous HTTP requests\r\n- **Async Client**: `AsyncGitHubDiscussionsClient` inherits from base and adds asynchronous HTTP requests\r\n\r\nThis design ensures:\r\n- \u2705 **DRY Principle**: No code duplication between sync and async implementations\r\n- \u2705 **Maintainability**: Changes to core logic only need to be made in one place\r\n- \u2705 **Consistency**: Both clients have identical functionality and behavior\r\n- \u2705 **Type Safety**: Shared type definitions and validation\r\n\r\n## Configuration\r\n\r\n### Rate Limiting\r\n\r\nThe client automatically handles GitHub's rate limits:\r\n\r\n```python\r\n# Check current rate limit status\r\nstatus = client.get_rate_limit_status()\r\nprint(f\"Remaining: {status['remaining']}, Reset: {status['reset_at']}\")\r\n\r\n# Custom retry configuration\r\nclient = GitHubDiscussionsClient(\r\n token=\"your_token\",\r\n max_retries=3,\r\n retry_backoff=2.0\r\n)\r\n```\r\n\r\n### Timeouts\r\n\r\n```python\r\nclient = GitHubDiscussionsClient(\r\n token=\"your_token\",\r\n timeout=30.0 # 30 second timeout\r\n)\r\n```\r\n\r\n## API Reference\r\n\r\nFor complete API documentation, see the [API Reference](https://github.com/Declytic/github-discussions/docs/api.md).\r\n\r\n## Contributing\r\n\r\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\r\n\r\n1. Fork the repository\r\n2. Create a feature branch\r\n3. Make your changes\r\n4. Add tests\r\n5. Submit a pull request\r\n\r\n## Development\r\n\r\n### Setup Development Environment\r\n\r\n```bash\r\n# Clone the repository\r\ngit clone https://github.com/Declytic/github-discussions.git\r\ncd github-discussions\r\n\r\n# Install dependencies\r\npip install -e \".[dev]\"\r\n\r\n# Install pre-commit hooks (recommended)\r\npre-commit install\r\n\r\n# Run tests\r\npytest\r\n\r\n# Run linting\r\nblack .\r\nisort .\r\nflake8 .\r\nmypy .\r\n```\r\n\r\n### Testing\r\n\r\n```bash\r\n# Run all tests\r\npytest\r\n\r\n# Run with coverage\r\npytest --cov=github_discussions\r\n\r\n# Run specific test\r\npytest tests/test_discussions.py::test_get_discussions\r\n```\r\n\r\n## CI/CD\r\n\r\nThis project uses GitHub Actions for continuous integration and deployment. The following workflows are configured:\r\n\r\n### Workflows\r\n\r\n- **CI** (`.github/workflows/ci.yml`): Runs tests on multiple Python versions (3.8-3.12) across different operating systems (Ubuntu, Windows, macOS)\r\n- **Code Quality** (`.github/workflows/code-quality.yml`): Runs linting, formatting checks, and type checking\r\n- **Pre-commit** (`.github/workflows/pre-commit.yml`): Runs pre-commit hooks to ensure code quality\r\n- **Security** (`.github/workflows/security.yml`): Scans for security vulnerabilities and dependency issues\r\n- **Release** (`.github/workflows/release.yml`): Builds and publishes the package to PyPI when a release is created\r\n- **Development** (`.github/workflows/dev.yml`): Manual workflow for development tasks (can be triggered manually)\r\n\r\n### Automated Checks\r\n\r\nThe following checks run automatically on every push and pull request:\r\n\r\n- **Testing**: Unit tests with pytest across multiple Python versions\r\n- **Code Coverage**: Coverage reporting with Codecov integration\r\n- **Linting**: flake8 for code style and error detection\r\n- **Type Checking**: mypy for static type analysis\r\n- **Formatting**: black and isort for code formatting\r\n- **Security**: Bandit for security linting, Safety for dependency vulnerabilities\r\n- **Pre-commit**: Automated code quality checks\r\n\r\n### Releasing\r\n\r\nTo release a new version:\r\n\r\n1. **Automatic Release**: Create a new release on GitHub with a version tag (e.g., `v1.0.0`)\r\n2. **Manual Release**: Use the \"Development\" workflow with the \"build\" task, then manually upload to PyPI\r\n\r\nThe release workflow will:\r\n- Build the package using `python -m build`\r\n- Run final tests\r\n- Publish to PyPI using trusted publishing\r\n- Optionally deploy documentation to GitHub Pages\r\n\r\n### Dependencies\r\n\r\nDependencies are automatically updated weekly using Dependabot:\r\n- Python dependencies from `pyproject.toml`\r\n- GitHub Actions versions\r\n- Security updates with priority\r\n\r\n### Pre-commit Hooks\r\n\r\nPre-commit hooks are configured to run locally and in CI:\r\n\r\n```bash\r\n# Install hooks\r\npre-commit install\r\n\r\n# Run on all files\r\npre-commit run --all-files\r\n\r\n# Update hook versions\r\npre-commit autoupdate\r\n```\r\n\r\nConfigured hooks include:\r\n- Code formatting (black, isort)\r\n- Linting (flake8, mypy, bandit)\r\n- General file checks (trailing whitespace, large files, etc.)\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n\r\n## Support\r\n\r\n- \ud83d\udcda [Documentation](https://github.com/Declytic/github-discussions/docs/)\r\n- \ud83d\udc1b [Issue Tracker](https://github.com/Declytic/github-discussions/issues)\r\n- \ud83d\udcac [Discussions](https://github.com/Declytic/github-discussions/discussions)\r\n\r\n## Changelog\r\n\r\nSee [CHANGELOG.md](CHANGELOG.md) for a list of changes and version history.\r\n",
"bugtrack_url": null,
"license": "MIT License\r\n \r\n Copyright (c) 2025 Bill Schumacher\r\n \r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n \r\n The above copyright notice and this permission notice shall be included in all\r\n copies or substantial portions of the Software.\r\n \r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n SOFTWARE.\r\n ",
"summary": "A Python package for interacting with GitHub Discussions using GraphQL API",
"version": "0.1.0",
"project_urls": {
"Changelog": "https://github.com/Declytic/github-discussions/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/Declytic/github-discussionsl#readme",
"Homepage": "https://github.com/Declytic/github-discussions",
"Issues": "https://github.com/Declytic/github-discussions/issues",
"Repository": "https://github.com/Declytic/github-discussions.git"
},
"split_keywords": [
"github",
" graphql",
" discussions",
" api",
" python"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3abc9c3728269000c72fcb4e506ef0e4210cae367956505f1b21a19d510cfb89",
"md5": "858312d8e0edc10dc286c0c8905e9eb2",
"sha256": "b502efad684340332380727a75d6ade4a76dd188063e0e6ac8a142415c30a82a"
},
"downloads": -1,
"filename": "github_discussions-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "858312d8e0edc10dc286c0c8905e9eb2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 17681,
"upload_time": "2025-09-10T02:51:15",
"upload_time_iso_8601": "2025-09-10T02:51:15.066421Z",
"url": "https://files.pythonhosted.org/packages/3a/bc/9c3728269000c72fcb4e506ef0e4210cae367956505f1b21a19d510cfb89/github_discussions-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "81dd35dcb2d720020ba85c66f339176278710baf69d01191737092d69832d8ca",
"md5": "cecac218d8ea9b0013d7696d4ad51fff",
"sha256": "f1e671cfa0c89e4a4fb02d0fb0ed56eb2448e13603259d45fd244c38d11ddec7"
},
"downloads": -1,
"filename": "github_discussions-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "cecac218d8ea9b0013d7696d4ad51fff",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 23444,
"upload_time": "2025-09-10T02:51:16",
"upload_time_iso_8601": "2025-09-10T02:51:16.596939Z",
"url": "https://files.pythonhosted.org/packages/81/dd/35dcb2d720020ba85c66f339176278710baf69d01191737092d69832d8ca/github_discussions-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-10 02:51:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Declytic",
"github_project": "github-discussions-graphql",
"github_not_found": true,
"lcname": "github-discussions"
}