forked from LBRYCommunity/lbry-sdk
add sync script
This commit is contained in:
parent
90106f5f08
commit
1870f30af8
1 changed files with 52 additions and 0 deletions
52
scripts/sync.py
Normal file
52
scripts/sync.py
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import argparse
|
||||||
|
import asyncio
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
import apsw
|
||||||
|
from elasticsearch import AsyncElasticsearch
|
||||||
|
from elasticsearch.helpers import async_bulk
|
||||||
|
|
||||||
|
from lbry.wallet.server.db.elastic_search import extract_doc, SearchIndex
|
||||||
|
|
||||||
|
es = AsyncElasticsearch()
|
||||||
|
INDEX = 'claims'
|
||||||
|
|
||||||
|
|
||||||
|
async def get_all(db):
|
||||||
|
def exec_factory(cursor, statement, bindings):
|
||||||
|
tpl = namedtuple('row', (d[0] for d in cursor.getdescription()))
|
||||||
|
cursor.setrowtrace(lambda cursor, row: tpl(*row))
|
||||||
|
return True
|
||||||
|
|
||||||
|
db.setexectrace(exec_factory)
|
||||||
|
total = db.execute("select count(*) as total from claim;").fetchone()[0]
|
||||||
|
for num, claim in enumerate(db.execute(f"""
|
||||||
|
SELECT claimtrie.claim_hash as is_controlling,
|
||||||
|
claimtrie.last_take_over_height,
|
||||||
|
(select group_concat(tag, ' ') from tag where tag.claim_hash in (claim.claim_hash, claim.reposted_claim_hash)) as tags,
|
||||||
|
(select group_concat(language, ' ') from language where language.claim_hash in (claim.claim_hash, claim.reposted_claim_hash)) as languages,
|
||||||
|
claim.*
|
||||||
|
FROM claim LEFT JOIN claimtrie USING (claim_hash)
|
||||||
|
""")):
|
||||||
|
claim = dict(claim._asdict())
|
||||||
|
claim['censor_type'] = 0
|
||||||
|
claim['censoring_channel_hash'] = None
|
||||||
|
claim['tags'] = claim['tags'].split(' ') if claim['tags'] else []
|
||||||
|
claim['languages'] = claim['languages'].split(' ') if claim['languages'] else []
|
||||||
|
print(num, total)
|
||||||
|
yield extract_doc(claim, INDEX)
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("db_path", type=str)
|
||||||
|
args = parser.parse_args()
|
||||||
|
db = apsw.Connection(args.db_path, flags=apsw.SQLITE_OPEN_READONLY | apsw.SQLITE_OPEN_URI)
|
||||||
|
index = SearchIndex('')
|
||||||
|
await index.start()
|
||||||
|
await index.stop()
|
||||||
|
await async_bulk(es, get_all(db.cursor()))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
asyncio.run(main())
|
Loading…
Reference in a new issue