Skip to main content

A library to manage app toggles

Project description

App toggles library

CI

This library has been created taking into account the work done by Pete Hodgson published in https://martinfowler.com/.

How to use it

The example below uses a sample feature to include a cancellation link in a email so the user can cancel the sales order.

  1. Create the /tmp/test_app_toggles.json file with the following content:
{
    "isOrderCancellationEnabled": true,
    "isAutoRefundEnable": false
}
  1. Run the app
import app_toggles

provider = app_toggles.JsonToggleProvider("/tmp/test_app_toggles.json")
toggles = app_toggles.Toggles(provider=provider)


@toggles.toggle_decision
def usage_of_order_cancellation_email(get_toggles, when_on, when_off):
    order_cancellation_enabled, auto_refund_enabled = get_toggles(
        ["isOrderCancellationEnabled", "isAutoRefundEnable"]
    )
    if order_cancellation_enabled and auto_refund_enabled:
        return when_on
    return when_off


def create_email_body(client_name: str, sales_order_number: str) -> str:
    header = f"""
    Dear {client_name},

    Your order number {sales_order_number} has bee approved.
    """

    footer = """
    Cheers,

    Your company team
    """

    cancellation_text = usage_of_order_cancellation_email(
        when_on=f"To cancel your order follow this link: http://cancel/{sales_order_number}",
        when_off="",
    )

    return f"""
    {header}
    {cancellation_text}
    {footer}
    """

body = create_email_body("Gustavo", "2342937")
print(body)
  1. Feel free to change the value of the toggles in the JSON file and see how the email body changes

How to extend this library

The library exposes a "Provider" interface. You can create your own interface to interact with external services that manage feature flags. Below you' ll find a sample code used to retrieve toggles stored in memory.

DON'T FORGET TO CREATE A PR SO WE CAN ADD THE IMPLEMENTATION YOU'VE CREATED!

import typing

import app_toggles


class InMemoryProvider(app_toggles.Provider):
    toggles = {
        "isOrderCancellationEnabled": True,
        "isAutoRefundEnable": True
    }

    def get_toggles(self, toggle_names: typing.List[str]) -> typing.Tuple[bool]:
        missing_toogles = [toggle for toggle in toggle_names if toggle not in InMemoryProvider.toggles]

        if missing_toogles:
            raise app_toggles.ToggleNotFoundError(f"The follwing toggles where not found: {', '.join(missing_toogles)}")

        return [
            toggle_value
            for toggle_name, toggle_value in InMemoryProvider.toggles.items()
            if toggle_name in toggle_names
        ]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

app_toggles-0.1.2.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

app_toggles-0.1.2-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file app_toggles-0.1.2.tar.gz.

File metadata

  • Download URL: app_toggles-0.1.2.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.1 CPython/3.10.4 Darwin/22.5.0

File hashes

Hashes for app_toggles-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a610ec31c78f6f75b9f9933998615bc0364e18e0c7d00fc64a34cb763eb0d4a9
MD5 195ff3cea5297edd6ad4ebb032dd0f18
BLAKE2b-256 91edd6e400c334234e898c94e3c6b43a40ee1ba86857d63a9c5234575b831851

See more details on using hashes here.

File details

Details for the file app_toggles-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: app_toggles-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.1 CPython/3.10.4 Darwin/22.5.0

File hashes

Hashes for app_toggles-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e159c7aa26c7198ff920240f154190b1c4d3fc46da0e95c4c113bd3a45718b86
MD5 4775170ecd9c28a05c55c80faec5e91e
BLAKE2b-256 6d098c4d8f6c6ceb4cc2c1787bc6627c04f05b15c90d6dd372d0733ee3b2b73d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page