mirror of
https://github.com/LBRYFoundation/lbry-sdk.git
synced 2025-08-28 16:01:28 +00:00
prevent duplicate tags
This commit is contained in:
parent
d27a3b6421
commit
ae4a29d41c
3 changed files with 9 additions and 6 deletions
|
@ -10,4 +10,4 @@ def normalize_tag(tag: str):
|
||||||
|
|
||||||
|
|
||||||
def clean_tags(tags: List[str]):
|
def clean_tags(tags: List[str]):
|
||||||
return [tag for tag in (normalize_tag(tag) for tag in tags) if tag]
|
return [tag for tag in set(normalize_tag(tag) for tag in tags) if tag]
|
||||||
|
|
|
@ -124,8 +124,7 @@ class SQLDB:
|
||||||
height integer not null
|
height integer not null
|
||||||
);
|
);
|
||||||
create index if not exists tag_tag_idx on tag (tag);
|
create index if not exists tag_tag_idx on tag (tag);
|
||||||
create index if not exists tag_claim_hash_idx on tag (claim_hash);
|
create unique index if not exists tag_claim_hash_tag_idx on tag (claim_hash, tag);
|
||||||
create index if not exists tag_height_idx on tag (height);
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
CREATE_CLAIMTRIE_TABLE = """
|
CREATE_CLAIMTRIE_TABLE = """
|
||||||
|
@ -200,7 +199,7 @@ class SQLDB:
|
||||||
self.execute('commit;')
|
self.execute('commit;')
|
||||||
|
|
||||||
def _upsertable_claims(self, txos: List[Output], header, clear_first=False):
|
def _upsertable_claims(self, txos: List[Output], header, clear_first=False):
|
||||||
claim_hashes, claims, tags = [], [], []
|
claim_hashes, claims, tags = [], [], {}
|
||||||
for txo in txos:
|
for txo in txos:
|
||||||
tx = txo.tx_ref.tx
|
tx = txo.tx_ref.tx
|
||||||
|
|
||||||
|
@ -254,14 +253,14 @@ class SQLDB:
|
||||||
claim_record['claim_type'] = CLAIM_TYPES['channel']
|
claim_record['claim_type'] = CLAIM_TYPES['channel']
|
||||||
|
|
||||||
for tag in clean_tags(claim.message.tags):
|
for tag in clean_tags(claim.message.tags):
|
||||||
tags.append((tag, claim_hash, tx.height))
|
tags[(tag, claim_hash)] = (tag, claim_hash, tx.height)
|
||||||
|
|
||||||
if clear_first:
|
if clear_first:
|
||||||
self._clear_claim_metadata(claim_hashes)
|
self._clear_claim_metadata(claim_hashes)
|
||||||
|
|
||||||
if tags:
|
if tags:
|
||||||
self.db.executemany(
|
self.db.executemany(
|
||||||
"INSERT INTO tag (tag, claim_hash, height) VALUES (?, ?, ?)", tags
|
"INSERT INTO tag (tag, claim_hash, height) VALUES (?, ?, ?)", tags.values()
|
||||||
)
|
)
|
||||||
|
|
||||||
return claims
|
return claims
|
||||||
|
|
|
@ -17,3 +17,7 @@ class TestTagNormalization(unittest.TestCase):
|
||||||
|
|
||||||
def test_clean_tags(self):
|
def test_clean_tags(self):
|
||||||
self.assertEqual(['tag'], clean_tags([' \t #!~', '!taG', '\t']))
|
self.assertEqual(['tag'], clean_tags([' \t #!~', '!taG', '\t']))
|
||||||
|
cleaned = clean_tags(['fOo', '!taG', 'FoO'])
|
||||||
|
self.assertIn('tag', cleaned)
|
||||||
|
self.assertIn('foo', cleaned)
|
||||||
|
self.assertEqual(len(cleaned), 2)
|
||||||
|
|
Loading…
Add table
Reference in a new issue