Package: uaconnect
Aboutuaconnectis the official Python library for using theAirship Real-Time Data StreamingAPI (formerly known as Connect).QuestionsThe best place to ask questions or report a problem is our support site:http://support.airship.com/RequirementsTested on Python 3.6, 3.7, 3.8, and 3.9.For tests,uaconnectalso needsMock.Running TestsTo run tests, run:$ python -m unittest discoverUsageSee theReal-Time Data Streaming Getting Started Guide, as
well as theReal-Time Data Streaming API docsfor more details.RTDS Event ConsumerTo consume standard events from the RTDS API, instantiate aEventConsumerobject
with the application key, access token, and an offset recorder. You can then open the
connection, and start reading events.See more about the RTDS Event Streamin our documentation here.>>> import uaconnect
>>> consumer = uaconnect.EventConsumer(
...     app_key='application_key',
...     access_token='access_token',
...     recorder=uaconnect.FileRecorder('.offset'))
>>> consumer.connect()
>>> for event in consumer.read():
...     if event is None:
...        continue
>>>     print("Got event: {}".format(event))
>>>     consumer.ack(event)RTDS Compliance Event ConsumerTo consume compliance events from the RTDS API, instantiate aComplianceConsumerobject
with the application key, master secret and an offset recorder. You can then open the
connection, and start reading events.See more about the RTDS Compliance Event Streamin the documentation here.>>> import uaconnect
>>> consumer = uaconnect.EventConsumer(
...     app_key='application_key',
...     master_secret='master_secret',
...     recorder=uaconnect.FileRecorder('.offset'))
>>> consumer.connect()
>>> for event in consumer.read():
...     if event is None:
...        continue
>>>     print("Got event: {}".format(event))
>>>     consumer.ack(event)Alternate Data Center SupportWhen instantiating aEventConsumerorComplianceConsumeryou can pass the optionalurlargument to explicitly specify the data center your project is located in. Possible
values are “US”, “EU”, or an arbitrary base url in the form ofhttp://domain.xyz/. The
library will build the URL path properly from there. If nourlis specified, “US” is used.>>> import uaconnect
>>> consumer = uaconnect.EventConsumer(
...     app_key='application_key',
...     master_secret='master_secret',
...     url='EU',
...     recorder=uaconnect.FileRecorder('.offset'))Offset recordersOffset recorders inherit from the abstract base classuaconnect.Recorder,
implementingread_offsetandwrite_offsetmethods. One recorder is
included in the library,FileRecorder, which stores the offset on disk. In
theuaconnect.ext.redisrecorderpackage there is an example implementation
of using an Redis instance to store the offset.ackcalls should be placed depending on whether in a failure scenario your
app wishes to possibly replay an already handled event, or risk dropping one.
For the latter, callackas soon as the event is read; for the former, callackonly after the event has been fully handled.Advanced options when connectingAirship Real-Time Data Streaming supports a variety ofoptions when connectingto make sure that you’re only consuming the data that you want.uaconnectmakes it easy to use these connection parameters and filters.Specifying offsetsOne of the advantages of Airship Real-Time Data Streaming is that you can resume from a
specific place in the RTDS stream. This is done by specifying theoffsetthat’s associated with the event. Whileuaconnectautomatically tracks
offsets for you withuaconnect.FileRecorder, you can also explicitly set an
offset.>>> import uaconnect
>>> recorder = uaconnect.FileRecorder(".offset") # or wherever you would like the file to exist
>>> recorder.write_offset("8865499359") # a randomly chosen offset
>>> recorder.read_offset()
'8865499359'An alternative here is to just write the offset explicitly into the file, or
whateverRecordersubclass you’re using to track offsets.$ cat .offset
886549935Now, the next time you connect, it will pick up from that last offset.If you’d like to manually set the offset for a connection to a known value
instead of the recorder’s offset, setresume_offsetlike so:>>> consumer.connect(resume_offset='123456789')Using filtersFilters are a powerful way of filtering what specific information you’d like to
see from the RTDS stream. You can filter by event type, device type, latency
on an event, or even specific devices or notifications.For a complete list of filters, and their descriptions, check outthe
documentation.Here’s a brief example on how to use filters withuaconnect:>>> import uaconnect
>>> consumer = uaconnect.EventConsumer(
...     app_key='application_key',
...     access_token='access_token',
...     recorder=uaconnect.FileRecorder('.offset')
...     )
>>> f = uaconnect.Filter()
>>> f.types("PUSH_BODY", "SEND") # only receive PUSH_BODY and SEND events.
>>> consumer.add_filter(f)
>>> consumer.connect()