Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add publish action and dynamic versioning #615

Merged
merged 4 commits into from
Mar 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Publish Package

on:
release:
types: [created]

jobs:
publish:
runs-on: ubuntu-latest
name: "Publish library"
steps:
- name: Check out
uses: actions/checkout@v3
with:
token: "${{ secrets.GITHUB_TOKEN }}"
fetch-depth: 0

- name: Setup Python Env
uses: actions/setup-python@v3
with:
python-version: '3.9'

- name: Install dependencies
run: |
pip install poetry
poetry version $(dunamai from any --no-metadata --style pep440)
poetry install

- name: Build package
run: poetry build

- name: Release to PyPI
run: |
poetry publish -u __token__ -p ${{ secrets.PYPI_API_TOKEN }} || echo 'Version exists'
68 changes: 52 additions & 16 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ The ReactiveX for Python (RxPY)
:target: https://coveralls.io/github/ReactiveX/RxPY
:alt: Coverage Status

.. image:: https://img.shields.io/pypi/v/rx.svg
:target: https://pypi.python.org/pypi/Rx
.. image:: https://img.shields.io/pypi/v/reactivex.svg
:target: https://pypi.org/project/reactivex/
:alt: PyPY Package Version

.. image:: https://img.shields.io/readthedocs/rxpy.svg
Expand All @@ -22,13 +22,14 @@ The ReactiveX for Python (RxPY)
*A library for composing asynchronous and event-based programs using observable
collections and query operator functions in Python*

ReactiveX for Python (RxPY) v4.0
--------------------------------
ReactiveX for Python v4
-----------------------

For v3.X please go to the `v3 branch <https://github.com/ReactiveX/RxPY/tree/master>`_.
For v3.X please go to the `v3 branch
<https://github.com/ReactiveX/RxPY/tree/release/v3.2.x>`_.

RxPY v4.x runs on `Python <http://www.python.org/>`_ 3.7 or above. To install
RxPY:
ReactiveX for Python v4.x runs on `Python <http://www.python.org/>`_ 3.7 or above. To
install:

.. code:: console

Expand All @@ -46,10 +47,10 @@ streams using Schedulers.

.. code:: python

import reactivex
import reactivex as rx
from reactivex import operators as ops

source = reactivex.of("Alpha", "Beta", "Gamma", "Delta", "Epsilon")
source = rx.of("Alpha", "Beta", "Gamma", "Delta", "Epsilon")

composed = source.pipe(
ops.map(lambda s: len(s)),
Expand All @@ -63,7 +64,7 @@ Learning ReactiveX

Read the `documentation
<https://rxpy.readthedocs.io/en/latest/>`_ to learn
the principles of RxPY and get the complete reference of the available
the principles of ReactiveX and get the complete reference of the available
operators.

If you need to migrate code from RxPY v1.x, read the `migration
Expand Down Expand Up @@ -98,8 +99,8 @@ over `1300 passing unit-tests <https://coveralls.io/github/ReactiveX/RxPY>`_. Rx
is mostly a direct port of RxJS, but also borrows a bit from Rx.NET and RxJava in
terms of threading and blocking operators.

RxPY follows `PEP 8 <http://legacy.python.org/dev/peps/pep-0008/>`_, so all
function and method names are lowercase with words separated by underscores as
ReactiveX for Python follows `PEP 8 <http://legacy.python.org/dev/peps/pep-0008/>`_, so
all function and method names are lowercase with words separated by underscores as
necessary to improve readability.

Thus .NET code such as:
Expand All @@ -115,7 +116,42 @@ need to be written with an ``_`` in Python:

group = source.pipe(ops.group_by(lambda i: i % 3))

With RxPY you should use `named keyword arguments
<https://docs.python.org/3/glossary.html>`_ instead of positional arguments when
an operator has multiple optional arguments. RxPY will not try to detect which
arguments you are giving to the operator (or not).
With ReactiveX for Python you should use `named keyword arguments
<https://docs.python.org/3/glossary.html>`_ instead of positional arguments when an
operator has multiple optional arguments. RxPY will not try to detect which arguments
you are giving to the operator (or not).

Development
-----------

This project is managed using `Poetry <https://python-poetry.org/>`_. Code is formatted
using `Black <https://github.com/psf/black>`_, `isort
<https://github.com/PyCQA/isort>`_. Code is statically type checked using `pyright
<https://github.com/microsoft/pyright>`_ and `mypy <http://mypy-lang.org/>`_.

If you want to take advantage of the default VSCode integration, then
first configure Poetry to make its virtual environment in the
repository:

.. code:: console

poetry config virtualenvs.in-project true

After cloning the repository, activate the tooling:

.. code:: console

poetry install
poetry run pre-commit install

Run unit tests:

.. code:: console

poetry run pytest

Run code checks (manually):

.. code:: console

poetry run pre-commit run --all-files
2 changes: 1 addition & 1 deletion docs/migration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Migration v4
============

ReactiveX for Python v4 is an evolution of RxPY v3 to modenize it to
ReactiveX for Python v4 is an evolution of RxPY v3 to modernize it to
current Python standards:

- Project main module renamed from ``rx`` to ``reactivex``. This is done
Expand Down
18 changes: 17 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "reactivex"
version = "4.0.0a4" # Make sure the version here is the same as in _version.py
name = "ReactiveX"
version = "0.0.0"
description = "ReactiveX (Rx) for Python"
readme = "README.rst"
authors = ["Dag Brattli <dag@brattli.net>"]
Expand Down Expand Up @@ -43,6 +43,7 @@ flake8 = "^4.0.1"
coveralls = "^3.3.1"
pre-commit = "^2.17.0"
autoflake = "^1.4"
dunamai = "^1.9.0"

[tool.black]
line-length = 88
Expand Down
3 changes: 1 addition & 2 deletions reactivex/_version.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
# Please make sure the version here remains the same as in pyproject.toml
__version__ = "4.0.0a4"
__version__ = "$(dunamai from any)"