Beispiel #1
0
def CreatePlaceByIP(ip):
    place = Place()
    #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place.max')
    q = Counter.selectBy(name='place.max')
    if (q.count() == 1):
        counter = q[0]
        counter.value = counter.value + 1
    else:
        counter = Counter()
        counter.name = 'place.max'
        counter.value = 1
    #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place.total')
    q2 = Counter.selectBy(name='place.total')
    if (q2.count() == 1):
        counter2 = q2[0]
        counter2.value = counter2.value + 1
    else:
        counter2 = Counter()
        counter2.name = 'place.total'
        counter2.value = 1
    place.num = ip2long(ip)
    place.ip = ip
    place.sync()
    counter.sync()
    counter2.sync()
    store.commit()  #jon add
    return place
Beispiel #2
0
 def post(self):
     site = GetSite()
     browser = detect(self.request)
     template_values = {}
     template_values['site'] = site
     template_values['system_version'] = SYSTEM_VERSION
     template_values['page_title'] = site.title + u' › 新建记事'
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if member:
         template_values['member'] = member
         # Verification: content
         note_content = self.request.arguments['content'][0].strip()
         note_content_length = len(note_content)
         if note_content_length > 0:
             note = Note()
             #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'note.max')
             q = Counter.selectBy(name='note.max')
             if (q.count() == 1):
                 counter = q[0]
                 counter.value = counter.value + 1
             else:
                 counter = Counter()
                 counter.name = 'note.max'
                 counter.value = 1
             #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'note.total')
             q2 = Counter.selectBy(name='note.max')
             if (q2.count() == 1):
                 counter2 = q2[0]
                 counter2.value = counter2.value + 1
             else:
                 counter2 = Counter()
                 counter2.name = 'note.total'
                 counter2.value = 1
             note.num = counter.value
             note.title = note_content.split("\n")[0][0:60].strip()
             note.content = note_content
             note.body = "\n".join(note_content.split("\n")[1:]).strip()
             note.length = len(note_content)
             note.member_num = member.num
             note.member = member
             note.sync()
             counter.sync()
             counter2.sync()
             store.commit()  #jon add
             self.redirect('/notes/' + str(note.num))
         else:
             template_values['note_content'] = note_content
             if browser['ios']:
                 path = os.path.join(os.path.dirname(__file__), 'tpl',
                                     'mobile')
             else:
                 path = os.path.join(os.path.dirname(__file__), 'tpl',
                                     'desktop')
             t = self.get_template(path, 'notes_new.html')
             self.finish(t.render(template_values))
     else:
         self.redirect('/signin')
Beispiel #3
0
    def get(self, reply_key):
        reply = Reply.get(reply_key)
        topic = GetKindByNum('Topic', reply.topic_num)
        ms = re.findall('(@[a-zA-Z0-9\_]+\.?)\s?', reply.content)
        unique = []
        for m in ms:
            if m.lower() not in unique:
                unique.append(m.lower())
        keys = []
        if (len(unique) > 0):
            for m in unique:
                m_id = re.findall('@([a-zA-Z0-9\_]+\.?)', m)
                if (len(m_id) > 0):
                    if (m_id[0].endswith('.') != True):
                        member_username = m_id[0]
                        member = GetMemberByUsername(member_username)
                        if member:
                            if (member.id != topic.member.id) and (
                                    member.id != reply.member.id) and (
                                        member.id not in keys):
                                #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'notification.max')
                                q = Counter.selectBy(name='notification.max')
                                if (q.count() == 1):
                                    counter = q[0]
                                    counter.value = counter.value + 1
                                else:
                                    counter = Counter()
                                    counter.name = 'notification.max'
                                    counter.value = 1
                                #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'notification.total')
                                q2 = Counter.selectBy(
                                    name='notification.total')
                                if (q2.count() == 1):
                                    counter2 = q2[0]
                                    counter2.value = counter2.value + 1
                                else:
                                    counter2 = Counter()
                                    counter2.name = 'notification.total'
                                    counter2.value = 1

                                notification = Notification(member=member)
                                notification.num = counter.value
                                notification.type = 'mention_reply'
                                notification.payload = reply.content
                                notification.label1 = topic.title
                                notification.link1 = '/t/' + str(
                                    topic.num) + '#reply' + str(topic.replies)
                                notification.member = reply.member
                                notification.for_member_num = member.num

                                keys.append(str(member.id))

                                counter.sync()
                                counter2.sync()
                                notification.sync()
                                store.commit()  #jon add
        for k in keys:
            taskqueue.add(url='/notifications/check/' + k)
Beispiel #4
0
 def post(self):
     site = GetSite()
     browser = detect(self.request)
     template_values = {}
     template_values['site'] = site
     template_values['system_version'] = SYSTEM_VERSION
     template_values['page_title'] = site.title + u' › 新建记事'
     member = CheckAuth(self)
     l10n = GetMessages(self, member, site)
     template_values['l10n'] = l10n
     if member:
         template_values['member'] = member
         # Verification: content
         note_content = self.request.arguments['content'][0].strip()
         note_content_length = len(note_content)
         if note_content_length > 0:
             note = Note()
             #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'note.max')
             q = Counter.selectBy(name='note.max')
             if (q.count() == 1):
                 counter = q[0]
                 counter.value = counter.value + 1
             else:
                 counter = Counter()
                 counter.name = 'note.max'
                 counter.value = 1
             #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'note.total')
             q2 = Counter.selectBy(name='note.max')
             if (q2.count() == 1):
                 counter2 = q2[0]
                 counter2.value = counter2.value + 1
             else:
                 counter2 = Counter()
                 counter2.name = 'note.total'
                 counter2.value = 1
             note.num = counter.value
             note.title = note_content.split("\n")[0][0:60].strip()
             note.content = note_content
             note.body = "\n".join(note_content.split("\n")[1:]).strip()
             note.length = len(note_content)
             note.member_num = member.num
             note.member = member
             note.sync()
             counter.sync()
             counter2.sync()
             store.commit()  #jon add
             self.redirect('/notes/' + str(note.num))
         else:
             template_values['note_content'] = note_content
             if browser['ios']:
                 path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile')
             else:
                 path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop')
             t=self.get_template(path,'notes_new.html')
             self.finish(t.render(template_values))
     else:
         self.redirect('/signin')
    def get(self, topic_key):
        topic = Topic.get(topic_key)
        combined = topic.title + " " + topic.content
        ms = re.findall('(@[a-zA-Z0-9\_]+\.?)\s?', combined)
        unique = []
        for m in ms:
            if m.lower() not in unique:
                unique.append(m.lower())
        keys = []
        if (len(unique) > 0):
            for m in unique:
                m_id = re.findall('@([a-zA-Z0-9\_]+\.?)', m)
                if (len(m_id) > 0):
                    if (m_id[0].endswith('.') != True):
                        member_username = m_id[0]
                        member = GetMemberByUsername(member_username)
                        if member:
                            if member.id != topic.member.id and member.id not in keys:
                                #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'notification.max')
                                q = Counter.selectBy(name='notification.max')
                                if (q.count() == 1):
                                    counter = q[0]
                                    counter.value = counter.value + 1
                                else:
                                    counter = Counter()
                                    counter.name = 'notification.max'
                                    counter.value = 1
                                #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'notification.total')
                                q2 = Counter.selectBy(name='notification.total')
                                if (q2.count() == 1):
                                    counter2 = q2[0]
                                    counter2.value = counter2.value + 1
                                else:
                                    counter2 = Counter()
                                    counter2.name = 'notification.total'
                                    counter2.value = 1

                                notification = Notification(member=member)
                                notification.num = counter.value
                                notification.type = 'mention_topic'
                                notification.payload = topic.content
                                notification.label1 = topic.title
                                notification.link1 = '/t/' + str(topic.num) + '#reply' + str(topic.replies)
                                notification.member = topic.member
                                notification.for_member_num = member.num

                                keys.append(str(member.id))

                                counter.sync()
                                counter2.sync()
                                notification.sync()
                                store.commit()  #jon add
        for k in keys:
            taskqueue.add(url='/notifications/check/' + k)
Beispiel #6
0
 def post(self, ip):
     site = GetSite()
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/place'
     member = CheckAuth(self)
     place = GetPlaceByIP(ip)
     say = self.request.arguments['say'][0].strip()
     if len(say) > 0 and len(say) < 280 and member and place:
         if member.ip == ip:
             message = PlaceMessage()
             #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place_message.max')
             q = Counter.selectBy(name='place_message.max')
             if (q.count() == 1):
                 counter = q[0]
                 counter.value = counter.value + 1
             else:
                 counter = Counter()
                 counter.name = 'place_message.max'
                 counter.value = 1
             #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place_message.total')
             q2 = Counter.selectBy(name='place_message.total')
             if (q2.count() == 1):
                 counter2 = q2[0]
                 counter2.value = counter2.value + 1
             else:
                 counter2 = Counter()
                 counter2.name = 'place_message.total'
                 counter2.value = 1
             message.num = counter.value
             message.place = place
             message.place_num = place.num
             message.member = member
             message.content = say
             message.sync()
             counter.sync()
             counter2.sync()
             store.commit()  #jon add
     self.redirect(go)
Beispiel #7
0
 def post(self, ip):
     site = GetSite()
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/place'
     member = CheckAuth(self)
     place = GetPlaceByIP(ip)
     say = self.request.arguments['say'][0].strip()
     if len(say) > 0 and len(say) < 280 and member and place:
         if member.ip == ip:
             message = PlaceMessage()
             #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place_message.max')
             q = Counter.selectBy(name='place_message.max')
             if (q.count() == 1):
                 counter = q[0]
                 counter.value = counter.value + 1
             else:
                 counter = Counter()
                 counter.name = 'place_message.max'
                 counter.value = 1
             #q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place_message.total')
             q2 = Counter.selectBy(name='place_message.total')
             if (q2.count() == 1):
                 counter2 = q2[0]
                 counter2.value = counter2.value + 1
             else:
                 counter2 = Counter()
                 counter2.name = 'place_message.total'
                 counter2.value = 1
             message.num = counter.value
             message.place = place
             message.place_num = place.num
             message.member = member
             message.content = say
             message.sync()
             counter.sync()
             counter2.sync()
             store.commit()  #jon add
     self.redirect(go)
Beispiel #8
0
 def get(self, key):
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/place'
     member = CheckAuth(self)
     if member:
         message = PlaceMessage.get(key)
         if message:
             if message.member.num == member.num:
                 message.delete()
                 #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place_message.total')
                 q = Counter.selectBy(name='place_message.total')
                 if (q.count() == 1):
                     counter = q[0]
                     counter.value = counter.value - 1
                     counter.sync()
                     store.commit()  #jon add
     self.redirect(go)
Beispiel #9
0
 def get(self, key):
     if 'Referer' in self.request.headers:
         go = self.request.headers['Referer']
     else:
         go = '/place'
     member = CheckAuth(self)
     if member:
         message = PlaceMessage.get(key)
         if message:
             if message.member.num == member.num:
                 message.delete()
                 #q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'place_message.total')
                 q = Counter.selectBy(name='place_message.total')
                 if (q.count() == 1):
                     counter = q[0]
                     counter.value = counter.value - 1
                     counter.sync()
                     store.commit()  #jon add
     self.redirect(go)
Beispiel #10
0
    def post(self):
        site = GetSite()
        self.session = Session()
        browser = detect(self.request)
        template_values = {}
        template_values['site'] = site
        template_values['system_version'] = SYSTEM_VERSION
        member = CheckAuth(self)
        l10n = GetMessages(self, member, site)
        template_values['l10n'] = l10n
        #template_values['xsrf'] = self.xsrf_form_html()
        if (member):
            dest = '/settings/avatar'
            timestamp = str(int(time.time()))
            try:
                avatar = self.request.arguments['avatar'][0]
            except:
                return self.redirect(dest)
            if avatar is None:
                return self.redirect(dest)
            avatar_len = len(avatar)
            if avatar_len == 0:
                return self.redirect(dest)

            s = StringIO.StringIO()
            s.write(avatar)
            images = Image.open(s)
            avatar_73 = images.resize(73, 73)
            avatar_48 = images.resize(48, 48)
            avatar_24 = images.resize(24, 24)
            # Large 73x73
            #q1 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_large')
            q1 = Avatar.selectBy(name='avatar_' + str(member.num) + '_large')
            if (q1.count() == 1):
                avatar_large = q1[0]
                avatar_large.content = avatar_73
                avatar_large.sync()
                store.commit()  #jon add
            else:
                #qc1 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
                qc1 =Counter.selectBy(name='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.sync()
                store.commit()  #jon add
                avatar_large = Avatar()
                avatar_large.name = 'avatar_' + str(member.num) + '_large'
                avatar_large.content = avatar_73
                avatar_large.num = counter1.value
                avatar_large.sync()
                store.commit()  #jon add
            member.avatar_large_url = '/avatar/' + str(member.num) + '/large?r=' + timestamp
            member.sync()
            store.commit()  #jon add
            # Normal 48x48
            #q2 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_normal')
            q2 = Avatar.selectBy(name='avatar_' + str(member.num) + '_normal')
            if (q2.count() == 1):
                avatar_normal = q2[0]
                avatar_normal.content = avatar_48
                avatar_normal.sync()
                store.commit()  #jon add
            else:
                #qc2 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
                qc2 = Counter.selectBy(name='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.sync()
                avatar_normal = Avatar()
                avatar_normal.name = 'avatar_' + str(member.num) + '_normal'
                avatar_normal.content = avatar_48
                avatar_normal.num = counter2.value
                avatar_normal.sync()
                store.commit()  #jon add
            member.avatar_normal_url = '/avatar/' + str(member.num) + '/normal?r=' + timestamp
            member.sync()
            store.commit()  #jon add
            # Mini 24x24
            #q3 = db.GqlQuery("SELECT * FROM Avatar WHERE name = :1", 'avatar_' + str(member.num) + '_mini')
            q3 = Avatar.selectBy(name='avatar_' + str(member.num) + '_mini')
            if (q3.count() == 1):
                avatar_mini = q3[0]
                avatar_mini.content = avatar_24
                avatar_mini.sync()
            else:
                #qc3 = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", 'avatar.max')
                qc3 = Counter.selectBy(name='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.sync()
                avatar_mini = Avatar()
                avatar_mini.name = 'avatar_' + str(member.num) + '_mini'
                avatar_mini.content = avatar_24
                avatar_mini.num = counter3.value
                avatar_mini.sync()
                store.commit()  #jon add
            member.avatar_mini_url = '/avatar/' + str(member.num) + '/mini?r=' + timestamp
            member.sync()
            store.commit()  #jon add
            # 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.sync()
                store.commit()  #jon add
            # Upload to UpYun
            if config.upyun_enabled:
                u = UpYun(config.upyun_bucket, config.upyun_username, config.upyun_password)
                # Mini
                mini = avatar_24
                u.setContentMD5(md5(mini))
                mini_suffix = '/avatars/mini/' + str(member.num) + '.png'
                r = u.writeFile(mini_suffix, mini, True)
                if r == True:
                    member.avatar_mini_url = 'http://' + config.upyun_bucket + '.b0.upaiyun.com' + mini_suffix + '?r=' + timestamp
                # Normal
                normal = avatar_48
                u.setContentMD5(md5(normal))
                normal_suffix = '/avatars/normal/' + str(member.num) + '.png'
                r = u.writeFile(normal_suffix, normal, True)
                if r == True:
                    member.avatar_normal_url = 'http://' + config.upyun_bucket + '.b0.upaiyun.com' + normal_suffix + '?r=' + timestamp
                # Large
                large = avatar_73
                u.setContentMD5(md5(large))
                large_suffix = '/avatars/large/' + str(member.num) + '.png'
                r = u.writeFile(large_suffix, large, True)
                if r == True:
                    member.avatar_large_url = 'http://' + config.upyun_bucket + '.b0.upaiyun.com' + large_suffix + '?r=' + timestamp
                member.sync()
                store.commit()  #jon add
            memcache.set('Member_' + str(member.num), member, 86400 * 14)
            memcache.set('Member::' + member.username_lower, member, 86400 * 14)
            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')