Esempio n. 1
0
def parse_active_membership(user_data: dict) -> Optional[Membership]:
    if not user_data or not user_data.get("data") or not user_data.get(
            "included"):
        return None

    if user_data["data"]["id"] in settings.PATREON_GOD_IDS:
        return Membership(
            platform=Platform.patreon,
            user_id=user_data["data"]["id"],
            full_name=user_data["data"]["attributes"]["full_name"],
            email=user_data["data"]["attributes"]["email"],
            image=user_data["data"]["attributes"]["image_url"],
            started_at=datetime.utcnow(),
            charged_at=None,
            expires_at=datetime.utcnow() + timedelta(days=100 * 365),
            lifetime_support_cents=-1,
            currently_entitled_amount_cents=0)

    log.info(f"Patreon active membership: {user_data}")

    for membership in user_data["included"]:
        if membership["attributes"]["patron_status"] == "active_patron" \
                and membership["attributes"]["last_charge_status"] == "Paid":

            now = datetime.utcnow()

            membership_started_at = datetime.strptime(
                str(membership["attributes"]
                    ["pledge_relationship_start"])[:10], "%Y-%m-%d"
            ) if membership["attributes"]["pledge_relationship_start"] else now

            last_charged_at = None
            if membership["attributes"]["last_charge_date"]:
                last_charged_at = datetime.strptime(
                    str(membership["attributes"]["last_charge_date"])[:10],
                    "%Y-%m-%d")

            if last_charged_at:
                membership_expires_at = last_charged_at + timedelta(days=45)
            else:
                membership_expires_at = first_day_of_next_month(
                    now) + timedelta(days=15)

            return Membership(
                platform=Platform.patreon,
                user_id=user_data["data"]["id"],
                full_name=user_data["data"]["attributes"]["full_name"],
                email=user_data["data"]["attributes"]["email"],
                image=None,  # user_data["data"]["attributes"]["image_url"],
                started_at=membership_started_at,
                charged_at=last_charged_at,
                expires_at=membership_expires_at,
                lifetime_support_cents=int(
                    membership["attributes"]["lifetime_support_cents"] or 0),
                currently_entitled_amount_cents=int(
                    membership["attributes"]["currently_entitled_amount_cents"]
                    or 0),
            )

    return None
Esempio n. 2
0
    def setUp(self):
        self.client = HelperClient()

        self.stub_patreon_response_oauth_token = {
            "access_token": "xxx-access-token",
            "refresh_token": "xxx-refresh-token",
            "expires_in": (datetime.utcnow() + timedelta(minutes=5)).microsecond,
            "scope": "scope??",
            "token_type": "Bearer"
        }
        self.stub_patreon_response_oauth_identity = None  # doesn't need for now
        self.stub_parse_membership = Membership(
            platform=Platform.patreon,
            user_id=str(uuid.uuid4()),
            full_name="PatreonMember FullName",
            email="*****@*****.**",
            image="http://xxx.url",
            started_at=datetime.utcnow(),
            charged_at=None,
            expires_at=datetime.utcnow() + timedelta(days=100 * 365),
            lifetime_support_cents=400,
            currently_entitled_amount_cents=0
        )