From c71b8e0de36eafaa3af673af8ef35e4485107137 Mon Sep 17 00:00:00 2001 From: bohan-amplitude <96497806+bohan-amplitude@users.noreply.github.com> Date: Wed, 11 May 2022 09:59:29 -0700 Subject: [PATCH] feat: flask and django simple example (#22) ### Summary a flask simple app a django simple app examples of plugin ### Checklist * [x]Does your PR title have the correct [title format](https://github.com/amplitude/Amplitude-Python/blob/main/CONTRIBUTING.md#pr-commit-title-conventions)? * Does your PR have a breaking change?: no --- examples/README.md | 29 ++++ examples/django_example/README.md | 32 +++++ .../amplitude_example/__init__.py | 0 .../django_example/amplitude_example/admin.py | 3 + .../django_example/amplitude_example/apps.py | 6 + .../amplitude_example/migrations/__init__.py | 0 .../amplitude_example/models.py | 3 + .../django_example/amplitude_example/tests.py | 3 + .../django_example/amplitude_example/urls.py | 12 ++ .../django_example/amplitude_example/views.py | 51 +++++++ .../django_example/django_example/__init__.py | 0 .../django_example/django_example/asgi.py | 16 +++ .../django_example/django_example/settings.py | 126 ++++++++++++++++++ .../django_example/django_example/urls.py | 22 +++ .../django_example/django_example/wsgi.py | 16 +++ examples/django_example/manage.py | 22 +++ examples/flask_example/README.md | 30 +++++ examples/flask_example/flaskapp.py | 55 ++++++++ examples/plugin_example/README.md | 27 ++++ examples/plugin_example/destination_plugin.py | 27 ++++ examples/plugin_example/event_plugin.py | 45 +++++++ examples/track_example/README.md | 14 ++ examples/track_example/trackevent.py | 47 +++++++ examples/trackevent.py | 20 --- 24 files changed, 586 insertions(+), 20 deletions(-) create mode 100644 examples/README.md create mode 100644 examples/django_example/README.md create mode 100644 examples/django_example/amplitude_example/__init__.py create mode 100644 examples/django_example/amplitude_example/admin.py create mode 100644 examples/django_example/amplitude_example/apps.py create mode 100644 examples/django_example/amplitude_example/migrations/__init__.py create mode 100644 examples/django_example/amplitude_example/models.py create mode 100644 examples/django_example/amplitude_example/tests.py create mode 100644 examples/django_example/amplitude_example/urls.py create mode 100644 examples/django_example/amplitude_example/views.py create mode 100644 examples/django_example/django_example/__init__.py create mode 100644 examples/django_example/django_example/asgi.py create mode 100644 examples/django_example/django_example/settings.py create mode 100644 examples/django_example/django_example/urls.py create mode 100644 examples/django_example/django_example/wsgi.py create mode 100755 examples/django_example/manage.py create mode 100644 examples/flask_example/README.md create mode 100644 examples/flask_example/flaskapp.py create mode 100644 examples/plugin_example/README.md create mode 100644 examples/plugin_example/destination_plugin.py create mode 100644 examples/plugin_example/event_plugin.py create mode 100644 examples/track_example/README.md create mode 100644 examples/track_example/trackevent.py delete mode 100644 examples/trackevent.py diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..0e00a2e --- /dev/null +++ b/examples/README.md @@ -0,0 +1,29 @@ +# Amplitude Python SDK + +There are some example apps of using Amplitude Python SDK. + +## Usage + +### Setup before execution + +All examples require installing the Amplitude Python SDK and setting your API key. + +1. Install Amplitude Python SDK + 1. `pip install amplitude-analytics` +2. Replace `YOUR API KEY` in example code with your amplitude project api key. + +### Using Amplitude client to track events + +[This example](track_example) initialized an amplitude client and tracked different types of events. + +### Plugin example + +[This example](plugin_example) demo event plugin and destination plugin usage. + +### Flask example + +[This example](flask_example) has a simple flask app. + +### Django example + +[This example](django_example) is a Django project. \ No newline at end of file diff --git a/examples/django_example/README.md b/examples/django_example/README.md new file mode 100644 index 0000000..7045c74 --- /dev/null +++ b/examples/django_example/README.md @@ -0,0 +1,32 @@ +# Django Amplitude example + +Contains a app called 'amplitude_example'. The app has one view in amplitude_example/views.py + +### Setup before execution + +All examples require installing the Amplitude Python SDK and setting your API key. + +1. Install Amplitude Python SDK + 1. `pip install amplitude-analytics` +2. Replace `YOUR API KEY` in example code with your amplitude project api key. + +### To run this example + +First install Django: + +`pip install django` + +Then: + +`python manage.py runserver` + +In your browser open link http://127.0.0.1:8000/amplitude/ to see the view page in the example and a 'Page Loaded' event will be sent. + +In your browser + +1. Open http://127.0.0.1:8000/amplitude/pageloaded to see the app page and a 'Page Loaded' event will be sent. +2. Open http://127.0.0.1:8000/amplitude/identify?user_id=django_example_user to send an identify event for django_example_user +3. Open http://127.0.0.1:8000/amplitude/groupidentify?group_type=team&group_name=SDE to send a group identify event +4. Open http://127.0.0.1:8000/amplitude/setgroup?user_id=django_example_user&group_type=team&group_name=SDE to put django_example_user into SDE team +5. Open http://127.0.0.1:8000/amplitude/revenue?user_id=django_example_user&price=20&quantity=4 to track a revenue order +6. Open http://127.0.0.1:8000/amplitude/flush to flush events in buffer \ No newline at end of file diff --git a/examples/django_example/amplitude_example/__init__.py b/examples/django_example/amplitude_example/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/django_example/amplitude_example/admin.py b/examples/django_example/amplitude_example/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/examples/django_example/amplitude_example/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/examples/django_example/amplitude_example/apps.py b/examples/django_example/amplitude_example/apps.py new file mode 100644 index 0000000..50b3cd6 --- /dev/null +++ b/examples/django_example/amplitude_example/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AmplitudeExampleConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'amplitude_example' diff --git a/examples/django_example/amplitude_example/migrations/__init__.py b/examples/django_example/amplitude_example/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/django_example/amplitude_example/models.py b/examples/django_example/amplitude_example/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/examples/django_example/amplitude_example/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/examples/django_example/amplitude_example/tests.py b/examples/django_example/amplitude_example/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/examples/django_example/amplitude_example/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/examples/django_example/amplitude_example/urls.py b/examples/django_example/amplitude_example/urls.py new file mode 100644 index 0000000..a000ca5 --- /dev/null +++ b/examples/django_example/amplitude_example/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from . import views + + +urlpatterns = [ + path('pageloaded', views.track_page_load, name='Track Page Load Event'), + path('identify', views.set_age, name='Identify Event'), + path('groupidentify', views.set_group_member, name='Group Identify Event'), + path('setgroup', views.set_user_group, name='Set User Group'), + path('revenue', views.track_revenue, name='Track Revenue Event'), + path('flush', views.flush_event, name='Flush Events'), +] diff --git a/examples/django_example/amplitude_example/views.py b/examples/django_example/amplitude_example/views.py new file mode 100644 index 0000000..b345b84 --- /dev/null +++ b/examples/django_example/amplitude_example/views.py @@ -0,0 +1,51 @@ +from django.http import HttpResponse +from amplitude import Amplitude, BaseEvent, Identify, EventOptions, Revenue + +# Create your views here. + + +amp_client = Amplitude("44270dfba966dafe46554de66e088877") + + +def track_page_load(request): + amp_client.track(BaseEvent("Page Loaded", user_id="django_example_user")) + return HttpResponse("

Page Loaded event sent.

") + + +def set_age(request): + user_id = request.GET.get("user_id", "django_example_user") + identify_obj = Identify() + identify_obj.set("age", 99) + amp_client.identify(identify_obj, EventOptions(user_id=user_id)) + return HttpResponse(f"

Set age to 99 for {user_id}.

") + + +def set_group_member(request): + group_type = request.GET.get("group_type", "default") + group_name = request.GET.get("group_name", "default") + identify_obj = Identify() + identify_obj.set("member", 16) + amp_client.group_identify(group_type, group_name, identify_obj=identify_obj) + return HttpResponse(f"

Set group {group_name} member to 16

") + + +def set_user_group(request): + user_id = request.GET.get("user_id", "django_example_user") + group_type = request.GET.get("group_type", "default") + group_name = request.GET.get("group_name", "default") + amp_client.set_group(group_type, group_name, EventOptions(user_id=user_id)) + return HttpResponse(f"

Put {user_id} to group {group_name}

") + + +def track_revenue(request): + user_id = request.GET.get("user_id", "django_example_user") + price = float(request.GET.get("price", "0")) + quantity = int(request.GET.get("quantity", "1")) + revenue_obj = Revenue(price, quantity) + amp_client.revenue(revenue_obj, EventOptions(user_id=user_id)) + return HttpResponse(f"

Track revenue for {user_id}

") + + +def flush_event(request): + amp_client.flush() + return HttpResponse(f"

All events flushed

") diff --git a/examples/django_example/django_example/__init__.py b/examples/django_example/django_example/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/django_example/django_example/asgi.py b/examples/django_example/django_example/asgi.py new file mode 100644 index 0000000..e0f181c --- /dev/null +++ b/examples/django_example/django_example/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for django_example project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_example.settings') + +application = get_asgi_application() diff --git a/examples/django_example/django_example/settings.py b/examples/django_example/django_example/settings.py new file mode 100644 index 0000000..52d2bed --- /dev/null +++ b/examples/django_example/django_example/settings.py @@ -0,0 +1,126 @@ +""" +Django settings for django_example project. + +Generated by 'django-admin startproject' using Django 3.2.13. + +For more information on this file, see +https://docs.djangoproject.com/en/3.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-4ihk4^sn+u2jw^&orsc(l06%0xkq8oebpr9%=2sa@rfq1jn3&1' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'amplitude_example.apps.AmplitudeExampleConfig', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'django_example.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'django_example.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/3.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.2/howto/static-files/ + +STATIC_URL = '/static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/examples/django_example/django_example/urls.py b/examples/django_example/django_example/urls.py new file mode 100644 index 0000000..e7be895 --- /dev/null +++ b/examples/django_example/django_example/urls.py @@ -0,0 +1,22 @@ +"""django_example URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('amplitude/', include('amplitude_example.urls')) +] diff --git a/examples/django_example/django_example/wsgi.py b/examples/django_example/django_example/wsgi.py new file mode 100644 index 0000000..0342d35 --- /dev/null +++ b/examples/django_example/django_example/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for django_example project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_example.settings') + +application = get_wsgi_application() diff --git a/examples/django_example/manage.py b/examples/django_example/manage.py new file mode 100755 index 0000000..bc9ffd9 --- /dev/null +++ b/examples/django_example/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_example.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/examples/flask_example/README.md b/examples/flask_example/README.md new file mode 100644 index 0000000..4984095 --- /dev/null +++ b/examples/flask_example/README.md @@ -0,0 +1,30 @@ +# Flask Amplitude example + +A simple flask app that provided apis to demo Amplitude client functions. + +### Setup before execution + +All examples require installing the Amplitude Python SDK and setting your API key. + +1. Install Amplitude Python SDK + 1. `pip install amplitude-analytics` +2. Replace `YOUR API KEY` in example code with your amplitude project api key. + +### To run this example + +First install flask: + +`pip install flask` + +Then: + +`FLASK_APP=flaskapp flask run` + +In your browser + +1. Open http://127.0.0.1:5000/pageloaded to see the app page and a 'Page Loaded' event will be sent. +2. Open http://127.0.0.1:5000/identify/flask_example_user to send an identify event for flask_example_user +3. Open http://127.0.0.1:5000/groupidentify?group_type=team&group_name=SDE to send a group identify event +4. Open http://127.0.0.1:5000/setgroup/flask_example_user?group_type=team&group_name=SDE to put flask_example_user into SDE team +5. Open http://127.0.0.1:5000/revenue/flask_example_user?price=20&quantity=4 to track a revenue order +6. Open http://127.0.0.1:5000/flush to flush events in buffer \ No newline at end of file diff --git a/examples/flask_example/flaskapp.py b/examples/flask_example/flaskapp.py new file mode 100644 index 0000000..8abb3c5 --- /dev/null +++ b/examples/flask_example/flaskapp.py @@ -0,0 +1,55 @@ +from flask import Flask, request +from amplitude import Amplitude, BaseEvent, Identify, EventOptions, Revenue + +app = Flask(__name__) +amp_client = Amplitude("YOUR API KEY") + + +@app.route("/pageloaded") +def track_page_load(): + amp_client.track(BaseEvent("Page Loaded", user_id="flask_example_user")) + return "

Page Loaded event sent.

" + + +@app.route("/identify/") +def set_age(user_id): + identify_obj = Identify() + identify_obj.set("age", 99) + amp_client.identify(identify_obj, EventOptions(user_id=user_id)) + return f"

Set age to 99 for {user_id}.

" + + +@app.route("/groupidentify") +def set_group_member(): + identify_obj = Identify() + identify_obj.set("member", 16) + amp_client.group_identify(group_type=request.args.get("group_type", "default"), + group_name=request.args.get("group_name", "default"), + identify_obj=identify_obj) + return f"

Set group {request.args.get('group_name', 'default')} member to 16

" + + +@app.route("/setgroup/") +def set_user_group(user_id): + amp_client.set_group(group_type=request.args.get("group_type", "default"), + group_name=request.args.get("group_name", "default"), + event_options=EventOptions(user_id=user_id)) + return f"

Put {user_id} to group {request.args.get('group_name', 'default')}

" + + +@app.route("/revenue/") +def track_revenue(user_id): + revenue_obj = Revenue(price=request.args.get("price", 0, float), + quantity=request.args.get("quantity", 1, int)) + amp_client.revenue(revenue_obj, EventOptions(user_id=user_id)) + return f"

Track revenue for {user_id}

" + + +@app.route("/flush") +def flush_event(): + amp_client.flush() + return f"

All events flushed

" + + +if __name__ == "__main__": + app.run() diff --git a/examples/plugin_example/README.md b/examples/plugin_example/README.md new file mode 100644 index 0000000..e66ebd8 --- /dev/null +++ b/examples/plugin_example/README.md @@ -0,0 +1,27 @@ +# Plugin example + +### Setup before execution + +All examples require installing the Amplitude Python SDK and setting your API key. + +1. Install Amplitude Python SDK + 1. `pip install amplitude-analytics` +2. Replace `YOUR API KEY` in example code with your amplitude project api key. + +### Event plugin example + +An event plugin that add a description to events' event_properties + +`python event_plugin.py` + +### Destination plugin example + +A customized destination plugin that post event to https://postman-echo.com/post and print the response + +To run this example, first install requests if needed: + +`pip install requests` + +Then: + +`python destination_plugin.py` diff --git a/examples/plugin_example/destination_plugin.py b/examples/plugin_example/destination_plugin.py new file mode 100644 index 0000000..6e3b8c8 --- /dev/null +++ b/examples/plugin_example/destination_plugin.py @@ -0,0 +1,27 @@ +import json +import requests + +from amplitude import Amplitude, DestinationPlugin, PluginType, BaseEvent + + +class MyDestinationPlugin(DestinationPlugin): + + def __init__(self): + self.plugin_type = PluginType.DESTINATION + self.configuration = None + self.url = "https://postman-echo.com/post" + + def setup(self, client: Amplitude): + super().setup(client) + self.configuration = client.configuration + + def execute(self, event: BaseEvent) -> None: + event = self.timeline.process(event) + r = requests.post(self.url, data=json.dumps(event.get_event_body())) + print(r.text) + + +amp_client = Amplitude("YOUR API KEY") +amp_client.add(MyDestinationPlugin()) +amp_client.track(BaseEvent("plugin_example_event", user_id="example_user")) +amp_client.shutdown() diff --git a/examples/plugin_example/event_plugin.py b/examples/plugin_example/event_plugin.py new file mode 100644 index 0000000..185b8ae --- /dev/null +++ b/examples/plugin_example/event_plugin.py @@ -0,0 +1,45 @@ +from amplitude import Amplitude, EventPlugin, PluginType, BaseEvent, IdentifyEvent, GroupIdentifyEvent, RevenueEvent, \ + Identify, Revenue, EventOptions + + +class MyEventPlugin(EventPlugin): + + def __init__(self): + self.plugin_type = PluginType.ENRICHMENT + self.configuration = None + + def setup(self, client: Amplitude): + self.configuration = client.configuration + + def execute(self, event: BaseEvent): + """Add a description to event properties""" + if isinstance(event, RevenueEvent): + return self.add_description(event, "A revenue event") + if isinstance(event, IdentifyEvent): + return self.add_description(event, "A identify event") + if isinstance(event, GroupIdentifyEvent): + return self.add_description(event, "A group identify event") + return self.add_description(event, "A base event") + + @staticmethod + def add_description(event, desc: str): + if not event["event_properties"]: + event["event_properties"] = {} + event["event_properties"]["description"] = desc + return event + + +my_plugin = MyEventPlugin() +print(my_plugin.execute(BaseEvent("plugin_example_event", user_id="example_user"))) +print(my_plugin.execute(IdentifyEvent(user_id="example_user"))) +print(my_plugin.execute(GroupIdentifyEvent())) +print(my_plugin.execute(RevenueEvent(user_id="example_user"))) + +amp_client = Amplitude("YOUR API KEY") +amp_client.add(my_plugin) +amp_client.track(BaseEvent("plugin_example_event", user_id="example_user")) +identify_obj = Identify().set("example", "plugin") +amp_client.identify(identify_obj, EventOptions(user_id="example_user")) +amp_client.group_identify("fruit", "banana", identify_obj) +amp_client.revenue(Revenue(price=9.99, quantity=2), EventOptions(user_id="example_user")) +amp_client.shutdown() diff --git a/examples/track_example/README.md b/examples/track_example/README.md new file mode 100644 index 0000000..6a23482 --- /dev/null +++ b/examples/track_example/README.md @@ -0,0 +1,14 @@ +# Track events example + +### Setup before execution + +All examples require installing the Amplitude Python SDK and setting your API key. + +1. Install Amplitude Python SDK + 1. `pip install amplitude-analytics` +2. Replace `YOUR API KEY` in example code with your amplitude project api key. + +### To run example + +`python trackevent.py` + diff --git a/examples/track_example/trackevent.py b/examples/track_example/trackevent.py new file mode 100644 index 0000000..817ac5f --- /dev/null +++ b/examples/track_example/trackevent.py @@ -0,0 +1,47 @@ +"""A very simple example of using Amplitude Python SDK to track events""" + +from amplitude import Amplitude, BaseEvent, Identify, EventOptions, Revenue + + +def callback_fun(e, code, message): + """A callback function""" + print(e) + print(code, message) + + +# Initialize a Amplitude client instance +amp_client = Amplitude(api_key="YOUR API KEY") +# Config a callback function +amp_client.configuration.callback = callback_fun + +# Create a BaseEvent instance +event = BaseEvent(event_type="Test python SDK", user_id="test_user_id", device_id="test_devece_id") +# Set event properties +event["event_properties"] = { + "keywords": ["amplitude", "python"], + "likes": True +} +amp_client.track(event) + +# Track a IdentifyEvent using identify() method +identify_obj = Identify() +identify_obj.set("age", 99) +amp_client.identify(identify_obj, EventOptions(user_id="example_user")) + +# Track a GroupIdentifyEvent using group_identify() method +identify_obj = Identify() +identify_obj.set("member", 16) +amp_client.group_identify("Eng Team", "Infra", identify_obj) + +# Put a user into a group use set_group method +amp_client.set_group("Eng Team", "Infra", EventOptions(user_id="example_user")) + +# Track a revenue event using revenue() method +revenue_obj = Revenue(price=9.99, quantity=5, product_id="100A") +amp_client.revenue(revenue_obj, EventOptions(user_id="example_user")) + +# Flush the event buffer +amp_client.flush() + +# Shutdown the client +amp_client.shutdown() diff --git a/examples/trackevent.py b/examples/trackevent.py deleted file mode 100644 index 10698a7..0000000 --- a/examples/trackevent.py +++ /dev/null @@ -1,20 +0,0 @@ -"""A very simple example of using Amplitude Python SDK to track a event""" - -from amplitude import Amplitude, BaseEvent - - -def callback_fun(event, code, message): - print(event) - print(code, message) - - -client = Amplitude(api_key="your api key") -client.configuration.callback = callback_fun -event = BaseEvent(event_type="Test python SDK", user_id="test_user_id", device_id="test_devece_id") -event.event_properties = { - "keywords": ["amplitude", "python"], - "likes": True -} -client.track(event) -client.flush() -client.shutdown()