Skip to content
This repository was archived by the owner on Dec 25, 2020. It is now read-only.

尝试修复了部分小bug #5

Open
wants to merge 17 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,13 +442,13 @@ def post(self):
else:
errors = errors + 1
error = cResponse.error_code
chtml = captcha.displayhtml(
public_key = config.recaptcha_public_key,
use_ssl = False,
error = cResponse.error_code)
template_values['captchahtml'] = chtml
template_values['recaptcha_error'] = 1
template_values['recaptcha_error_message'] = '请重新输入 reCAPTCHA 验证码'
chtml = captcha.displayhtml(
public_key = config.recaptcha_public_key,
use_ssl = False,
error = cResponse.error_code)
template_values['captchahtml'] = chtml
template_values['errors'] = errors
if (errors == 0):
member = Member()
Expand Down
229 changes: 124 additions & 105 deletions member.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,114 +498,133 @@ def post(self):
template_values['l10n'] = l10n
if (member):
timestamp = str(int(time.time()))
avatar = self.request.get('avatar')
avatar_73 = images.resize(avatar, 73, 73)
avatar_48 = images.resize(avatar, 48, 48)
avatar_24 = images.resize(avatar, 24, 24)
# Large 73x73
q1 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_large')
if (q1.count() == 1):
avatar_large = q1[0]
avatar_large.content = db.Blob(avatar_73)
avatar_large.put()
else:
qc1 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
if (qc1.count() == 1):
counter1 = qc1[0]
counter1.value = counter1.value + 1
avatar_upload_error = 0
avatar_upload_error_messages = ['',
u'请指定一个图片文件',
]
try:
avatar = self.request.get('avatar')
except NotImageError:
pass
if not avatar:
avatar_upload_error = avatar_upload_error + 1
template_values['member'] = member
template_values['avatar_upload_error'] = avatar_upload_error
template_values['avatar_upload_error_messages'] = avatar_upload_error_messages[avatar_upload_error]
if browser['ios']:
path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'member_settings_avatar.html')
else:
counter1 = Counter()
counter1.name = 'avatar.max'
counter1.value = 1
counter1.put()
avatar_large = Avatar()
avatar_large.name = 'avatar_' + str(member.num) + '_large'
avatar_large.content = db.Blob(avatar_73)
avatar_large.num = counter1.value
avatar_large.put()
member.avatar_large_url = '/avatar/' + str(member.num) + '/large?r=' + timestamp
member.put()
# Normal 48x48
q2 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_normal')
if (q2.count() == 1):
avatar_normal = q2[0]
avatar_normal.content = db.Blob(avatar_48)
avatar_normal.put()
else:
qc2 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
if (qc2.count() == 1):
counter2 = qc2[0]
counter2.value = counter2.value + 1
path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'member_settings_avatar.html')
output = template.render(path, template_values)
self.response.out.write(output)
else:
avatar_73 = images.resize(avatar, 73, 73)
avatar_48 = images.resize(avatar, 48, 48)
avatar_24 = images.resize(avatar, 24, 24)
# Large 73x73
q1 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_large')
if (q1.count() == 1):
avatar_large = q1[0]
avatar_large.content = db.Blob(avatar_73)
avatar_large.put()
else:
counter2 = Counter()
counter2.name = 'avatar.max'
counter2.value = 1
counter2.put()
avatar_normal = Avatar()
avatar_normal.name = 'avatar_' + str(member.num) + '_normal'
avatar_normal.content = db.Blob(avatar_48)
avatar_normal.num = counter2.value
avatar_normal.put()
member.avatar_normal_url = '/avatar/' + str(member.num) + '/normal?r=' + timestamp
member.put()
# Mini 24x24
q3 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_mini')
if (q3.count() == 1):
avatar_mini = q3[0]
avatar_mini.content = db.Blob(avatar_24)
avatar_mini.put()
else:
qc3 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
if (qc3.count() == 1):
counter3 = qc3[0]
counter3.value = counter3.value + 1
qc1 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
if (qc1.count() == 1):
counter1 = qc1[0]
counter1.value = counter1.value + 1
else:
counter1 = Counter()
counter1.name = 'avatar.max'
counter1.value = 1
counter1.put()
avatar_large = Avatar()
avatar_large.name = 'avatar_' + str(member.num) + '_large'
avatar_large.content = db.Blob(avatar_73)
avatar_large.num = counter1.value
avatar_large.put()
member.avatar_large_url = '/avatar/' + str(member.num) + '/large?r=' + timestamp
member.put()
# Normal 48x48
q2 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_normal')
if (q2.count() == 1):
avatar_normal = q2[0]
avatar_normal.content = db.Blob(avatar_48)
avatar_normal.put()
else:
qc2 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
if (qc2.count() == 1):
counter2 = qc2[0]
counter2.value = counter2.value + 1
else:
counter2 = Counter()
counter2.name = 'avatar.max'
counter2.value = 1
counter2.put()
avatar_normal = Avatar()
avatar_normal.name = 'avatar_' + str(member.num) + '_normal'
avatar_normal.content = db.Blob(avatar_48)
avatar_normal.num = counter2.value
avatar_normal.put()
member.avatar_normal_url = '/avatar/' + str(member.num) + '/normal?r=' + timestamp
member.put()
# Mini 24x24
q3 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_mini')
if (q3.count() == 1):
avatar_mini = q3[0]
avatar_mini.content = db.Blob(avatar_24)
avatar_mini.put()
else:
counter3 = Counter()
counter3.name = 'avatar.max'
counter3.value = 1
counter3.put()
avatar_mini = Avatar()
avatar_mini.name = 'avatar_' + str(member.num) + '_mini'
avatar_mini.content = db.Blob(avatar_24)
avatar_mini.num = counter3.value
avatar_mini.put()
member.avatar_mini_url = '/avatar/' + str(member.num) + '/mini?r=' + timestamp
member.put()
# Upload to MobileMe
if config.mobileme_enabled:
headers = {'Authorization' : 'Basic ' + base64.b64encode(config.mobileme_username + ':' + config.mobileme_password)}
host = 'idisk.me.com'
# Sharding
timestamp = str(int(time.time()))
shard = member.num % 31
root = '/' + config.mobileme_username + '/Web/Sites/v2ex/avatars/' + str(shard)
root_mini = root + '/mini'
root_normal = root + '/normal'
root_large = root + '/large'
h = httplib.HTTPConnection(host)
# Mini
h.request('PUT', root_mini + '/' + str(member.num) + '.png', str(avatar_24), headers)
response = h.getresponse()
if response.status == 201 or response.status == 204:
member.avatar_mini_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(shard) + '/mini/' + str(member.num) + '.png?r=' + timestamp
# Normal
h.request('PUT', root_normal + '/' + str(member.num) + '.png', str(avatar_48), headers)
response = h.getresponse()
if response.status == 201 or response.status == 204:
member.avatar_normal_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(shard) + '/normal/' + str(member.num) + '.png?r=' + timestamp
# Large
h.request('PUT', root_large + '/' + str(member.num) + '.png', str(avatar_73), headers)
response = h.getresponse()
if response.status == 201 or response.status == 204:
member.avatar_large_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(shard) + '/large/' + str(member.num) + '.png?r=' + timestamp
qc3 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
if (qc3.count() == 1):
counter3 = qc3[0]
counter3.value = counter3.value + 1
else:
counter3 = Counter()
counter3.name = 'avatar.max'
counter3.value = 1
counter3.put()
avatar_mini = Avatar()
avatar_mini.name = 'avatar_' + str(member.num) + '_mini'
avatar_mini.content = db.Blob(avatar_24)
avatar_mini.num = counter3.value
avatar_mini.put()
member.avatar_mini_url = '/avatar/' + str(member.num) + '/mini?r=' + timestamp
member.put()
memcache.set('Member_' + str(member.num), member, 86400 * 365)
memcache.set('Member::' + member.username_lower, member, 86400 * 365)
memcache.delete('Avatar::avatar_' + str(member.num) + '_large')
memcache.delete('Avatar::avatar_' + str(member.num) + '_normal')
memcache.delete('Avatar::avatar_' + str(member.num) + '_mini')
self.session['message'] = '新头像设置成功'
self.redirect('/settings/avatar')
# Upload to MobileMe
if config.mobileme_enabled:
headers = {'Authorization' : 'Basic ' + base64.b64encode(config.mobileme_username + ':' + config.mobileme_password)}
host = 'idisk.me.com'
# Sharding
timestamp = str(int(time.time()))
shard = member.num % 31
root = '/' + config.mobileme_username + '/Web/Sites/v2ex/avatars/' + str(shard)
root_mini = root + '/mini'
root_normal = root + '/normal'
root_large = root + '/large'
h = httplib.HTTPConnection(host)
# Mini
h.request('PUT', root_mini + '/' + str(member.num) + '.png', str(avatar_24), headers)
response = h.getresponse()
if response.status == 201 or response.status == 204:
member.avatar_mini_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(shard) + '/mini/' + str(member.num) + '.png?r=' + timestamp
# Normal
h.request('PUT', root_normal + '/' + str(member.num) + '.png', str(avatar_48), headers)
response = h.getresponse()
if response.status == 201 or response.status == 204:
member.avatar_normal_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(shard) + '/normal/' + str(member.num) + '.png?r=' + timestamp
# Large
h.request('PUT', root_large + '/' + str(member.num) + '.png', str(avatar_73), headers)
response = h.getresponse()
if response.status == 201 or response.status == 204:
member.avatar_large_url = 'http://web.me.com/' + config.mobileme_username + '/v2ex/avatars/' + str(shard) + '/large/' + str(member.num) + '.png?r=' + timestamp
member.put()
memcache.set('Member_' + str(member.num), member, 86400 * 365)
memcache.set('Member::' + member.username_lower, member, 86400 * 365)
memcache.delete('Avatar::avatar_' + str(member.num) + '_large')
memcache.delete('Avatar::avatar_' + str(member.num) + '_normal')
memcache.delete('Avatar::avatar_' + str(member.num) + '_mini')
self.session['message'] = '新头像设置成功'
self.redirect('/settings/avatar')
else:
self.redirect('/signin')

Expand Down Expand Up @@ -668,4 +687,4 @@ def main():


if __name__ == '__main__':
main()
main()
3 changes: 2 additions & 1 deletion place.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ def post(self, ip):
go = '/place'
member = CheckAuth(self)
l10n = GetMessages(self, member, site)
template_values = {}
template_values['l10n'] = l10n
place = GetPlaceByIP(ip)
say = self.request.get('say').strip()
Expand Down Expand Up @@ -153,4 +154,4 @@ def main():


if __name__ == '__main__':
main()
main()
18 changes: 14 additions & 4 deletions t.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from v2ex.babel.security import *
from v2ex.babel.ua import *
from v2ex.babel.da import *
from v2ex.babel.l10n import *
from v2ex.babel.ext.cookies import Cookies
from v2ex.babel.ext.sessions import Session

Expand Down Expand Up @@ -75,6 +76,7 @@ def get(self):
self.session = Session()
member = CheckAuth(self)
host = self.request.headers['Host']
site = GetSite()
if host == 'localhost:10000' or host == '127.0.0.1:10000':
# Local debugging logic
if member:
Expand Down Expand Up @@ -137,10 +139,10 @@ def get(self):
self.redirect('/settings')
else:
oauth_token = self.request.get('oauth_token')
if host == 'v2ex.appspot.com':
self.redirect('http://www.v2ex.com/twitter/oauth?oauth_token=' + oauth_token)
if host == site.domain:
self.redirect('http://' + site.domain + '/twitter/oauth?oauth_token=' + oauth_token)
else:
self.redirect('http://v2ex.appspot.com/twitter/oauth?oauth_token=' + oauth_token)
self.redirect('http://' + host + '/twitter/oauth?oauth_token=' + oauth_token)

class TwitterHomeHandler(webapp.RequestHandler):
def get(self):
Expand All @@ -153,6 +155,8 @@ def get(self):
template_values['rnd'] = random.randrange(1, 100)
template_values['member'] = member
template_values['page_title'] = site.title + u' › Twitter › Home'
l10n = GetMessages(self, member, site)
template_values['l10n'] = l10n
access_token = OAuthToken.from_string(member.twitter_oauth_string)
twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
rate_limit = memcache.get(str(member.twitter_id) + '::rate_limit')
Expand Down Expand Up @@ -195,6 +199,8 @@ def get(self):
template_values['rnd'] = random.randrange(1, 100)
template_values['member'] = member
template_values['page_title'] = site.title + u' › Twitter › Mentions'
l10n = GetMessages(self, member, site)
template_values['l10n'] = l10n
access_token = OAuthToken.from_string(member.twitter_oauth_string)
twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
rate_limit = memcache.get(str(member.twitter_id) + '::rate_limit')
Expand Down Expand Up @@ -237,6 +243,8 @@ def get(self):
template_values['rnd'] = random.randrange(1, 100)
template_values['member'] = member
template_values['page_title'] = site.title + u' › Twitter › Direct Messages › Inbox'
l10n = GetMessages(self, member, site)
template_values['l10n'] = l10n
access_token = OAuthToken.from_string(member.twitter_oauth_string)
twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
rate_limit = memcache.get(str(member.twitter_id) + '::rate_limit')
Expand Down Expand Up @@ -279,6 +287,8 @@ def get(self, screen_name):
template_values['member'] = member
template_values['page_title'] = site.title + u' › Twitter › ' + screen_name
template_values['screen_name'] = screen_name
l10n = GetMessages(self, member, site)
template_values['l10n'] = l10n
access_token = OAuthToken.from_string(member.twitter_oauth_string)
twitter = OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
rate_limit = memcache.get(str(member.twitter_id) + '::rate_limit')
Expand Down Expand Up @@ -365,4 +375,4 @@ def main():


if __name__ == '__main__':
main()
main()
4 changes: 3 additions & 1 deletion topic.py
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,7 @@ def post(self, topic_num):
class ReplyEditHandler(webapp.RequestHandler):
def get(self, reply_num):
site = GetSite()
template_values = {}
member = CheckAuth(self)
l10n = GetMessages(self, member, site)
template_values['l10n'] = l10n
Expand Down Expand Up @@ -812,6 +813,7 @@ def get(self, reply_num):

def post(self, reply_num):
site = GetSite()
template_values = {}
member = CheckAuth(self)
l10n = GetMessages(self, member, site)
template_values['l10n'] = l10n
Expand Down Expand Up @@ -895,4 +897,4 @@ def main():


if __name__ == '__main__':
main()
main()
Loading