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.0.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: app_toggles-0.1.0.tar.gz
  • Upload date:
  • Size: 3.7 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.0.tar.gz
Algorithm Hash digest
SHA256 c329fea20804bec4c4f97a78e408dc687ff67e63f1d870033b4bfb76027def75
MD5 771e2391cebd219690413db55e8f4c90
BLAKE2b-256 1e448ed7fbed38b5dc8796907d7d716ec28ab30de76bcc5c05297a7b4bab9984

See more details on using hashes here.

File details

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

File metadata

  • Download URL: app_toggles-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 19da11d548885a86054340c5a183c54650c8056b233b4459d9f767af54f8f0ab
MD5 89434236db59de5c882517451116bbf1
BLAKE2b-256 1da13bba6d1373cea18c868a7792be55de8674921926a4903f99c3c8e94b600c

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