예제 #1
0
def main():
    doc_key = '1TO5Yzk0-4V_RzRK5Jr9I_pF5knZsEZrNn2HKTXrHgls'

    client = FioBank(token=FIOBANK_API_KEY)
    to_date = date.today().strftime('%Y-%m-%d')

    records = []
    for transaction in client.period(from_date='2020-01-01', to_date=to_date):
        transaction['message'] = ', '.join(
            filter(None, [
                transaction.get('comment'),
                transaction.get('user_identification'),
                transaction.get('recipient_message'),
            ]))

        for category_fn in CATEGORIES:
            category = category_fn(transaction)
            if category:
                transaction['category'] = category
                break

        records.append({
            'Date': transaction['date'].strftime('%Y-%m-%d'),
            'Category': transaction['category'],
            'Amount': transaction['amount'],
            'Currency': transaction['currency'],
            'Message': transaction['message'],
            'Variable Symbol': transaction['variable_symbol'],
        })
    google_sheets.upload(google_sheets.get(doc_key, 'transactions'), records)
예제 #2
0
def main():
    doc_key = '1TO5Yzk0-4V_RzRK5Jr9I_pF5knZsEZrNn2HKTXrHgls'
    records = google_sheets.download(google_sheets.get(doc_key, 'companies'))

    with db:
        Company.drop_table()
        Company.create_table()

        for record in records:
            Company.create(**coerce_record(record))
예제 #3
0
 def _get_records(self):
     sheet = google_sheets.get(self.doc_key, self.sheet_name)
     return google_sheets.download(sheet)
예제 #4
0
def fetch_from_google_sheets():
    cells = google_sheets.download_raw(
        google_sheets.get(FINANCES_DOC_KEY, 'finances'))
    return parse_finances(cells)
예제 #5
0
def main():
    log.info('Getting data from Memberful')
    # https://memberful.com/help/integrate/advanced/memberful-api/
    # https://juniorguru.memberful.com/api/graphql/explorer?api_user_id=52463
    transport = RequestsHTTPTransport(
        url='https://juniorguru.memberful.com/api/graphql/',
        headers={'Authorization': f'Bearer {MEMBERFUL_API_KEY}'},
        verify=True,
        retries=3)
    memberful = Memberful(transport=transport,
                          fetch_schema_from_transport=True)
    query = gql("""
        query getSubscriptions($cursor: String!) {
            subscriptions(after: $cursor) {
                totalCount
                pageInfo {
                    endCursor
                    hasNextPage
                }
                edges {
                    node {
                        active
                        createdAt
                        expiresAt
                        pastDue
                        coupon {
                            code
                        }
                        orders {
                            createdAt
                            coupon {
                                code
                            }
                        }
                        member {
                            discordUserId
                            email
                            fullName
                            id
                            stripeCustomerId
                        }
                    }
                }
            }
        }
    """)

    records = []
    seen_discord_ids = set()

    cursor = ''
    while cursor is not None:
        log.info('Requesting Memberful GraphQL')
        params = dict(cursor=cursor)
        result = memberful.execute(query, params)

        for edge in result['subscriptions']['edges']:
            node = edge['node']
            discord_id = node['member']['discordUserId']
            user = None
            if discord_id:
                seen_discord_ids.add(discord_id)
                try:
                    user = ClubUser.get_by_id(int(discord_id))
                except ClubUser.DoesNotExist:
                    pass

            records.append({
                'Name':
                node['member']['fullName'],
                'Discord Name':
                user.display_name if user else None,
                'E-mail':
                node['member']['email'],
                'Memberful ID':
                node['member']['id'],
                'Stripe ID':
                node['member']['stripeCustomerId'],
                'Discord ID':
                discord_id,
                'Memberful Active?':
                node['active'],
                'Memberful Since':
                arrow.get(node['createdAt']).date().isoformat(),
                'Memberful End':
                arrow.get(node['expiresAt']).date().isoformat(),
                'Memberful Coupon':
                get_active_coupon(node),
                'Discord Member?':
                user.is_member if user else False,
                'Discord Since':
                user.first_seen_on().isoformat() if user else None,
                'Memberful Past Due?':
                node['pastDue'],
            })

        if result['subscriptions']['pageInfo']['hasNextPage']:
            cursor = result['subscriptions']['pageInfo']['endCursor']
        else:
            cursor = None

    log.info('Process remaining Discord users')
    for user in ClubUser.listing():
        discord_id = str(user.id)
        if not user.is_bot and discord_id not in seen_discord_ids:
            records.append({
                'Name': None,
                'Discord Name': user.display_name,
                'E-mail': None,
                'Memberful ID': None,
                'Stripe ID': None,
                'Discord ID': discord_id,
                'Memberful Active?': False,
                'Memberful Since': None,
                'Memberful End': None,
                'Memberful Coupon': None,
                'Discord Member?': user.is_member,
                'Discord Since': user.first_seen_on().isoformat(),
                'Memberful Past Due?': False,
            })

    log.info('Uploading subscriptions to Google Sheets')
    google_sheets.upload(google_sheets.get(DOC_KEY, 'subscriptions'), records)