Module faunadb.streams.events
Expand source code
from faunadb._json import parse_json_or_none
from faunadb.errors import BadRequest, PermissionDenied
def parse_stream_request_result_or_none(request_result):
"""
Parses a stream RequestResult into a stream Event type.
"""
event = None
parsed = request_result.response_content
if parsed is None:
return UnknownEvent(request_result)
evt_type = parsed.get('type', None)
if evt_type == "start":
event = Start(parsed)
elif evt_type is None and 'errors' in parsed:
event = Error(BadRequest(request_result))
elif evt_type == 'error':
event = Error(parsed)
elif evt_type == 'version':
event = Version(parsed)
elif evt_type == 'history_rewrite':
event = HistoryRewrite(parsed)
else:
event = UnknownEvent(request_result)
return event
class Event(object):
"""
A stream event.
"""
def __init__(self, event_type):
self.type = event_type
class ProtocolEvent(Event):
"""
Stream protocol event.
"""
def __init__(self, event_type):
super(ProtocolEvent, self).__init__(event_type)
class Start(ProtocolEvent):
"""
Stream's start event. A stream subscription always begins with a start event.
Upcoming events are guaranteed to have transaction timestamps equal to or greater than
the stream's start timestamp.
:param data: Data
:param txn: Timestamp
"""
def __init__(self, parsed):
super(Start, self).__init__('start')
self.event = parsed['event']
self.txn = parsed['txn']
def __repr__(self):
return "stream:event:Start(event=%s, txn=%d)"%(self.event, self.txn)
class Error(ProtocolEvent):
"""
An error event is fired both for client and server errors that may occur as
a result of a subscription.
"""
def __init__(self, parsed):
super(Error, self).__init__('error')
self.error = None
self.code = None
self.description = None
if isinstance(parsed, dict):
if 'event' in parsed:
self.error = parsed['event']
if isinstance(parsed['event'], dict):
self.code = parsed['event'].get('code', None)
self.description = parsed['event'].get('description', None)
elif 'errors' in parsed:
self.error = parsed['errors']
else:
self.error = parsed
else:
self.error = parsed
def __repr__(self):
return "stream:event:Error(%s)"%(self.error)
class HistoryRewrite(Event):
"""
A history rewrite event occurs upon any modifications to the history of the
subscribed document.
:param data: Data
:param txn: Timestamp
"""
def __init__(self, parsed):
super(HistoryRewrite, self).__init__('history_rewrite')
if isinstance(parsed, dict):
self.event = parsed.get('event', None)
self.txn = parsed.get('txn')
def __repr__(self):
return "stream:event:HistoryRewrite(event=%s, txn=%s)" % (self.event, self.txn)
class Version(Event):
"""
A version event occurs upon any modifications to the current state of the
subscribed document.
:param data: Data
:param txn: Timestamp
"""
def __init__(self, parsed):
super(Version, self).__init__('version')
if isinstance(parsed, dict):
self.event = parsed.get('event', None)
self.txn = parsed.get('txn')
def __repr__(self):
return "stream:event:Version(event=%s, txn=%s)" % (self.event, self.txn)
class UnknownEvent(Event):
"""
Unknown stream event.
"""
def __init__(self, parsed):
super(UnknownEvent, self).__init__(None)
self.event = 'unknown'
self.event = parsed
Functions
def parse_stream_request_result_or_none(request_result)
-
Parses a stream RequestResult into a stream Event type.
Expand source code
def parse_stream_request_result_or_none(request_result): """ Parses a stream RequestResult into a stream Event type. """ event = None parsed = request_result.response_content if parsed is None: return UnknownEvent(request_result) evt_type = parsed.get('type', None) if evt_type == "start": event = Start(parsed) elif evt_type is None and 'errors' in parsed: event = Error(BadRequest(request_result)) elif evt_type == 'error': event = Error(parsed) elif evt_type == 'version': event = Version(parsed) elif evt_type == 'history_rewrite': event = HistoryRewrite(parsed) else: event = UnknownEvent(request_result) return event
Classes
class Error (parsed)
-
An error event is fired both for client and server errors that may occur as a result of a subscription.
Expand source code
class Error(ProtocolEvent): """ An error event is fired both for client and server errors that may occur as a result of a subscription. """ def __init__(self, parsed): super(Error, self).__init__('error') self.error = None self.code = None self.description = None if isinstance(parsed, dict): if 'event' in parsed: self.error = parsed['event'] if isinstance(parsed['event'], dict): self.code = parsed['event'].get('code', None) self.description = parsed['event'].get('description', None) elif 'errors' in parsed: self.error = parsed['errors'] else: self.error = parsed else: self.error = parsed def __repr__(self): return "stream:event:Error(%s)"%(self.error)
Ancestors
class Event (event_type)
-
A stream event.
Expand source code
class Event(object): """ A stream event. """ def __init__(self, event_type): self.type = event_type
Subclasses
class HistoryRewrite (parsed)
-
A history rewrite event occurs upon any modifications to the history of the subscribed document.
:param data: Data :param txn: Timestamp
Expand source code
class HistoryRewrite(Event): """ A history rewrite event occurs upon any modifications to the history of the subscribed document. :param data: Data :param txn: Timestamp """ def __init__(self, parsed): super(HistoryRewrite, self).__init__('history_rewrite') if isinstance(parsed, dict): self.event = parsed.get('event', None) self.txn = parsed.get('txn') def __repr__(self): return "stream:event:HistoryRewrite(event=%s, txn=%s)" % (self.event, self.txn)
Ancestors
class ProtocolEvent (event_type)
-
Stream protocol event.
Expand source code
class ProtocolEvent(Event): """ Stream protocol event. """ def __init__(self, event_type): super(ProtocolEvent, self).__init__(event_type)
Ancestors
Subclasses
class Start (parsed)
-
Stream's start event. A stream subscription always begins with a start event. Upcoming events are guaranteed to have transaction timestamps equal to or greater than the stream's start timestamp.
:param data: Data :param txn: Timestamp
Expand source code
class Start(ProtocolEvent): """ Stream's start event. A stream subscription always begins with a start event. Upcoming events are guaranteed to have transaction timestamps equal to or greater than the stream's start timestamp. :param data: Data :param txn: Timestamp """ def __init__(self, parsed): super(Start, self).__init__('start') self.event = parsed['event'] self.txn = parsed['txn'] def __repr__(self): return "stream:event:Start(event=%s, txn=%d)"%(self.event, self.txn)
Ancestors
class UnknownEvent (parsed)
-
Unknown stream event.
Expand source code
class UnknownEvent(Event): """ Unknown stream event. """ def __init__(self, parsed): super(UnknownEvent, self).__init__(None) self.event = 'unknown' self.event = parsed
Ancestors
class Version (parsed)
-
A version event occurs upon any modifications to the current state of the subscribed document.
:param data: Data :param txn: Timestamp
Expand source code
class Version(Event): """ A version event occurs upon any modifications to the current state of the subscribed document. :param data: Data :param txn: Timestamp """ def __init__(self, parsed): super(Version, self).__init__('version') if isinstance(parsed, dict): self.event = parsed.get('event', None) self.txn = parsed.get('txn') def __repr__(self): return "stream:event:Version(event=%s, txn=%s)" % (self.event, self.txn)
Ancestors