subscription.real_period_seconds = 2592000 subscription.frequency = 30 subscription.frequency_unit = 'N/A' subscription.token_address = '0x0' subscription.token_symbol = currency subscription.gas_price = 0 subscription.new_approve_tx_id = '0x0' subscription.num_tx_approved = 1 subscription.network = 'mainnet' subscription.contributor_profile = profile subscription.grant = grant subscription.comments = validator_comment subscription.amount_per_period_usdt = usd_val subscription.save() if created_on: subscription.created_on = created_on subscription.save() contrib = Contribution.objects.create( success=True, tx_cleared=True, tx_override=True, tx_id=txid, subscription=subscription, validator_passed=True, validator_comment=validator_comment, ) if created_on: contrib.created_on = created_on contrib.save() print(f"ingested {subscription.pk} / {contrib.pk}")
def save_data(self, profile, txid, network, created_on, symbol, value_adjusted, grant, checkout_type): """ Creates contribution and subscription and saves it to database if no matching one exists """ currency = symbol amount = value_adjusted usd_val = amount * convert_token_to_usdt(symbol) # Check that subscription with these parameters does not exist existing_subscriptions = Subscription.objects.filter( grant__pk=grant.pk, contributor_profile=profile, split_tx_id=txid, token_symbol=currency ) for existing_subscription in existing_subscriptions: tolerance = 0.01 # 1% tolerance to account for floating point amount_max = amount * (1 + tolerance) amount_min = amount * (1 - tolerance) if ( existing_subscription.amount_per_period_minus_gas_price > amount_min and existing_subscription.amount_per_period_minus_gas_price < amount_max ): # Subscription exists print("Subscription exists, exiting function\n") return # No subscription found, so create subscription and contribution try: # create objects validator_comment = f"created by ingest grant txn script" subscription = Subscription() subscription.is_postive_vote = True subscription.active = False subscription.error = True subscription.contributor_address = "N/A" subscription.amount_per_period = amount subscription.real_period_seconds = 2592000 subscription.frequency = 30 subscription.frequency_unit = "N/A" subscription.token_address = "0x0" subscription.token_symbol = currency subscription.gas_price = 0 subscription.new_approve_tx_id = "0x0" subscription.num_tx_approved = 1 subscription.network = network subscription.contributor_profile = profile subscription.grant = grant subscription.comments = validator_comment subscription.amount_per_period_usdt = usd_val subscription.created_on = created_on subscription.last_contribution_date = created_on subscription.next_contribution_date = created_on subscription.split_tx_id = txid subscription.save() # Create contribution and set the contribution as successful contrib = subscription.successful_contribution( '0x0', # subscription.new_approve_tx_id, True, # include_for_clr checkout_type=checkout_type ) contrib.success=True contrib.tx_cleared=True contrib.tx_override=True contrib.validator_comment = validator_comment contrib.created_on = created_on contrib.save() print(f"ingested {subscription.pk} / {contrib.pk}") metadata = { "id": subscription.id, "value_in_token": str(subscription.amount_per_period), "value_in_usdt_now": str(round(subscription.amount_per_period_usdt, 2)), "token_name": subscription.token_symbol, "title": subscription.grant.title, "grant_url": subscription.grant.url, "num_tx_approved": subscription.num_tx_approved, "category": "grant", } kwargs = { "profile": profile, "subscription": subscription, "grant": subscription.grant, "activity_type": "new_grant_contribution", "metadata": metadata, } Activity.objects.create(**kwargs) print("Saved!\n") except Exception as e: print(e) print("\n")