Ejemplo n.º 1
0
 async def get(self):
   rucounts = collections.defaultdict(int)
   async for dudoc in domain.get_multi_user(domain_id=self.domain_id,
                                            role={'$gte': ''},
                                            fields={'uid': 1, 'role': 1}):
     if 'role' in dudoc:
       rucounts[dudoc['role']] += 1
   roles = sorted(list(self.domain['roles'].keys()))
   self.render('domain_manage_role.html', rucounts=rucounts, roles=roles)
Ejemplo n.º 2
0
Archivo: domain.py Proyecto: vijos/vj4
 async def get(self):
   rucounts = collections.defaultdict(int)
   async for dudoc in domain.get_multi_user(domain_id=self.domain_id,
                                            role={'$gte': ''},
                                            fields={'uid': 1, 'role': 1}):
     if 'role' in dudoc:
       rucounts[dudoc['role']] += 1
   # built-in roles are displayed additionally so that we don't need to use get_all_roles() here
   roles = sorted(list(self.domain['roles'].keys()))
   self.render('domain_manage_role.html', rucounts=rucounts, roles=roles)
Ejemplo n.º 3
0
 async def get(self, *, page: int = 1):
     udocs, uucount, ucount = await pagination.paginate(
         domain.get_multi_user(domain_id=self.domain_id).sort([
             ('rank', 1)
         ]), page, self.USERS_PER_PAGE)
     for udoc in udocs:
         udoc['info'] = await user.get_by_uid(udoc['uid'])
     self.render('domain_ranking.html',
                 page=page,
                 uucount=uucount,
                 ucount=ucount,
                 udocs=udocs)
Ejemplo n.º 4
0
 async def get(self):
     rucounts = collections.defaultdict(int)
     async for dudoc in domain.get_multi_user(domain_id=self.domain_id,
                                              role={'$gte': ''},
                                              fields={
                                                  'uid': 1,
                                                  'role': 1
                                              }):
         if 'role' in dudoc:
             rucounts[dudoc['role']] += 1
     # built-in roles are displayed additionally so that we don't need to use get_all_roles() here
     roles = sorted(list(self.domain['roles'].keys()))
     self.render('domain_manage_role.html', rucounts=rucounts, roles=roles)
Ejemplo n.º 5
0
 async def get(self):
   uids = [self.domain['owner_uid']]
   rudocs = collections.defaultdict(list)
   async for dudoc in domain.get_multi_user(domain_id=self.domain_id,
                                            role={'$gte': ''},
                                            fields={'uid': 1, 'role': 1}):
     if 'role' in dudoc:
       uids.append(dudoc['uid'])
       rudocs[dudoc['role']].append(dudoc)
   roles = sorted(list(self.domain['roles'].keys()))
   roles_with_text = [(role, role) for role in roles]
   udict = await user.get_dict(uids)
   self.render('domain_manage_user.html', roles=roles, roles_with_text=roles_with_text,
               rudocs=rudocs, udict=udict)
Ejemplo n.º 6
0
Archivo: domain.py Proyecto: vijos/vj4
 async def get(self):
   uids = []
   rudocs = collections.defaultdict(list)
   async for dudoc in domain.get_multi_user(domain_id=self.domain_id,
                                            role={'$gte': ''},
                                            fields={'uid': 1, 'role': 1, 'display_name': 1}):
     if 'role' in dudoc:
       uids.append(dudoc['uid'])
       rudocs[dudoc['role']].append(dudoc)
   roles = sorted(list(domain.get_all_roles(self.domain).keys()))
   roles_with_text = [(role, role) for role in roles]
   udict = await user.get_dict(uids)
   self.render('domain_manage_user.html', roles=roles, roles_with_text=roles_with_text,
               rudocs=rudocs, udict=udict)
Ejemplo n.º 7
0
Archivo: rank.py Proyecto: vijos/vj4
async def run(domain_id: str, keyword: str='rp', rank_field: str='rank', level_field: str='level'):
  _logger.info('Ranking')
  dudocs = domain.get_multi_user(domain_id=domain_id, fields={'_id': 1, 'uid': 1, keyword: 1}) \
                 .sort(keyword, -1)
  last_dudoc = {keyword: None}
  rank = 0
  count = 0
  user_coll = db.coll('domain.user')
  user_bulk = user_coll.initialize_unordered_bulk_op()
  async for dudoc in dudocs:
    count += 1
    if keyword not in dudoc:
      dudoc[keyword] = None
    if dudoc[keyword] != last_dudoc[keyword]:
      rank = count
    user_bulk.find({'_id': dudoc['_id']}).update_one({'$set': {rank_field: rank}})
    last_dudoc = dudoc
    # progress
    if count % 1000 == 0:
      _logger.info('#{0}: Rank {1}'.format(count, rank))
  if count > 0:
    _logger.info('Committing')
    await user_bulk.execute()
  if rank == 0:
    _logger.warn('No one has {0}'.format(keyword))
    return
  if level_field:
    level_ranks = sorted([(level, round(int(count * perc / 100)))
                          for level, perc in builtin.LEVELS.items()],
                         key=lambda i: i[1], reverse=True)
    assert level_ranks[0][1] == count
    user_bulk = user_coll.initialize_unordered_bulk_op()
    for i in range(len(level_ranks) - 1):
      _logger.info('Updating users levelled {0}'.format(level_ranks[i][0]))
      (user_bulk.find({'domain_id': domain_id,
                       '$and': [{rank_field: {'$lte': level_ranks[i][1]}},
                                {rank_field: {'$gt': level_ranks[i + 1][1]}}]})
       .update({'$set': {level_field: level_ranks[i][0]}}))
    i = len(level_ranks) - 1
    _logger.info('Updating users levelled {0}'.format(level_ranks[i][0]))
    (user_bulk.find({'domain_id': domain_id, rank_field: {'$lte': level_ranks[i][1]}})
     .update({'$set': {level_field: level_ranks[i][0]}}))
    _logger.info('Committing')
    await user_bulk.execute()
Ejemplo n.º 8
0
async def run(domain_id: str,
              keyword: str = 'rp',
              rank_field: str = 'rank',
              level_field: str = 'level'):
    _logger.info('Ranking')
    dudocs = domain.get_multi_user(domain_id=domain_id, fields={'_id': 1, 'uid': 1, keyword: 1}) \
                   .sort(keyword, -1)
    last_dudoc = {keyword: None}
    rank = 0
    count = 0
    user_coll = db.coll('domain.user')
    user_bulk = user_coll.initialize_unordered_bulk_op()
    async for dudoc in dudocs:
        count += 1
        if keyword not in dudoc:
            dudoc[keyword] = None
        if dudoc[keyword] != last_dudoc[keyword]:
            rank = count
        user_bulk.find({
            '_id': dudoc['_id']
        }).update_one({'$set': {
            rank_field: rank
        }})
        last_dudoc = dudoc
        # progress
        if count % 1000 == 0:
            _logger.info('#{0}: Rank {1}'.format(count, rank))
    if count > 0:
        _logger.info('Committing')
        await user_bulk.execute()
    if rank == 0:
        _logger.warn('No one has {0}'.format(keyword))
        return
    if level_field:
        level_ranks = sorted([(level, round(int(count * perc / 100)))
                              for level, perc in builtin.LEVELS.items()],
                             key=lambda i: i[1],
                             reverse=True)
        assert level_ranks[0][1] == count
        user_bulk = user_coll.initialize_unordered_bulk_op()
        for i in range(len(level_ranks) - 1):
            _logger.info('Updating users levelled {0}'.format(
                level_ranks[i][0]))
            (user_bulk.find({
                'domain_id':
                domain_id,
                '$and': [{
                    rank_field: {
                        '$lte': level_ranks[i][1]
                    }
                }, {
                    rank_field: {
                        '$gt': level_ranks[i + 1][1]
                    }
                }]
            }).update({'$set': {
                level_field: level_ranks[i][0]
            }}))
        i = len(level_ranks) - 1
        _logger.info('Updating users levelled {0}'.format(level_ranks[i][0]))
        (user_bulk.find({
            'domain_id': domain_id,
            rank_field: {
                '$lte': level_ranks[i][1]
            }
        }).update({'$set': {
            level_field: level_ranks[i][0]
        }}))
        _logger.info('Committing')
        await user_bulk.execute()
Ejemplo n.º 9
0
 async def get(self, *, page: int=1):
   dudocs, dupcount, _ = await pagination.paginate(
       domain.get_multi_user(domain_id=self.domain_id, rp={'$gt': 0.0}).sort([('rank', 1)]),
       page, self.USERS_PER_PAGE)
   udict = await user.get_dict(dudoc['uid'] for dudoc in dudocs)
   self.render('ranking_main.html', page=page, dupcount=dupcount, dudocs=dudocs, udict=udict)