-
Notifications
You must be signed in to change notification settings - Fork 1
/
your_code_tweets.py
86 lines (70 loc) · 2.97 KB
/
your_code_tweets.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
import twitter, json, time
class tweet_me(object):
'''
decorate your functions with this
give the decorator arguments (the arguments that __init__ takes)
'''
def __init__(self, recipient, credentials=None, tweet_success=True):
'''
can specify credentials in 3 ways:
1) absolute path to json file
2) list of keys, in order
3) dict of keys, by name
if reading credentials from disk,
make a conf.json file of the following format:
{consumer_key : value
consumer_secret : value
access_token_key : value
access_token_secret : value}
'''
if type(credentials) == str: #absolute path
with open(credentials, 'r') as f:
conf = json.load(f)
consumer_key = conf['consumer_key']
consumer_secret = conf['consumer_secret']
access_token_key = conf['access_token_key']
access_token_secret = conf['access_token_secret']
elif type(credentials) == list: #list of keys
consumer_key, consumer_secret, access_token_key, access_token_secret = credentials
elif type(credentials) == dict: #dict of keys
consumer_key = credentials['consumer_key']
consumer_secret = credentials['consumer_secret']
access_token_key = credentials['access_token_key']
access_token_secret = credentials['access_token_secret']
else:
raise Exception('No valid credentials')
self.t = twitter.Api(consumer_key=consumer_key,
consumer_secret=consumer_secret,
access_token_key=access_token_key,
access_token_secret=access_token_secret)
#automatically add an @ if you don't have it
if recipient[0] != '@':
self.recipient = '@' + recipient
else:
self.recipient = recipient
self.tweet_success = tweet_success
self.last_tweet_time = 0
def tweet(self, message):
if len(message) > 140:
message = message[:139] #clipped
if time.time() - self.last_tweet_time > 10:
self.last_tweet_time = time.time()
self.t.PostUpdate(message)
else:
raise Exception('Slow your roll')
def __call__(self, f):
'''
replace f with wrapped_f
'''
def wrapped_f(*args):
try:
res = f(*args)
if self.tweet_success:
msg = 'Hey {}, your function "{}" completed at {}!! :3'.format(self.recipient, f.__name__, time.time())
self.tweet(msg)
return res
except Exception as e:
msg = 'Hey {}, function "{}" failed with exception "{}" at {}. :('.format(self.recipient, f.__name__, e, time.time())
self.tweet(msg)
raise e
return wrapped_f