diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py index 7cbbc1ecb45d4975014492634bb50f5d2afef251..c3cf174ce65a7b4ceab53512b08653879104c82f 100644 --- a/src/sakia/data/entities/identity.py +++ b/src/sakia/data/entities/identity.py @@ -10,8 +10,10 @@ class Identity: blockstamp = attr.ib(convert=block_uid, default=BlockUID.empty()) signature = attr.ib(convert=str, default="", cmp=False) timestamp = attr.ib(convert=int, default=0, cmp=False) - written = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False) - revoked = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False) + written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False) + revoked_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False) member = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False) membership_buid = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False) membership_timestamp = attr.ib(convert=int, default=0, cmp=False) + membership_type = attr.ib(convert=str, default='', validator=lambda s, a, t: t in ('', 'IN', 'OUT'), cmp=False) + membership_written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False) diff --git a/src/sakia/data/repositories/identities.py b/src/sakia/data/repositories/identities.py index d4ed89ba6df12661813342556e32fa294c6dea96..3af88b1a0e6f5b09e8a3b398e2b98356b57ab2b2 100644 --- a/src/sakia/data/repositories/identities.py +++ b/src/sakia/data/repositories/identities.py @@ -31,11 +31,13 @@ class IdentitiesRepo: self._conn.execute("""UPDATE identities SET signature=?, ts=?, - written=?, - revoked=?, + written_on=?, + revoked_on=?, member=?, ms_buid=?, - ms_timestamp=? + ms_timestamp=?, + ms_written_on=?, + ms_type=? WHERE currency=? AND pubkey=? AND diff --git a/src/sakia/data/repositories/meta.sql b/src/sakia/data/repositories/meta.sql index e82001c33b80f060ff242caedc4f681a15b3820e..dc59befef150511aaf392a627cf99462ccc26d05 100644 --- a/src/sakia/data/repositories/meta.sql +++ b/src/sakia/data/repositories/meta.sql @@ -6,11 +6,13 @@ CREATE TABLE IF NOT EXISTS identities( blockstamp VARCHAR(100), signature VARCHAR(100), ts INT, - written BOOLEAN, - revoked BOOLEAN, + written_on VARCHAR(100), + revoked_on VARCHAR(100), member BOOLEAN, ms_buid VARCHAR(100), ms_timestamp INT, + ms_written_on VARCHAR(100), + ms_type VARCHAR(5), PRIMARY KEY (currency, pubkey, uid, blockstamp) ); diff --git a/src/sakia/tests/unit/data/test_identies_repo.py b/src/sakia/tests/unit/data/test_identies_repo.py index a40f7ec15a36eff736d9af5f7e1680026a3dc8ea..a4abbd16943cd0f83e482c228b823d29e1395b9f 100644 --- a/src/sakia/tests/unit/data/test_identies_repo.py +++ b/src/sakia/tests/unit/data/test_identies_repo.py @@ -25,11 +25,13 @@ class TestIdentitiesRepo(unittest.TestCase): "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", 1473108382, - False, - False, + None, + None, False, None, - 0)) + 0, + '', + None)) identity = identities_repo.get_one(currency="testcurrency", pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", uid="john", @@ -46,6 +48,7 @@ class TestIdentitiesRepo(unittest.TestCase): self.assertEqual(identity.member, False) self.assertEqual(identity.membership_buid, BlockUID.empty()) self.assertEqual(identity.membership_timestamp, 0) + self.assertEqual(identity.membership_written_on, BlockUID.empty()) identities_repo.drop(identity) identity = identities_repo.get_one(currency="testcurrency", pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", @@ -65,21 +68,25 @@ class TestIdentitiesRepo(unittest.TestCase): "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", 1473108382, - False, - False, + None, + None, False, None, - 0)) + 0, + '', + None)) identities_repo.insert(Identity("testcurrency", "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", "doe", "101-BAD49448A1AD73C978CEDCB8F137D20A5715EBAA739DAEF76B1E28EE67B2C00C", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", 1455433535, - False, - False, + None, + None, False, None, - 0)) + 0, + '', + None)) identities = identities_repo.get_all(currency="testcurrency") self.assertIn("testcurrency", [i.currency for i in identities]) self.assertIn("john", [i.uid for i in identities]) @@ -95,11 +102,13 @@ class TestIdentitiesRepo(unittest.TestCase): "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", 1473108382, - False, - False, + None, + None, False, None, - 0) + 0, + '', + None) identities_repo.insert(identity) identity.member = True identities_repo.update(identity)