From cea32dab7b85b573554bd6a8f3e15f6fead82a76 Mon Sep 17 00:00:00 2001 From: laughingman7743 Date: Sun, 8 Feb 2026 15:02:59 +0900 Subject: [PATCH 1/5] Add project logo and convert README from RST to Markdown - Convert README.rst to README.md with equivalent content - Add project icon and logo images to docs/_static/ - Display centered icon with badge links in README header - Add sidebar logo CSS for Sphinx documentation - Update pyproject.toml references from README.rst to README.md Co-Authored-By: Claude Opus 4.6 --- README.md | 72 +++++++++++++++++++++++++ README.rst | 101 ----------------------------------- docs/_static/custom.css | 6 +++ docs/_static/icon.png | Bin 0 -> 2739950 bytes docs/_static/icon_square.png | Bin 0 -> 2831253 bytes docs/_static/logo.png | Bin 0 -> 3670993 bytes docs/_static/logo_square.png | Bin 0 -> 3785812 bytes docs/conf.py | 1 + pyathena/util.py | 2 +- pyproject.toml | 4 +- 10 files changed, 82 insertions(+), 104 deletions(-) create mode 100644 README.md delete mode 100644 README.rst create mode 100644 docs/_static/icon.png create mode 100644 docs/_static/icon_square.png create mode 100644 docs/_static/logo.png create mode 100644 docs/_static/logo_square.png diff --git a/README.md b/README.md new file mode 100644 index 00000000..fea9ee73 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# PyAthena + +
+ +PyAthena logo + +[![PyPI - Version](https://badge.fury.io/py/pyathena.svg)](https://badge.fury.io/py/pyathena) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/PyAthena.svg)](https://pypi.org/project/PyAthena/) +[![PyPI - Downloads](https://static.pepy.tech/badge/pyathena/month)](https://pepy.tech/project/pyathena) +[![CI - Test](https://github.com/laughingman7743/PyAthena/actions/workflows/test.yaml/badge.svg)](https://github.com/laughingman7743/PyAthena/actions/workflows/test.yaml) +[![CD - Docs](https://github.com/laughingman7743/PyAthena/actions/workflows/docs.yaml/badge.svg)](https://github.com/laughingman7743/PyAthena/actions/workflows/docs.yaml) +[![License - MIT](https://img.shields.io/pypi/l/PyAthena.svg)](https://github.com/laughingman7743/PyAthena/blob/master/LICENSE) +[![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) +[![types - Mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/) + +
+ +----- + +PyAthena is a Python [DB API 2.0 (PEP 249)](https://www.python.org/dev/peps/pep-0249/) client for [Amazon Athena](https://docs.aws.amazon.com/athena/latest/APIReference/Welcome.html). + +----- + +## Requirements + +* Python + + - CPython 3.10, 3.11, 3.12, 3.13, 3.14 + +## Installation + +```bash +$ pip install PyAthena +``` + +Extra packages: + +| Package | Install command | Version | +|------------|--------------------------------------|----------| +| SQLAlchemy | `pip install PyAthena[SQLAlchemy]` | >=1.0.0 | +| Pandas | `pip install PyAthena[Pandas]` | >=1.3.0 | +| Arrow | `pip install PyAthena[Arrow]` | >=10.0.0 | +| Polars | `pip install PyAthena[Polars]` | >=1.0.0 | + +## Usage + +```python +from pyathena import connect + +cursor = connect(s3_staging_dir="s3://YOUR_S3_BUCKET/path/to/", + region_name="us-west-2").cursor() +cursor.execute("SELECT * FROM one_row") +print(cursor.description) +print(cursor.fetchall()) +``` + +## License + +[MIT license](LICENSE) + +Many of the implementations in this library are based on [PyHive](https://github.com/dropbox/PyHive), thanks for [PyHive](https://github.com/dropbox/PyHive). + +## Links + +- Documentation: https://laughingman7743.github.io/PyAthena/ +- PyPI Releases: https://pypi.org/project/PyAthena/ +- Source Code: https://github.com/laughingman7743/PyAthena/ +- Issue Tracker: https://github.com/laughingman7743/PyAthena/issues + +## Logo + +The PyAthena logo was generated using [Nano-Banana Pro](https://deepmind.google/models/gemini-image/pro/) (Gemini 3 Pro Image). diff --git a/README.rst b/README.rst deleted file mode 100644 index 11c197e3..00000000 --- a/README.rst +++ /dev/null @@ -1,101 +0,0 @@ -.. |badge package| image:: https://badge.fury.io/py/pyathena.svg - :target: https://badge.fury.io/py/pyathena -.. |badge pypi| image:: https://img.shields.io/pypi/pyversions/PyAthena.svg - :target: https://pypi.org/project/PyAthena/ -.. |badge test| image:: https://github.com/laughingman7743/PyAthena/actions/workflows/test.yaml/badge.svg - :target: https://github.com/laughingman7743/PyAthena/actions/workflows/test.yaml -.. |badge docs| image:: https://github.com/laughingman7743/PyAthena/actions/workflows/docs.yaml/badge.svg - :target: https://github.com/laughingman7743/PyAthena/actions/workflows/docs.yaml -.. |badge license| image:: https://img.shields.io/pypi/l/PyAthena.svg - :target: https://github.com/laughingman7743/PyAthena/blob/master/LICENSE -.. |badge downloads| image:: https://static.pepy.tech/badge/pyathena/month - :target: https://pepy.tech/project/pyathena -.. |badge ruff| image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json - :target: https://github.com/astral-sh/ruff - :alt: Ruff -.. |badge mypy| image:: https://www.mypy-lang.org/static/mypy_badge.svg - :target: https://mypy-lang.org/ - :alt: mypy - -PyAthena -======== - -PyAthena is a Python `DB API 2.0 (PEP 249)`_ client for `Amazon Athena`_. - -+---------+------------------------------------------------+ -| Package | |badge package| |badge pypi| |badge downloads| | -+---------+------------------------------------------------+ -| CI/CD | |badge test| |badge docs| | -+---------+------------------------------------------------+ -| Meta | |badge license| |badge ruff| |badge mypy| | -+---------+------------------------------------------------+ - -.. _`DB API 2.0 (PEP 249)`: https://www.python.org/dev/peps/pep-0249/ -.. _`Amazon Athena`: https://docs.aws.amazon.com/athena/latest/APIReference/Welcome.html - -.. _requirements: - -Requirements ------------- - -* Python - - - CPython 3.10, 3.11, 3.12, 3.13, 3.14 - -.. _installation: - -Installation ------------- - -.. code:: bash - - $ pip install PyAthena - -Extra packages: - -+---------------+---------------------------------------+------------------+ -| Package | Install command | Version | -+===============+=======================================+==================+ -| SQLAlchemy | ``pip install PyAthena[SQLAlchemy]`` | >=1.0.0 | -+---------------+---------------------------------------+------------------+ -| Pandas | ``pip install PyAthena[Pandas]`` | >=1.3.0 | -+---------------+---------------------------------------+------------------+ -| Arrow | ``pip install PyAthena[Arrow]`` | >=10.0.0 | -+---------------+---------------------------------------+------------------+ -| Polars | ``pip install PyAthena[Polars]`` | >=1.0.0 | -+---------------+---------------------------------------+------------------+ - -.. _usage: - -Usage ------ - -.. code:: python - - from pyathena import connect - - cursor = connect(s3_staging_dir="s3://YOUR_S3_BUCKET/path/to/", - region_name="us-west-2").cursor() - cursor.execute("SELECT * FROM one_row") - print(cursor.description) - print(cursor.fetchall()) - -.. _license: - -License -------- - -`MIT license`_ - -Many of the implementations in this library are based on `PyHive`_, thanks for `PyHive`_. - -.. _`MIT license`: LICENSE -.. _`PyHive`: https://github.com/dropbox/PyHive - -Links ------ - -- Documentation: https://laughingman7743.github.io/PyAthena/ -- PyPI Releases: https://pypi.org/project/PyAthena/ -- Source Code: https://github.com/laughingman7743/PyAthena/ -- Issue Tracker: https://github.com/laughingman7743/PyAthena/issues diff --git a/docs/_static/custom.css b/docs/_static/custom.css index a93010cb..383a1909 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -4,6 +4,12 @@ table.docutils td { text-align: left !important; } +/* Limit sidebar logo size */ +img.sidebar-logo { + max-width: 60% !important; + margin: 0 auto !important; +} + /* Align table itself to the left */ table.docutils { margin-left: 0; diff --git a/docs/_static/icon.png b/docs/_static/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee72da18f75394c443183d9758faa089d218a23 GIT binary patch literal 2739950 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