def look_command(self, msg): channel = self.person.channel if not channel: msg.reply(u'* 您應該先進頻道內再用此一語法查詢.') return if not msg.arg: q = Person.all().filter('channel =', channel) else: q = Person.all().filter('channel =', channel).filter('name =', msg.arg) people = q.fetch(self._NAME_LIMIT + 1) lines = [] for p in people: lines.append(u'*** %s email 是 %s' % (p.name, p.user.email())) msg.reply(u'\n'.join(lines))
def UpdateChannelStats(self): """Recompute num_members for a channel.""" channel = Channel.ChannelByName(self.request.get('channel'), create=False) if not channel: return # channel became empty? num_members = int(self.request.get('num_members', '0')) q = Person.all(keys_only=True).filter('channel =', channel).order('__key__') start_at = self.request.get('start_at') if start_at: q.filter('__key__ >', db.Key(start_at)) people = q.fetch(self._STATS_BATCH) if people: # More to go. num_members += len(people) params = { 'channel': channel.name, 'num_members': num_members, 'start_at': str(people[-1]), } taskqueue.Task(url='/task/update-channel-stats', params=params).add('stats') return # Finished channel.num_members = num_members channel.put() logging.debug('%s now has %d members.' % (channel, num_members))
def post(self): SNr = self.request.get('SNr').strip() SNavn = self.request.get('SNavn').strip() SAdresse = self.request.get('SAdresse').strip() SBy = self.request.get('SBy').strip() query = Person.all() if SNr: query = query.filter('Nr =', int(SNr)) if SNavn: query = query.filter('NavnTags =', '%s' % (SNavn.lower())) if SAdresse: query = query.filter('AdresseTags =', '%s' % (SAdresse.lower())) if SBy: query = query.filter('BynavnTags =', '%s' % (SBy.lower())) #query = query.order('Nr') person_list = query.fetch(50) template_values = { 'person_list': person_list, } path = os.path.join(os.path.dirname(__file__), 'templates/findmedlem.html') self.response.out.write(template.render(path, template_values))
def get(self): # 編集確認 person_id = self.request.get("id") person_obj = '' if (person_id): person_obj = Person.get( person_id ) # 所有しない発言者IDを指定された場合は一覧へリダイレクトする if person_obj and person_obj.owner != users.get_current_user(): self.redirect(urls.APP_PERSON_URL) return # 所有する発言者を取得します query = Person.all() query.filter( 'owner = ', users.get_current_user() ) query.order('-created_on') owned_persons = query.fetch(limit = 1000) # 所有する発言者の名言を取得する meigens = '' if person_obj: query = Meigen.all() query.filter( 'owner = ', users.get_current_user() ) query.filter( 'person = ', person_obj ) meigens = query.fetch(limit = 1000) # 画面を表示する Viewer.generate(Viewer(), self.response, TEMPLATE_PATH, { 'persons': owned_persons, 'current_person': person_obj, 'meigens': meigens } )
def readgirokort042(self, sektion, transkode, rec): # -- pbssektionnr # -- pbstranskode belobmun = float(0) belob = int(0) # Medlem Nr try: Nr = int(rec[33:40]) except: Nr = 0 indbetalingskortid = nextval('Indbetalingskortid') root_indbetalingskort = db.Key.from_path('Persons', 'root', 'Person', '%s' % (Nr)) self.m_rec_indbetalingskort = Indbetalingskort.get_or_insert( '%s' % (indbetalingskortid), parent=root_indbetalingskort) self.m_rec_indbetalingskort.Id = indbetalingskortid self.m_rec_indbetalingskort.Pbssektionnr = sektion self.m_rec_indbetalingskort.Pbstranskode = transkode self.m_rec_indbetalingskort.Nr = Nr # debitorkonto self.m_rec_indbetalingskort.Debitorkonto = rec[25:40] # debgrpnr self.m_rec_indbetalingskort.Debgrpnr = rec[20:25] # Kortartkode self.m_rec_indbetalingskort.Kortartkode = rec[40:42] # FI-kreditor self.m_rec_indbetalingskort.Fikreditornr = rec[42:50] # Indbetalerident self.m_rec_indbetalingskort.Indbetalerident = rec[50:69] # dato if rec[55:61] != '000000': self.m_rec_indbetalingskort.Dato = datetime.strptime( '20' + rec[73:75] + '-' + rec[71:73] + '-' + rec[69:71], "%Y-%m-%d").date() else: self.m_rec_indbetalingskort.Dato = None # Beløb belob = int(rec[75:88]) belobmun = float(float(belob) / 100) self.m_rec_indbetalingskort.Belob = belobmun # Faknr self.m_rec_indbetalingskort.Faknr = int(rec[88:97]) qry = Person.all().filter('Nr =', self.m_rec_indbetalingskort.Nr) if qry.count() == 1: # Add tblindbetalingskort self.m_rec_indbetalingskort.put() else: self.m_rec_indbetalingskort.delete()
def get_person(self, username): if username == "": return None logging.debug("finding person by username: >" + username + "<") q = Person.all().filter("username =", username) return q.get()
def names_command(self, msg): """Handle /names commands.""" m = re.match(r'^(#(?P<channel>' + Channel.CHANNEL_NAME_REGEX + '))?$', msg.arg) if not m: msg.reply('* Bad /names syntax') return if m.group('channel'): channel = Channel.ChannelByName(m.group('channel'), create=False) if not channel: msg.reply('* No such channel: #%s' % m.group('channel')) return else: channel = self.person.channel if not channel: msg.reply( '* You either need to be in a channel, or specify one.') return q = Person.all().filter('channel =', channel) people = q.fetch(self._NAME_LIMIT + 1) if len(people) <= self._NAME_LIMIT: people = people[0:self._NAME_LIMIT] names = sorted([str(p) for p in people]) msg.reply('* Members of %s: %s' % (channel, ' '.join(names))) else: msg.reply('* More than %d people in %s' % (self._NAME_LIMIT, channel))
def names_command(self, msg): """Handle /names commands.""" m = re.match(r'^(#(?P<channel>' + Channel.CHANNEL_NAME_REGEX + '))?$', msg.arg) if not m: msg.reply('* Bad /names syntax') return if m.group('channel'): channel = Channel.ChannelByName(m.group('channel'), create=False) if not channel: msg.reply('* No such channel: #%s' % m.group('channel')) return else: channel = self.person.channel if not channel: msg.reply('* You either need to be in a channel, or specify one.') return q = Person.all().filter('channel =', channel) people = q.fetch(self._NAME_LIMIT + 1) if len(people) <= self._NAME_LIMIT: people = people[0:self._NAME_LIMIT] names = sorted([str(p) for p in people]) msg.reply('* Members of %s: %s' % (channel, ' '.join(names))) else: msg.reply('* More than %d people in %s' % (self._NAME_LIMIT, channel))
def get(self): people = Person.all().order("first_name").order("last_name").fetch(MAX_FETCH_LIMIT) people_list = [] for person in people: people_list.append( person.to_json_dict("first_name", "last_name", "is_starred", "is_active", "is_deleted", "when_created") ) self.response.out.write(json.dumps(people_list))
def postdeploy(self): if not Person.all(keys_only=True).fetch(limit=1): key = Person( key_name="*****@*****.**", login="******", password="******", email="*****@*****.**" ).put() self.response["key"] = str(key) else: self.respond_with_error("At least one user exists")
def readaftale042(self, sektion, transkode, rec): # -- pbssektionnr # -- pbstranskode # - transkode 0230, aktiv aftale # - transkode 0231, tilgang af ny betalingsaftale # - transkode 0232, aftale afmeldt af pengeinstitut # - transkode 0233, aftale afmeldt af kreditor # - transkode 0234, aftale afmeldt af betalingsservice # Medlem Nr try: Nr = int(rec[33:40]) except: Nr = 0 aftalelinid = nextval('Aftalelinid') root_aftalelin = db.Key.from_path('Persons', 'root', 'Person', '%s' % (Nr)) self.m_rec_aftalelin = Aftalelin.get_or_insert('%s' % (aftalelinid), parent=root_aftalelin) self.m_rec_aftalelin.Id = aftalelinid self.m_rec_aftalelin.Pbssektionnr = sektion self.m_rec_aftalelin.Pbstranskode = transkode self.m_rec_aftalelin.Nr = Nr # debitorkonto self.m_rec_aftalelin.Debitorkonto = rec[25:40] # debgrpnr self.m_rec_aftalelin.Debgrpnr = rec[20:25] # aftalenr self.m_rec_aftalelin.Aftalenr = int(rec[40:49]) # aftalestartdato if rec[49:55] != '000000': self.m_rec_aftalelin.Aftalestartdato = datetime.strptime( '20' + rec[53:55] + '-' + rec[51:53] + '-' + rec[49:51], "%Y-%m-%d").date() else: self.m_rec_aftalelin.Aftalestartdato = None # aftaleslutdato if rec[55:61] != '000000': self.m_rec_aftalelin.Aftaleslutdato = datetime.strptime( '20' + rec[59:61] + '-' + rec[57:59] + '-' + rec[55:57], "%Y-%m-%d").date() else: self.m_rec_aftalelin.Aftaleslutdato = None qry = Person.all().filter('Nr =', self.m_rec_aftalelin.Nr) if qry.count() == 1: # Add tblaftalelin self.m_rec_aftalelin.put() else: self.m_rec_aftalelin.delete()
def postdeploy(self): if not Person.all(keys_only=True).fetch(limit=1): key = Person(key_name="*****@*****.**", login="******", password="******", email="*****@*****.**").put() self.response["key"] = str(key) else: self.respond_with_error("At least one user exists")
def individual(self, person_id): # 発言者取得 person_obj = Person.get(person_id) message = '' if (not person_obj): message = '指定された発言者は登録されていません' # 発言者の名言を取得 query = Meigen.all().order('-created_on') query.filter( 'person = ', person_obj ) meigens_of_person = query.fetch( limit = 1000 ) Viewer.generate(Viewer(), self.response, INDIVIDUAL_TEMPLATE_PATH, { 'current_person': person_obj, 'current_meigens': meigens_of_person, 'persons': Person.all().order('-created_on'), 'message': message })
def Broadcast(self): channel = Channel.ChannelByName(self.request.get('channel'), create=False) if not channel: return # channel became empty? message = self.request.get('message') skip_person = self.request.get('skip') if skip_person: skip_person = Person.PersonByEmail(skip_person) q = Person.all().filter('channel =', channel).order('__key__') start_at = self.request.get('start_at') if start_at: q.filter('__key__ >', db.Key(start_at)) people = q.fetch(self._BROADCAST_BATCH) jids = [] for p in people: if skip_person == p: continue jids.append(p.jid()) if not jids: return try: xmpp.send_message(jids, message) except xmpp.InvalidJidError: logging.error('InvalidJidError caught. JIDs were [%s]', ', '.join(['"%s"' % x for x in jids])) raise # Add a task for the next batch. params = { 'channel': channel.name, 'message': message, 'start_at': str(people[-1].key()), } if skip_person: params['skip'] = skip_person.jid() taskqueue.Task(url='/task/broadcast', params=params).add('chats')
def who_command(self, msg): m = re.match(r'^(#(?P<channel>' + Channel.CHANNEL_NAME_REGEX + '))?$', msg.arg) if not m: msg.reply(u'* /who 後面的頻道名稱似乎有誤') return if m.group('channel'): channel = Channel.ChannelByName(m.group('channel'), create=False) if not channel: msg.reply(u'* 沒有您要查的頻道: #%s' % m.group('channel')) return else: channel = self.person.channel if not channel: msg.reply(u'* 您應該先進頻道內再用此一語法查詢.') return q = Person.all().filter('channel =', channel) people = q.fetch(self._NAME_LIMIT + 1) if len(people) <= self._NAME_LIMIT: people = people[0:self._NAME_LIMIT] names = sorted([p.name for p in people]) msg.reply(u'* 在 %s 頻道內的人有: %s' % (channel, ', '.join(names))) else: msg.reply(u'* 在頻道 %s 的人數超過 %d' % (channel, self._NAME_LIMIT))
def get(self): # 所有する発言者のみ取得する query = Person.all() query.filter( 'owner = ', users.get_current_user() ) query.order('-created_on') owned_persons = query.fetch(limit = 1000) # 所有する名言のみ取得する query = Meigen.all() query.filter( 'owner = ', users.get_current_user() ) query.order('-created_on') owned_meigens = query.fetch(limit = 1000) # 編集確認 meigen_id = self.request.get("id") meigen_obj = '' if (meigen_id): meigen_obj = Meigen.get( meigen_id ) # 画面を表示する Viewer.generate(Viewer(), self.response, TEMPLATE_PATH, {'persons': owned_persons, 'meigens': owned_meigens, 'current_meigen': meigen_obj })
def all(self): people = Person.all().with_cursor(self.request.get("cursor")) self.response["data"] = [person.to_json() for person in people] self.response["cursor"] = people.cursor()
def get(self, person_id): # 発言者個別ページを表示する if person_id: PortalPersonHandler.individual(self, person_id) else: Viewer.generate(Viewer(), self.response, LIST_TEMPLATE_PATH, {'persons': Person.all().order('-created_on') })