dashboard.helpers

Handle dashboard helpers and related logic.

Copyright (C) 2021 Gitcoin Core

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.

get_bounty_view_kwargs

get_bounty_view_kwargs(request)

Get the relevant kwargs from the request.

handle_bounty_views

handle_bounty_views(request)

Handle bounty view entry.

Attributes: bounty (dashboard.Bounty): The bounty object for the specified request. bounty_kwargs (dict): The relevant key/values from the request to be used for the Bounty query.

Returns: dashboard.Bounty: The Bounty object.

amount

amount(request)

Determine the value of the provided denomination and amount in ETH and USD.

Raises: Http404: The exception is raised if any error is encountered.

Returns: JsonResponse: A JSON response containing ETH and USDT values.

issue_details

issue_details(request)

Determine the Github issue keywords of the specified Github issue or PR URL.

Todo: * Modify the view to only use the Github API (remove BeautifulSoup). * Simplify the view logic.

Returns: JsonResponse: A JSON response containing the Github issue or PR keywords.

validate_org_url

validate_org_url(request)

Determine if the github org URL represents a valid bounty sponsor.

Returns: Empty response with status 200 if the url is valid

normalize_url

normalize_url(url)

Normalize the URL.

Args: url (str): The URL to be normalized.

Returns: str: The normalized URL.

UnsupportedSchemaException

UnsupportedSchemaException(self, /, *args, **kwargs)

Define unsupported schema exception handling.

UnsupportedRepoException

UnsupportedRepoException(self, /, *args, **kwargs)

Define unsupported repo exception handling.

bounty_did_change

bounty_did_change(bounty_id, new_bounty_details)

Determine whether or not the Bounty has changed.

Args: bounty_id (int): The ID of the Bounty. new_bounty_details (dict): The new Bounty raw data JSON.

Returns: bool: Whether or not the Bounty has changed. QuerySet: The old bounties queryset.

handle_bounty_fulfillments

handle_bounty_fulfillments(fulfillments, new_bounty, old_bounty)

Handle BountyFulfillment creation for new bounties.

Args: fulfillments (dict): The fulfillments data dictionary. new_bounty (dashboard.models.Bounty): The new Bounty object. old_bounty (dashboard.models.Bounty): The old Bounty object.

Returns: QuerySet: The BountyFulfillments queryset.

create_new_bounty

create_new_bounty(old_bounties, bounty_payload, bounty_details, bounty_id)

Handle new Bounty creation in the event of bounty changes.

Possible Bounty Stages: 0: Draft 1: Active 2: Dead

Returns: dashboard.models.Bounty: The new Bounty object.

process_bounty_details

process_bounty_details(bounty_details)

Process bounty details.

Args: bounty_details (dict): The Bounty details.

Raises: UnsupportedSchemaException: Exception raised if the schema is unknown or unsupported.

Returns: tuple: A tuple of bounty change data. tuple[0] (bool): Whether or not the Bounty changed. tuple[1] (dashboard.models.Bounty): The first old bounty object. tuple[2] (dashboard.models.Bounty): The new Bounty object.

get_bounty_data_for_activity

get_bounty_data_for_activity(bounty)

Get data from bounty to be saved in activity records.

Args: bounty (dashboard.models.Bounty): The Bounty object.

Returns: dict: The Bounty data represented as a dictionary.

get_fulfillment_data_for_activity

get_fulfillment_data_for_activity(fulfillment)

Get data from fulfillment to be saved in activity records.

Args: fulfillment (dashboard.models.BountyFulfillment): The BountyFulfillment.

Returns: dict: The BountyFulfillment data represented as a dictionary.

record_bounty_activity

record_bounty_activity(event_name, old_bounty, new_bounty, _fulfillment=None, override_created=None)

Records activity based on bounty changes

Args: event_name (string): the event old_bounty (dashboard.models.Bounty): The old Bounty object. new_bounty (dashboard.models.Bounty): The new Bounty object.

Raises: Exception: Log all exceptions that occur during fulfillment checks.

Returns: dashboard.Activity: The Activity object if user_profile is present or None.

record_user_action

record_user_action(event_name, old_bounty, new_bounty)

Record a user action.

Args: event_name (str): The event to be recorded. old_bounty (Bounty): The old Bounty object. new_bounty (Bounty): The new Bounty object.

Raises: Exception: Log all exceptions that occur during fulfillment checks.

is_lowball_bounty

is_lowball_bounty(bounty_value_usdt)

Determine if a bounty value is less than a threshold

Args: bounty_value_usdt (Decimal): The value of the bounty

Returns: bool: True if bounty value is less than the threshold

process_bounty_changes

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.