Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
    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))
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
  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 } )
Ejemplo n.º 5
0
  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))
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
 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))
Ejemplo n.º 9
0
 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))
Ejemplo n.º 10
0
 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))
Ejemplo n.º 11
0
    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")
Ejemplo n.º 12
0
    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()
Ejemplo n.º 13
0
    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")
Ejemplo n.º 14
0
  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 })
Ejemplo n.º 15
0
    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')
Ejemplo n.º 16
0
  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')
Ejemplo n.º 17
0
 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))
Ejemplo n.º 18
0
  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 })
Ejemplo n.º 19
0
 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()
Ejemplo n.º 20
0
 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()
Ejemplo n.º 21
0
 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') })