forked from ourresearch/total-impact-webapp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scripts.py
98 lines (77 loc) · 2.62 KB
/
scripts.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import stripe
import random
import logging
import os
from totalimpactwebapp.profile import Profile
from totalimpactwebapp import db
logger = logging.getLogger("tiwebapp.scripts")
"""
requires these env vars be set in this environment:
DATABASE_URL
STRIPE_API_KEY
"""
def page_query(q):
offset = 0
while True:
r = False
for elem in q.limit(5).offset(offset):
r = True
yield elem
offset += 5
if not r:
break
def mint_stripe_customers_for_all_profiles():
stripe.api_key = os.getenv("STRIPE_API_KEY")
for profile in page_query(Profile.query.order_by(Profile.email.asc())):
if profile.stripe_id:
print u"Already a Stripe customer for {email}; skipping".format(
email=profile.email
)
continue
full_name = u"{first} {last}".format(
first=profile.given_name,
last=profile.surname
)
if profile.is_advisor:
print u"making an Advisor Stripe customer for {email} ".format(email=profile.email)
stripe_customer = stripe.Customer.create(
description=full_name,
email=profile.email,
plan="base",
coupon="ADVISOR_96309"
)
else:
print u"making a regular Stripe customer for {email} ".format(email=profile.email)
stripe_customer = stripe.Customer.create(
description=full_name,
email=profile.email,
plan="base"
)
print u"Successfully made stripe id " + stripe_customer.id
profile.stripe_id = stripe_customer.id
db.session.merge(profile)
db.session.commit()
def write_500_random_profile_urls():
urls = []
sample_size = 500
for profile in page_query(Profile.query):
products_count = len(profile.tiids)
if products_count > 0:
url = "https://staging-impactstory.org/" + profile.url_slug
urls.append([products_count, url])
logger.info(u"getting a new profile url out: {url}".format(
url=url
))
sampled_urls = random.sample(urls, sample_size)
logger.info(u"writing our {sample_size} sampled profile URLs".format(
sample_size=sample_size
))
for row in sampled_urls:
try:
print "{products_count},{url}".format(
products_count=row[0],
url=row[1]
)
except UnicodeEncodeError:
pass # whatever, we don't need exactly 500
mint_stripe_customers_for_all_profiles()