Package: umami-analytics
Umami Analytics Client for PythonClient for privacy-preserving, open sourceUmami analytics platformbased onhttpxandpydantic.umami-analyticsis intended for adding custom data to your Umami instance (self-hosted or SaaS). Many umami events can supplied directly from HTML via theirdata-*attributes. However, some cannot. For example, if you have an event that is triggered in your app but doesn't have a clear HTML action you can add custom events. These will appear at the bottom of your Umami analtytics page for a website.One example is apurchase-courseevent that happens deep inside the Python code rather than in HTML atTalk Python Training. This is what our events section looks like for a typical weekend day (US Pacific Time):Focused on what you need, not what is offeredTheUmami API is extensiveand much of that is intended for their frontend code to be able to function. You probably don't want or need that.umami-analyticsonly covers the subset that most developers will need for common SaaS actions such as addingcustom events. That said, PRs are weclome.Core Features➕Add a custom eventto your Umami analytics dashboard.🌐 List all websites with details that you have registered at Umami.🔀 Bothsyncandasyncprogramming models.⚒️Structured data with Pydanticmodels for API responses.👩‍💻Login / authenticatefor either a self-hosted or SaaS hosted instance of Umami.🥇Set adefault websitefor asimplified APIgoing forward.See the usage example below for the Python API around these features.Async or sync API? You choose🔀Async is supported but not requiredfor your Python code. For functions that access the network, there is afunc()andfunc_async()variant that works with Python'sasyncandawait.InstallationJustpip install umami-analyticsUsageimportumamiumami.set_url_base("https://umami.hostedbyyouorthem.com")# Auth is NOT required to send events, but is for other features.login=umami.login(username,password)# Skip the need to pass the target website in subsequent calls.umami.set_website_id('cc726914-8e68-4d1a-4be0-af4ca8933456')umami.set_hostname('somedomain.com')# List your websiteswebsites=umami.websites()# Create a new event in the events section of the dashboards.event_resp=umami.new_event(website_id='a7cd-5d1a-2b33',# Only send if overriding default aboveevent_name='Umami-Test',title='Umami-Test',# Defaults to event_name if omitted.hostname='somedomain.com',# Only send if overriding default above.url='/users/actions',custom_data={'client':'umami-tester-v1'},referrer='https://some_url')# Create a new page view in the pages section of the dashboards.page_view_resp=umami.new_page_view(website_id='a7cd-5d1a-2b33',# Only send if overriding default abovepage_title='Umami-Test',# Defaults to event_name if omitted.hostname='somedomain.com',# Only send if overriding default above.url='/users/actions',referrer='https://some_url')# Call after logging in to make sure the auth token is still valid.umami.verify_token()This code listing is very-very high fidelity psuedo code. If you want an actually executable example, see theexample clientin the repo.Want to contribute?See theAPI documentationfor the remaining endpoints to be added. PRs are welcome. But please open an issue first to see if the proposed feature fits with the direction of this library.Enjoy.