Source code for rattail.db.model.datasync

# -*- coding: utf-8; -*-
################################################################################
#
#  Rattail -- Retail Software Framework
#  Copyright © 2010-2018 Lance Edgar
#
#  This file is part of Rattail.
#
#  Rattail is free software: you can redistribute it and/or modify it under the
#  terms of the GNU General Public License as published by the Free Software
#  Foundation, either version 3 of the License, or (at your option) any later
#  version.
#
#  Rattail is distributed in the hope that it will be useful, but WITHOUT ANY
#  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
#  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
#  details.
#
#  You should have received a copy of the GNU General Public License along with
#  Rattail.  If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
"""
Data Models for DataSync Daemon
"""

from __future__ import unicode_literals

import datetime

import six
import sqlalchemy as sa

from rattail.db.model import Base, uuid_column


[docs] @six.python_2_unicode_compatible class DataSyncChange(Base): """ Represents a change obtained from a DataSync watcher thread, and destined for one or more DataSync consumers. """ __tablename__ = 'datasync_change' model_title = "DataSync Change" uuid = uuid_column() source = sa.Column(sa.String(length=50), nullable=False, doc=""" Key of the watcher from which this change was obtained. """) batch_id = sa.Column(sa.Integer(), nullable=True, doc=""" ID of the "source" batch to which this change belongs, as determined by the datasync watcher. """) batch_sequence = sa.Column(sa.Integer(), nullable=True, doc=""" Sequence number for this change, within the source batch, as determined by the datasync watcher. """) payload_type = sa.Column(sa.String(length=40), nullable=False, doc=""" The "type" of payload represented by the change, e.g. 'Person'. The :attr:`payload_key` should be unique for a given payload type. """) payload_key = sa.Column(sa.String(length=255), nullable=False, doc=""" Key for the payload (presumably unique when combined with :attr:`payload_type`) represented by the change, within the watched database. """) deletion = sa.Column(sa.Boolean(), nullable=False, default=False, doc=""" Whether the change represents a deletion; defaults to ``False``. """) obtained = sa.Column(sa.DateTime(), nullable=False, default=datetime.datetime.utcnow, doc=""" Date and time when the change was obtained from the watcher thread. """) consumer = sa.Column(sa.String(length=50), nullable=True, doc=""" Configured key of the DataSync consumer for which this change is destined. This may be NULL, in which case the change will go to all consumers configured as not "isolated". """) def __str__(self): if self.payload_type and self.payload_key: return "{}: {}{}".format( self.payload_type, self.payload_key, " (deletion)" if self.deletion else "") return "(empty)"