def m2m_changed_interested(self, bounty_pk, retry: bool = True) -> None: """ :param self: :param bounty_pk: :return: """ with redis.lock("m2m_changed_interested:bounty", timeout=LOCK_TIMEOUT): bounty = Bounty.objects.get(pk=bounty_pk) from dashboard.notifications import maybe_market_to_github maybe_market_to_github(bounty, 'work_started', profile_pairs=bounty.profile_pairs)
def process_bounty_changes(old_bounty, new_bounty): """Process legacy bounty changes. Args: old_bounty (dashboard.models.Bounty): The old Bounty object. new_bounty (dashboard.models.Bounty): The new Bounty object. """ # process bounty sync requests did_bsr = False for bsr in BountySyncRequest.objects.filter(processed=False, github_url=new_bounty.github_url): did_bsr = True bsr.processed = True bsr.save() # new bounty if (not old_bounty and new_bounty and new_bounty.is_open) or (not old_bounty.is_open and new_bounty.is_open): event_name = 'new_bounty' elif old_bounty.num_fulfillments < new_bounty.num_fulfillments: event_name = 'work_submitted' elif old_bounty.is_open and not new_bounty.is_open: if new_bounty.status == 'cancelled': event_name = 'killed_bounty' else: event_name = 'work_done' else: event_name = 'unknown_event' print(event_name) # Build profile pairs list if new_bounty.fulfillments.exists(): profile_pairs = build_profile_pairs(new_bounty) # marketing if event_name != 'unknown_event': print("============ posting ==============") did_post_to_twitter = maybe_market_to_twitter(new_bounty, event_name) did_post_to_slack = maybe_market_to_slack(new_bounty, event_name) did_post_to_github = maybe_market_to_github(new_bounty, event_name, profile_pairs) did_post_to_email = maybe_market_to_email(new_bounty, event_name) print("============ done posting ==============") # what happened what_happened = { 'did_bsr': did_bsr, 'did_post_to_email': did_post_to_email, 'did_post_to_github': did_post_to_github, 'did_post_to_slack': did_post_to_slack, 'did_post_to_twitter': did_post_to_twitter, } print("Legacy changes processed: ") pp = pprint.PrettyPrinter(indent=4) pp.pprint(what_happened) else: print('No notifications sent - Legacy Event Type Unknown = did_bsr: ', did_bsr)
def process_bounty_changes(old_bounty, new_bounty, txid): from dashboard.utils import build_profile_pairs profile_pairs = None # process bounty sync requests did_bsr = False for bsr in BountySyncRequest.objects.filter( processed=False, github_url=new_bounty.github_url): did_bsr = True bsr.processed = True bsr.save() # new bounty if (old_bounty is None and new_bounty and new_bounty.is_open) or (not old_bounty.is_open and new_bounty.is_open): event_name = 'new_bounty' elif old_bounty.num_fulfillments < new_bounty.num_fulfillments: event_name = 'work_submitted' elif old_bounty.is_open and not new_bounty.is_open: if new_bounty.status == 'cancelled': event_name = 'killed_bounty' else: event_name = 'work_done' else: event_name = 'unknown_event' print(event_name) # Build profile pairs list if new_bounty.fulfillments.exists(): profile_pairs = build_profile_pairs(new_bounty) # marketing print("============ posting ==============") did_post_to_twitter = maybe_market_to_twitter(new_bounty, event_name) did_post_to_slack = maybe_market_to_slack(new_bounty, event_name) did_post_to_github = maybe_market_to_github(new_bounty, event_name, profile_pairs) did_post_to_email = maybe_market_to_email(new_bounty, event_name) print("============ done posting ==============") # what happened what_happened = { 'did_bsr': did_bsr, 'did_post_to_email': did_post_to_email, 'did_post_to_github': did_post_to_github, 'did_post_to_slack': did_post_to_slack, 'did_post_to_twitter': did_post_to_twitter, } print("changes processed: ") pp = pprint.PrettyPrinter(indent=4) pp.pprint(what_happened)
def process_bounty_changes(old_bounty, new_bounty, txid): # process bounty sync requests did_bsr = False for bsr in BountySyncRequest.objects.filter( processed=False, github_url=new_bounty.github_url): did_bsr = True bsr.processed = True bsr.save() # new bounty null_address = '0x0000000000000000000000000000000000000000' if (old_bounty is None and new_bounty and new_bounty.is_open) or (not old_bounty.is_open and new_bounty.is_open): event_name = 'new_bounty' elif old_bounty.fulfiller_address == null_address and new_bounty.fulfiller_address != null_address: event_name = 'work_submitted' elif old_bounty.is_open and not new_bounty.is_open: if new_bounty.status == 'cancelled': event_name = 'killed_bounty' else: event_name = 'work_done' elif old_bounty.fulfiller_address != null_address and new_bounty.fulfiller_address == null_address: event_name = 'rejected_claim' else: event_name = 'unknown_event' print(event_name) # marketing print("============ posting ==============") did_post_to_twitter = maybe_market_to_twitter(new_bounty, event_name) did_post_to_slack = maybe_market_to_slack(new_bounty, event_name) did_post_to_github = maybe_market_to_github(new_bounty, event_name) did_post_to_email = maybe_market_to_email(new_bounty, event_name) print("============ done posting ==============") # what happened what_happened = { 'did_bsr': did_bsr, 'did_post_to_email': did_post_to_email, 'did_post_to_github': did_post_to_github, 'did_post_to_slack': did_post_to_slack, 'did_post_to_twitter': did_post_to_twitter, } print("changes processed: ") pp = pprint.PrettyPrinter(indent=4) pp.pprint(what_happened)
def process_bounty_changes(old_bounty, new_bounty): """Process Bounty changes. Args: old_bounty (dashboard.models.Bounty): The old Bounty object. new_bounty (dashboard.models.Bounty): The new Bounty object. """ from dashboard.utils import build_profile_pairs profile_pairs = None # process bounty sync requests did_bsr = False for bsr in BountySyncRequest.objects.filter( processed=False, github_url=new_bounty.github_url).nocache(): did_bsr = True bsr.processed = True bsr.save() # get json diff json_diff = diff(old_bounty.raw_data, new_bounty.raw_data) if ( old_bounty and new_bounty) else None # new bounty if not old_bounty or (not old_bounty and new_bounty and new_bounty.is_open) or (not old_bounty.is_open and new_bounty and new_bounty.is_open): is_greater_than_x_days_old = new_bounty.web3_created < ( timezone.now() - timezone.timedelta(hours=24)) if is_greater_than_x_days_old and not settings.IS_DEBUG_ENV: msg = f"attempting to create a new bounty ({new_bounty.standard_bounties_id}) when is_greater_than_x_days_old = True" print(msg) raise Exception(msg) event_name = 'new_bounty' elif old_bounty.num_fulfillments < new_bounty.num_fulfillments: event_name = 'work_submitted' elif old_bounty.is_open and not new_bounty.is_open: if new_bounty.status in ['cancelled', 'expired']: event_name = 'killed_bounty' else: event_name = 'work_done' elif old_bounty.value_in_token < new_bounty.value_in_token: event_name = 'increased_bounty' else: event_name = 'unknown_event' logger.info( f'got an unknown event from bounty {old_bounty.pk} => {new_bounty.pk}: {json_diff}' ) print(f"- {event_name} event; diff => {json_diff}") # record a useraction for this record_user_action(event_name, old_bounty, new_bounty) record_bounty_activity(event_name, old_bounty, new_bounty) # Build profile pairs list if new_bounty.fulfillments.exists(): profile_pairs = build_profile_pairs(new_bounty) # marketing if event_name != 'unknown_event': print("============ posting ==============") did_post_to_twitter = maybe_market_to_twitter(new_bounty, event_name) did_post_to_slack = maybe_market_to_slack(new_bounty, event_name) did_post_to_user_slack = maybe_market_to_user_slack( new_bounty, event_name) did_post_to_user_discord = maybe_market_to_user_discord( new_bounty, event_name) did_post_to_github = maybe_market_to_github(new_bounty, event_name, profile_pairs) did_post_to_email = maybe_market_to_email(new_bounty, event_name) print("============ done posting ==============") # what happened what_happened = { 'did_bsr': did_bsr, 'did_post_to_email': did_post_to_email, 'did_post_to_github': did_post_to_github, 'did_post_to_slack': did_post_to_slack, 'did_post_to_user_slack': did_post_to_user_slack, 'did_post_to_user_discord': did_post_to_user_discord, 'did_post_to_twitter': did_post_to_twitter, } print("changes processed: ") pp = pprint.PrettyPrinter(indent=4) pp.pprint(what_happened) else: print('No notifications sent - Event Type Unknown = did_bsr: ', did_bsr)
def process_bounty_changes(old_bounty, new_bounty): """Process Bounty changes. Args: old_bounty (dashboard.models.Bounty): The old Bounty object. new_bounty (dashboard.models.Bounty): The new Bounty object. """ from dashboard.utils import build_profile_pairs profile_pairs = None # check for maintainer blocks is_blocked = any([(ele.lower() in new_bounty.github_url.lower()) for ele in BlockedURLFilter.objects.values_list( 'expression', flat=True)]) if is_blocked: raise UnsupportedRepoException( "This repo is not bountyable at the request of the maintainer.") # process bounty sync requests did_bsr = False for bsr in BountySyncRequest.objects.filter( processed=False, github_url=new_bounty.github_url).nocache(): did_bsr = True bsr.processed = True bsr.save() # get json diff json_diff = diff(old_bounty.raw_data, new_bounty.raw_data) if ( old_bounty and new_bounty) else None # new bounty if not old_bounty or (not old_bounty and new_bounty and new_bounty.is_open) or (not old_bounty.is_open and new_bounty and new_bounty.is_open): is_greater_than_x_days_old = new_bounty.web3_created < ( timezone.now() - timezone.timedelta(hours=24)) if is_greater_than_x_days_old and not settings.IS_DEBUG_ENV: msg = f"attempting to create a new bounty ({new_bounty.standard_bounties_id}) when is_greater_than_x_days_old = True" print(msg) raise Exception(msg) event_name = 'new_bounty' elif old_bounty.num_fulfillments < new_bounty.num_fulfillments: event_name = 'work_submitted' elif old_bounty.is_open and not new_bounty.is_open: if new_bounty.status in ['cancelled', 'expired']: event_name = 'killed_bounty' else: event_name = 'work_done' elif old_bounty.value_in_token < new_bounty.value_in_token: event_name = 'increased_bounty' else: event_name = 'unknown_event' logger.info( f'got an unknown event from bounty {old_bounty.pk} => {new_bounty.pk}: {json_diff}' ) print(f"- {event_name} event; diff => {json_diff}") # record a useraction for this record_user_action(event_name, old_bounty, new_bounty) record_bounty_activity(event_name, old_bounty, new_bounty) # Build profile pairs list if new_bounty.fulfillments.exists(): profile_pairs = build_profile_pairs(new_bounty) # Send an Email if this is a LowBall bounty try: if (not old_bounty or old_bounty.value_in_usdt != new_bounty.value_in_usdt): if is_lowball_bounty(new_bounty.value_in_usdt ) and new_bounty.network == 'mainnet': notify_of_lowball_bounty(new_bounty) except Exception as e: logger.error(f'{e} during check for Lowball Bounty') # marketing if event_name != 'unknown_event': print("============ posting ==============") did_post_to_slack = maybe_market_to_slack(new_bounty, event_name) did_post_to_user_slack = maybe_market_to_user_slack( new_bounty, event_name) did_post_to_github = maybe_market_to_github(new_bounty, event_name, profile_pairs) did_post_to_email = maybe_market_to_email(new_bounty, event_name) print("============ done posting ==============") # what happened what_happened = { 'did_bsr': did_bsr, 'did_post_to_email': did_post_to_email, 'did_post_to_github': did_post_to_github, 'did_post_to_slack': did_post_to_slack, 'did_post_to_user_slack': did_post_to_user_slack, 'did_post_to_twitter': False, } print("changes processed: ") pp = pprint.PrettyPrinter(indent=4) pp.pprint(what_happened) else: print('No notifications sent - Event Type Unknown = did_bsr: ', did_bsr)