kopia lustrzana https://github.com/bugout-dev/moonstream
				
				
				
			Add changes for labels table.
							rodzic
							
								
									ac60de5979
								
							
						
					
					
						commit
						6890d38097
					
				| 
						 | 
				
			
			@ -46,8 +46,12 @@ def get_contract_source_info(
 | 
			
		|||
    if id is None:
 | 
			
		||||
        return None
 | 
			
		||||
    labels = (
 | 
			
		||||
        db_session.query(EthereumLabel).filter(EthereumLabel.address_id == id[0]).all()
 | 
			
		||||
        db_session.query(EthereumLabel)
 | 
			
		||||
        .filter(EthereumLabel.address == contract_address)
 | 
			
		||||
        .all()
 | 
			
		||||
    )
 | 
			
		||||
    if not labels:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    for label in labels:
 | 
			
		||||
        if label.label == ETHERSCAN_SMARTCONTRACT_LABEL_NAME:
 | 
			
		||||
| 
						 | 
				
			
			@ -80,12 +84,6 @@ class LabelNames(Enum):
 | 
			
		|||
def get_ethereum_address_info(
 | 
			
		||||
    db_session: Session, address: str
 | 
			
		||||
) -> Optional[data.EthereumAddressInfo]:
 | 
			
		||||
    query = db_session.query(EthereumAddress.id).filter(
 | 
			
		||||
        EthereumAddress.address == address
 | 
			
		||||
    )
 | 
			
		||||
    id = query.one_or_none()
 | 
			
		||||
    if id is None:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    address_info = data.EthereumAddressInfo(address=address)
 | 
			
		||||
    etherscan_address_url = f"https://etherscan.io/address/{address}"
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +92,7 @@ def get_ethereum_address_info(
 | 
			
		|||
    # Checking for token:
 | 
			
		||||
    coinmarketcap_label: Optional[EthereumLabel] = (
 | 
			
		||||
        db_session.query(EthereumLabel)
 | 
			
		||||
        .filter(EthereumLabel.address_id == id[0])
 | 
			
		||||
        .filter(EthereumLabel.address == address)
 | 
			
		||||
        .filter(EthereumLabel.label == LabelNames.COINMARKETCAP_TOKEN.value)
 | 
			
		||||
        .order_by(text("created_at desc"))
 | 
			
		||||
        .limit(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +112,7 @@ def get_ethereum_address_info(
 | 
			
		|||
    # Checking for smart contract
 | 
			
		||||
    etherscan_label: Optional[EthereumLabel] = (
 | 
			
		||||
        db_session.query(EthereumLabel)
 | 
			
		||||
        .filter(EthereumLabel.address_id == id[0])
 | 
			
		||||
        .filter(EthereumLabel.address == address)
 | 
			
		||||
        .filter(EthereumLabel.label == LabelNames.ETHERSCAN_SMARTCONTRACT.value)
 | 
			
		||||
        .order_by(text("created_at desc"))
 | 
			
		||||
        .limit(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +128,7 @@ def get_ethereum_address_info(
 | 
			
		|||
    # Checking for smart contract
 | 
			
		||||
    erc721_label: Optional[EthereumLabel] = (
 | 
			
		||||
        db_session.query(EthereumLabel)
 | 
			
		||||
        .filter(EthereumLabel.address_id == id[0])
 | 
			
		||||
        .filter(EthereumLabel.address == address)
 | 
			
		||||
        .filter(EthereumLabel.label == LabelNames.ERC721.value)
 | 
			
		||||
        .order_by(text("created_at desc"))
 | 
			
		||||
        .limit(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -152,24 +150,23 @@ def get_address_labels(
 | 
			
		|||
    """
 | 
			
		||||
    Attach labels to addresses.
 | 
			
		||||
    """
 | 
			
		||||
    query = db_session.query(EthereumAddress)
 | 
			
		||||
    if addresses is not None:
 | 
			
		||||
        addresses_list = addresses.split(",")
 | 
			
		||||
        query = query.filter(EthereumAddress.address.in_(addresses_list))
 | 
			
		||||
 | 
			
		||||
    addresses_obj = query.order_by(EthereumAddress.id).slice(start, start + limit).all()
 | 
			
		||||
        addresses_obj = addresses_list[start : start + limit]
 | 
			
		||||
    else:
 | 
			
		||||
        addresses_obj = []
 | 
			
		||||
 | 
			
		||||
    addresses_response = data.AddressListLabelsResponse(addresses=[])
 | 
			
		||||
 | 
			
		||||
    for address in addresses_obj:
 | 
			
		||||
        labels_obj = (
 | 
			
		||||
            db_session.query(EthereumLabel)
 | 
			
		||||
            .filter(EthereumLabel.address_id == address.id)
 | 
			
		||||
            .filter(EthereumLabel.address == address)
 | 
			
		||||
            .all()
 | 
			
		||||
        )
 | 
			
		||||
        addresses_response.addresses.append(
 | 
			
		||||
            data.AddressLabelsResponse(
 | 
			
		||||
                address=address.address,
 | 
			
		||||
                address=address,
 | 
			
		||||
                labels=[
 | 
			
		||||
                    data.AddressLabelResponse(
 | 
			
		||||
                        label=label.label, label_data=label.label_data
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -229,8 +229,7 @@ def query_ethereum_transactions(
 | 
			
		|||
 | 
			
		||||
    if parsed_filters.labels:
 | 
			
		||||
        label_clause = (
 | 
			
		||||
            db_session.query(EthereumAddress)
 | 
			
		||||
            .join(EthereumLabel, EthereumAddress.id == EthereumLabel.address_id)
 | 
			
		||||
            db_session.query(EthereumLabel)
 | 
			
		||||
            .filter(
 | 
			
		||||
                or_(
 | 
			
		||||
                    *[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,31 +55,6 @@ def push_to_bucket(contract_data: Dict[str, Any], contract_file: str):
 | 
			
		|||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_address_id(db_session: Session, contract_address: str) -> int:
 | 
			
		||||
    """
 | 
			
		||||
    Searches for given address in EthereumAddress table,
 | 
			
		||||
    If doesn't find one, creates new.
 | 
			
		||||
    Returns id of address
 | 
			
		||||
    """
 | 
			
		||||
    query = db_session.query(EthereumAddress.id).filter(
 | 
			
		||||
        EthereumAddress.address == contract_address
 | 
			
		||||
    )
 | 
			
		||||
    id = query.one_or_none()
 | 
			
		||||
    if id is not None:
 | 
			
		||||
        return id[0]
 | 
			
		||||
 | 
			
		||||
    smart_contract = EthereumAddress(
 | 
			
		||||
        address=contract_address,
 | 
			
		||||
    )
 | 
			
		||||
    try:
 | 
			
		||||
        db_session.add(smart_contract)
 | 
			
		||||
        db_session.commit()
 | 
			
		||||
        return smart_contract.id
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        db_session.rollback()
 | 
			
		||||
        raise e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def crawl_step(db_session: Session, contract: VerifiedSmartContract, crawl_url: str):
 | 
			
		||||
    attempt = 0
 | 
			
		||||
    current_interval = 2
 | 
			
		||||
| 
						 | 
				
			
			@ -110,10 +85,9 @@ def crawl_step(db_session: Session, contract: VerifiedSmartContract, crawl_url:
 | 
			
		|||
    push_to_bucket(contract_info, object_key)
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        eth_address_id = get_address_id(db_session, contract.address)
 | 
			
		||||
        eth_label = EthereumLabel(
 | 
			
		||||
            label=ETHERSCAN_SMARTCONTRACTS_LABEL_NAME,
 | 
			
		||||
            address_id=eth_address_id,
 | 
			
		||||
            address_id=contract.address,
 | 
			
		||||
            label_data={
 | 
			
		||||
                "object_uri": f"s3://{bucket}/{object_key}",
 | 
			
		||||
                "name": contract.name,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,15 +58,6 @@ def identities_cmc_add_handler(args: argparse.Namespace) -> None:
 | 
			
		|||
            break
 | 
			
		||||
 | 
			
		||||
        with yield_db_session_ctx() as db_session:
 | 
			
		||||
            latest_address = 1
 | 
			
		||||
            latest_address_obj = (
 | 
			
		||||
                db_session.query(EthereumAddress.id)
 | 
			
		||||
                .order_by(text("id desc"))
 | 
			
		||||
                .limit(1)
 | 
			
		||||
                .one_or_none()
 | 
			
		||||
            )
 | 
			
		||||
            if latest_address_obj is not None:
 | 
			
		||||
                latest_address = latest_address_obj[0]
 | 
			
		||||
 | 
			
		||||
            for coin in response["data"]:
 | 
			
		||||
                if coin["platform"] is not None:
 | 
			
		||||
| 
						 | 
				
			
			@ -75,34 +66,15 @@ def identities_cmc_add_handler(args: argparse.Namespace) -> None:
 | 
			
		|||
                        and coin["platform"]["token_address"] is not None
 | 
			
		||||
                    ):
 | 
			
		||||
                        token_address = coin["platform"]["token_address"]
 | 
			
		||||
                        # Check if address already exists
 | 
			
		||||
                        address = (
 | 
			
		||||
                            db_session.query(EthereumAddress)
 | 
			
		||||
                            .filter(EthereumAddress.address == token_address)
 | 
			
		||||
                            .one_or_none()
 | 
			
		||||
                        )
 | 
			
		||||
                        # Add new address
 | 
			
		||||
                        if address is None:
 | 
			
		||||
                            latest_address += 1
 | 
			
		||||
                            eth_token_id = latest_address
 | 
			
		||||
                            eth_token = EthereumAddress(
 | 
			
		||||
                                id=eth_token_id,
 | 
			
		||||
                                address=token_address,
 | 
			
		||||
                            )
 | 
			
		||||
                            db_session.add(eth_token)
 | 
			
		||||
                            logger.info(f"Added {coin['name']} token")
 | 
			
		||||
                        else:
 | 
			
		||||
                            eth_token_id = address.id
 | 
			
		||||
 | 
			
		||||
                        label = (
 | 
			
		||||
                            db_session.query(EthereumLabel)
 | 
			
		||||
                            .filter(EthereumLabel.address_id == eth_token_id)
 | 
			
		||||
                            .filter(EthereumLabel.address == token_address)
 | 
			
		||||
                            .one_or_none()
 | 
			
		||||
                        )
 | 
			
		||||
                        if label is None:
 | 
			
		||||
                            eth_token_label = EthereumLabel(
 | 
			
		||||
                                label="coinmarketcap_token",
 | 
			
		||||
                                address_id=eth_token_id,
 | 
			
		||||
                                address=token_address,
 | 
			
		||||
                                label_data={
 | 
			
		||||
                                    "name": coin["name"],
 | 
			
		||||
                                    "symbol": coin["symbol"],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ from typing import Any, cast, Dict, Optional
 | 
			
		|||
from bugout.app import Bugout
 | 
			
		||||
from bugout.journal import SearchOrder
 | 
			
		||||
from moonstreamdb.db import yield_db_session_ctx
 | 
			
		||||
from moonstreamdb.models import EthereumBlock, EthereumTransaction, EthereumLabel
 | 
			
		||||
from moonstreamdb.models import EthereumBlock
 | 
			
		||||
from sqlalchemy.orm.session import Session
 | 
			
		||||
from web3 import Web3
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,87 +19,178 @@ depends_on = None
 | 
			
		|||
def upgrade():
 | 
			
		||||
    # ### commands auto generated by Alembic - please adjust! ###
 | 
			
		||||
 | 
			
		||||
    op.add_column(
 | 
			
		||||
        "ethereum_labels", sa.Column("address", sa.VARCHAR(length=256), nullable=True)
 | 
			
		||||
    )
 | 
			
		||||
    op.add_column(
 | 
			
		||||
        "ethereum_labels", sa.Column("block_number", sa.BigInteger(), nullable=True)
 | 
			
		||||
    )
 | 
			
		||||
    op.add_column(
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        sa.Column("log_index", postgresql.JSONB(astext_type=sa.Text()), nullable=True),
 | 
			
		||||
    )
 | 
			
		||||
    op.add_column(
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        sa.Column("transaction_timestamp", sa.BigInteger(), nullable=True),
 | 
			
		||||
    )
 | 
			
		||||
    op.create_index(
 | 
			
		||||
        op.f("ix_ethereum_labels_address"), "ethereum_labels", ["address"], unique=False
 | 
			
		||||
    )
 | 
			
		||||
    op.create_index(
 | 
			
		||||
        op.f("ix_ethereum_labels_block_number"),
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        ["block_number"],
 | 
			
		||||
        unique=False,
 | 
			
		||||
    )
 | 
			
		||||
    op.create_index(
 | 
			
		||||
        op.f("ix_ethereum_labels_transaction_timestamp"),
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        ["transaction_timestamp"],
 | 
			
		||||
        unique=False,
 | 
			
		||||
    )
 | 
			
		||||
    # via
 | 
			
		||||
    ###### insert into  table
 | 
			
		||||
 | 
			
		||||
    op.execute(
 | 
			
		||||
        """CREATE TABLE ethereum_labels_new_V2 AS
 | 
			
		||||
                SELECT
 | 
			
		||||
                    ethereum_labels.id as id,
 | 
			
		||||
                    ethereum_labels.label as label,
 | 
			
		||||
                    ethereum_labels.label_data as label_data,
 | 
			
		||||
                    ethereum_labels.created_at as created_at,
 | 
			
		||||
                    ethereum_labels.transaction_hash as transaction_hash,
 | 
			
		||||
                    ethereum_addresses.address as address
 | 
			
		||||
                FROM
 | 
			
		||||
                    ethereum_labels
 | 
			
		||||
                    left join ethereum_addresses ON ethereum_labels.address_id = ethereum_addresses.id;
 | 
			
		||||
 | 
			
		||||
                /* Set correct columns metadata columns TYPE | Nullable | Default  */
 | 
			
		||||
                ALTER TABLE
 | 
			
		||||
                    ethereum_labels_new_V2
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    id
 | 
			
		||||
                SET
 | 
			
		||||
                    NOT NULL,
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    label
 | 
			
		||||
                SET
 | 
			
		||||
                    NOT NULL,
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    created_at TYPE timestamp with time zone,
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    created_at
 | 
			
		||||
                SET
 | 
			
		||||
                    DEFAULT timezone('utc' :: text, statement_timestamp()),
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    created_at
 | 
			
		||||
                SET
 | 
			
		||||
                    NOT NULL,
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    transaction_hash TYPE character varying(256),
 | 
			
		||||
                ALTER COLUMN
 | 
			
		||||
                    address TYPE character varying(256);
 | 
			
		||||
 | 
			
		||||
                /* ADD new columns  */
 | 
			
		||||
                ALTER TABLE
 | 
			
		||||
                    ethereum_labels_new_V2
 | 
			
		||||
                ADD
 | 
			
		||||
                    log_index JSONB NULL,
 | 
			
		||||
                ADD
 | 
			
		||||
                    block_number bigint NULl,
 | 
			
		||||
                ADD
 | 
			
		||||
                    transaction_timestamp bigint NULL;
 | 
			
		||||
 | 
			
		||||
                /* Create constraine must be unique cross database */
 | 
			
		||||
                ALTER TABLE
 | 
			
		||||
                    ONLY public.ethereum_labels_new_V2
 | 
			
		||||
                ADD
 | 
			
		||||
                    CONSTRAINT pk_ethereum_labels_V2 PRIMARY KEY (id);
 | 
			
		||||
 | 
			
		||||
                ALTER TABLE
 | 
			
		||||
                    ONLY public.ethereum_labels_new_V2
 | 
			
		||||
                ADD
 | 
			
		||||
                    CONSTRAINT uq_ethereum_labels_id_V2 UNIQUE (id);
 | 
			
		||||
 | 
			
		||||
                /* Create indexes must be unique cross database */
 | 
			
		||||
                CREATE INDEX idx_ethereum_labels_opensea_nft_name_V2 ON public.ethereum_labels_new_V2 USING btree (((label_data ->> 'name' :: text)))
 | 
			
		||||
                WHERE
 | 
			
		||||
                    ((label) :: text = 'opensea_nft' :: text);
 | 
			
		||||
 | 
			
		||||
                CREATE INDEX ix_ethereum_labels_address_V2 ON public.ethereum_labels_new_V2 USING btree (address);
 | 
			
		||||
 | 
			
		||||
                CREATE INDEX ix_ethereum_labels_block_number_V2 ON public.ethereum_labels_new_V2 USING btree (block_number);
 | 
			
		||||
 | 
			
		||||
                CREATE INDEX ix_ethereum_labels_label_V2 ON public.ethereum_labels_new_V2 USING btree (label);
 | 
			
		||||
 | 
			
		||||
                CREATE INDEX ix_ethereum_labels_transaction_hash_V2 ON public.ethereum_labels_new_V2 USING btree (transaction_hash);
 | 
			
		||||
 | 
			
		||||
                CREATE INDEX ix_ethereum_labels_transaction_timestamp_V2 ON public.ethereum_labels_new_V2 USING btree (transaction_timestamp);
 | 
			
		||||
                """
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    op.execute(
 | 
			
		||||
        """ UPDATE ethereum_labels
 | 
			
		||||
                SET address = ethereum_addresses.address
 | 
			
		||||
                FROM ethereum_labels AS labels
 | 
			
		||||
                    inner join ethereum_addresses
 | 
			
		||||
                    ON labels.address_id = ethereum_addresses.id
 | 
			
		||||
                    where ethereum_labels.address_id is not null;
 | 
			
		||||
        """
 | 
			
		||||
                    BEGIN TRANSACTION;
 | 
			
		||||
 | 
			
		||||
                    LOCK TABLE ethereum_labels IN ACCESS EXCLUSIVE MODE;
 | 
			
		||||
 | 
			
		||||
                    INSERT INTO
 | 
			
		||||
                        ethereum_labels_new_V2 (
 | 
			
		||||
                            id,
 | 
			
		||||
                            label,
 | 
			
		||||
                            label_data,
 | 
			
		||||
                            created_at,
 | 
			
		||||
                            transaction_hash,
 | 
			
		||||
                            address
 | 
			
		||||
                        )
 | 
			
		||||
                    SELECT
 | 
			
		||||
                        ethereum_labels.id as id,
 | 
			
		||||
                        ethereum_labels.label as label,
 | 
			
		||||
                        ethereum_labels.label_data as label_data,
 | 
			
		||||
                        ethereum_labels.created_at as created_at,
 | 
			
		||||
                        ethereum_labels.transaction_hash as transaction_hash,
 | 
			
		||||
                        ethereum_addresses.address as address
 | 
			
		||||
                    FROM
 | 
			
		||||
                        (
 | 
			
		||||
                            SELECT
 | 
			
		||||
                                Row_Number() over (
 | 
			
		||||
                                    order by
 | 
			
		||||
                                        id
 | 
			
		||||
                                ) AS RowIndex,
 | 
			
		||||
                                *
 | 
			
		||||
                            from
 | 
			
		||||
                                ethereum_labels_new_V2
 | 
			
		||||
                        ) AS ethereum_labels_new_V2
 | 
			
		||||
                        INNER JOIN (
 | 
			
		||||
                            SELECT
 | 
			
		||||
                                Row_Number() over (
 | 
			
		||||
                                    order by
 | 
			
		||||
                                        id
 | 
			
		||||
                                ) AS RowIndex,
 | 
			
		||||
                                *
 | 
			
		||||
                            from
 | 
			
		||||
                                ethereum_labels
 | 
			
		||||
                        ) AS ethereum_labels ON ethereum_labels_old.RowIndex > ethereum_labels.RowIndex
 | 
			
		||||
                        INNER JOIN ethereum_addresses ON ethereum_labels.address_id = ethereum_addresses.id;
 | 
			
		||||
 | 
			
		||||
                    /* Rename tabel */
 | 
			
		||||
                    ALTER TABLE
 | 
			
		||||
                        ethereum_labels RENAME TO ethereum_labels_old;
 | 
			
		||||
 | 
			
		||||
                    ALTER TABLE
 | 
			
		||||
                        ethereum_labels_new_V2 RENAME TO ethereum_labels;
 | 
			
		||||
 | 
			
		||||
                    COMMIT;
 | 
			
		||||
                    """
 | 
			
		||||
    )
 | 
			
		||||
    op.drop_index("ix_ethereum_labels_address_id", table_name="ethereum_labels")
 | 
			
		||||
    op.drop_constraint(
 | 
			
		||||
        "fk_ethereum_labels_address_id_ethereum_addresses",
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        type_="foreignkey",
 | 
			
		||||
    )
 | 
			
		||||
    op.drop_column("ethereum_labels", "address_id")
 | 
			
		||||
    # ### end Alembic commands ###
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def downgrade():
 | 
			
		||||
    # ### commands auto generated by Alembic - please adjust! ###
 | 
			
		||||
    op.add_column(
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        sa.Column("address_id", sa.INTEGER(), autoincrement=False, nullable=True),
 | 
			
		||||
    )
 | 
			
		||||
    op.create_foreign_key(
 | 
			
		||||
        "fk_ethereum_labels_address_id_ethereum_addresses",
 | 
			
		||||
        "ethereum_labels",
 | 
			
		||||
        "ethereum_addresses",
 | 
			
		||||
        ["address_id"],
 | 
			
		||||
        ["id"],
 | 
			
		||||
        ondelete="CASCADE",
 | 
			
		||||
    )
 | 
			
		||||
    op.create_index(
 | 
			
		||||
        "ix_ethereum_labels_address_id", "ethereum_labels", ["address_id"], unique=False
 | 
			
		||||
    )
 | 
			
		||||
    op.drop_index(
 | 
			
		||||
        op.f("ix_ethereum_labels_transaction_timestamp"), table_name="ethereum_labels"
 | 
			
		||||
    )
 | 
			
		||||
    op.drop_index(op.f("ix_ethereum_labels_block_number"), table_name="ethereum_labels")
 | 
			
		||||
    op.drop_index(op.f("ix_ethereum_labels_address"), table_name="ethereum_labels")
 | 
			
		||||
    op.drop_column("ethereum_labels", "transaction_timestamp")
 | 
			
		||||
    op.drop_column("ethereum_labels", "log_index")
 | 
			
		||||
    op.drop_column("ethereum_labels", "block_number")
 | 
			
		||||
    op.execute(
 | 
			
		||||
        """ UPDATE ethereum_labels
 | 
			
		||||
            SET
 | 
			
		||||
            address_id = address.id
 | 
			
		||||
            FROM ethereum_labels  labels
 | 
			
		||||
                left join ethereum_addresses address
 | 
			
		||||
                ON labels.address = address.address
 | 
			
		||||
        """
 | 
			
		||||
    )
 | 
			
		||||
    op.drop_column("ethereum_labels", "address")
 | 
			
		||||
    # op.add_column(
 | 
			
		||||
    #     "ethereum_labels",
 | 
			
		||||
    #     sa.Column("address_id", sa.INTEGER(), autoincrement=False, nullable=True),
 | 
			
		||||
    # )
 | 
			
		||||
    # op.create_foreign_key(
 | 
			
		||||
    #     "fk_ethereum_labels_address_id_ethereum_addresses",
 | 
			
		||||
    #     "ethereum_labels",
 | 
			
		||||
    #     "ethereum_addresses",
 | 
			
		||||
    #     ["address_id"],
 | 
			
		||||
    #     ["id"],
 | 
			
		||||
    #     ondelete="CASCADE",
 | 
			
		||||
    # )
 | 
			
		||||
    # op.create_index(
 | 
			
		||||
    #     "ix_ethereum_labels_address_id", "ethereum_labels", ["address_id"], unique=False
 | 
			
		||||
    # )
 | 
			
		||||
    # op.drop_index(
 | 
			
		||||
    #     op.f("ix_ethereum_labels_transaction_timestamp"), table_name="ethereum_labels"
 | 
			
		||||
    # )
 | 
			
		||||
    # op.drop_index(op.f("ix_ethereum_labels_block_number"), table_name="ethereum_labels")
 | 
			
		||||
    # op.drop_index(op.f("ix_ethereum_labels_address"), table_name="ethereum_labels")
 | 
			
		||||
    # op.drop_column("ethereum_labels", "transaction_timestamp")
 | 
			
		||||
    # op.drop_column("ethereum_labels", "log_index")
 | 
			
		||||
    # op.drop_column("ethereum_labels", "block_number")
 | 
			
		||||
    # op.execute(
 | 
			
		||||
    #     """ UPDATE ethereum_labels
 | 
			
		||||
    #         SET
 | 
			
		||||
    #         address_id = address.id
 | 
			
		||||
    #         FROM ethereum_labels AS labels
 | 
			
		||||
    #             inner join ethereum_addresses address
 | 
			
		||||
    #             ON labels.address = address.address
 | 
			
		||||
    #             where ethereum_labels.address IS NOT NULL
 | 
			
		||||
    #     """
 | 
			
		||||
    # )
 | 
			
		||||
    # op.drop_column("ethereum_labels", "address")
 | 
			
		||||
    # ### end Alembic commands ###
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,17 +16,9 @@ def labels_add_handler(args: argparse.Namespace) -> None:
 | 
			
		|||
        raise ValueError("Unable to parse data as dictionary")
 | 
			
		||||
 | 
			
		||||
    with yield_db_session_ctx() as db_session:
 | 
			
		||||
        address = (
 | 
			
		||||
            db_session.query(EthereumAddress)
 | 
			
		||||
            .filter(EthereumAddress.address == str(args.address))
 | 
			
		||||
            .one_or_none()
 | 
			
		||||
        )
 | 
			
		||||
        if address is None:
 | 
			
		||||
            print(f"There is no {args.address} address")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        label = EthereumLabel(
 | 
			
		||||
            label=args.label, address_id=address.id, label_data=label_data
 | 
			
		||||
            label=args.label, address=str(args.address), label_data=label_data
 | 
			
		||||
        )
 | 
			
		||||
        db_session.add(label)
 | 
			
		||||
        db_session.commit()
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +28,7 @@ def labels_add_handler(args: argparse.Namespace) -> None:
 | 
			
		|||
                {
 | 
			
		||||
                    "id": str(label.id),
 | 
			
		||||
                    "label": str(label.label),
 | 
			
		||||
                    "address_id": str(label.address_id),
 | 
			
		||||
                    "address_id": str(label.address),
 | 
			
		||||
                    "label_data": str(label.label_data),
 | 
			
		||||
                    "created_at": str(label.created_at),
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue