Как я могу хранить azure.eventhub.common.Offset в Python? - PullRequest
0 голосов
/ 07 октября 2019

В соответствии с официальной документацией для концентраторов событий Azure, пользователь отвечает за управление смещениями. Цитата:

Потребители несут ответственность за хранение собственных значений смещения вне службы концентраторов событий.

Но, глядя на документацию API для класса смещения концентратора событий, сразу очевидно, что он не предлагает способа сериализации или иного хранения.

Итак, мой вопрос: как бы я занялся хранением смещений концентраторов событий?

1 Ответ

1 голос
/ 07 октября 2019

Пожалуйста, внимательно обращайтесь к исходному коду common.py GitHub repo Azure/azure-event-hubs-python, а класс Offset определен в строке 253как показано ниже.

class Offset(object):
    """
    The offset (position or timestamp) where a receiver starts. Examples:
    Beginning of the event stream:
      >>> offset = Offset("-1")
    End of the event stream:
      >>> offset = Offset("@latest")
    Events after the specified offset:
      >>> offset = Offset("12345")
    Events from the specified offset:
      >>> offset = Offset("12345", True)
    Events after a datetime:
      >>> offset = Offset(datetime.datetime.utcnow())
    Events after a specific sequence number:
      >>> offset = Offset(1506968696002)
    """

    def __init__(self, value, inclusive=False):
        """
        Initialize Offset.
        :param value: The offset value.
        :type value: ~datetime.datetime or int or str
        :param inclusive: Whether to include the supplied value as the start point.
        :type inclusive: bool
        """
        self.value = value
        self.inclusive = inclusive

    def selector(self):
        """
        Creates a selector expression of the offset.
        :rtype: bytes
        """
        operator = ">=" if self.inclusive else ">"
        if isinstance(self.value, datetime.datetime):
            timestamp = (calendar.timegm(self.value.utctimetuple()) * 1000) + (self.value.microsecond/1000)
            return ("amqp.annotation.x-opt-enqueued-time {} '{}'".format(operator, int(timestamp))).encode('utf-8')
        if isinstance(self.value, six.integer_types):
            return ("amqp.annotation.x-opt-sequence-number {} '{}'".format(operator, self.value)).encode('utf-8')
        return ("amqp.annotation.x-opt-offset {} '{}'".format(operator, self.value)).encode('utf-8')

Согласно исходному коду класса Offset, это просто обычный класс Python с двумя свойствами value и inclusive. Вы можете просто сохранить значения его свойств в виде строки json или других или просто извлечь эти значения, как в моем примере кода ниже.

from azure.eventhub.common import Offset
offset = Offset("-1")
print(offset.value, offset.inclusive)
# -1 False
print(offset.__dict__)
# {'value': '-1', 'inclusive': False}
import json
offset_json = json.dumps(offset.__dict__)
# '{"value": "-1", "inclusive": false}'

Примечание. В будущем GitHub repo Azure/azure-event-hubs-python будет завершено перемещение в репозиторий GitHub Azure/azure-sdk-for-python, изменения для класса Offset переименованы в EventPosition класс с теми же свойствами value и inclusive.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...