Write blocks as proof of concept

This commit is contained in:
Luke Van Seters 2022-01-03 13:15:30 -05:00
parent e462a16b8f
commit 93bdb7c129

View File

@ -1,5 +1,6 @@
import io
from datetime import datetime from datetime import datetime
from typing import List from typing import Any, List, Optional
from mev_inspect.schemas.blocks import Block from mev_inspect.schemas.blocks import Block
@ -24,20 +25,32 @@ def delete_blocks(
db_session.commit() db_session.commit()
def clean_csv_value(value: Optional[Any]) -> str:
if value is None:
return r"\N"
return str(value).replace("\n", "\\n")
def write_blocks( def write_blocks(
db_session, db_session,
blocks: List[Block], blocks: List[Block],
) -> None: ) -> None:
block_params = [ csv_file_like_object = io.StringIO()
{ for block in blocks:
"block_number": block.block_number, csv_file_like_object.write(
"block_timestamp": datetime.fromtimestamp(block.block_timestamp), "|".join(
} map(
for block in blocks clean_csv_value,
] (
block.block_number,
datetime.fromtimestamp(block.block_timestamp),
),
)
)
+ "\n"
)
db_session.execute( csv_file_like_object.seek(0)
"INSERT INTO blocks (block_number, block_timestamp) VALUES (:block_number, :block_timestamp)",
params=block_params, with db_session.connection().connection.cursor() as cursor:
) cursor.copy_from(csv_file_like_object, "blocks", sep="|")
db_session.commit()