Ejemplo n.º 1
0
async def get_list(domain_id: str,
                   uid: int = None,
                   fields=None,
                   skip: int = 0,
                   limit: int = 0):
    # TODO(iceboy): projection.
    pdocs = await (document.get_multi(domain_id,
                                      document.TYPE_PROBLEM,
                                      fields=fields).sort([
                                          ('doc_id', 1)
                                      ]).skip(skip).limit(limit).to_list(None))
    piter = iter(pdocs)
    if uid is not None:
        doc_ids = [pdoc['doc_id'] for pdoc in pdocs]
        # TODO(iceboy): projection.
        psdocs = (document.get_multi_status(domain_id,
                                            document.TYPE_PROBLEM,
                                            uid=uid,
                                            doc_id={
                                                '$in': doc_ids
                                            }).sort([('doc_id', 1)]))
        async for psdoc in psdocs:
            pdoc = next(piter)
            while pdoc['doc_id'] != psdoc['doc_id']:
                pdoc['psdoc'] = {}
                pdoc = next(piter)
            pdoc['psdoc'] = psdoc
    for rest in piter:
        rest['psdoc'] = {}
    return pdocs
Ejemplo n.º 2
0
def get_multi_reply(domain_id: str, did: document.convert_doc_id, *, fields=None):
  return document.get_multi(domain_id=domain_id,
                            doc_type=document.TYPE_DISCUSSION_REPLY,
                            parent_doc_type=document.TYPE_DISCUSSION,
                            parent_doc_id=did,
                            fields=fields) \
                 .sort([('doc_id', -1)])
Ejemplo n.º 3
0
def get_multi(domain_id: str, fields=None, **kwargs):
    # TODO(twd2): projection.
    return document.get_multi(domain_id=domain_id,
                              doc_type=document.TYPE_CONTEST,
                              fields=fields,
                              **kwargs) \
                   .sort([('doc_id', -1)])
Ejemplo n.º 4
0
async def get_list(domain_id: str, fields=None):
    # TODO(iceboy): projection, pagination.
    tdocs = await (document.get_multi(domain_id,
                                      document.TYPE_CONTEST,
                                      fields=fields).sort([('doc_id', -1)
                                                           ]).to_list(None))
    return tdocs
Ejemplo n.º 5
0
async def update_status_by_tid(domain_id: str, uid: int, tid: objectid.ObjectId):
  tdocs = document.get_multi(domain_id, document.TYPE_TRAINING, require_tids=tid,
                             fields=['doc_id', 'pids', 'require_tids'])
  futs = []
  async for tdoc in tdocs:
    futs.append(_update_status(domain_id, tdoc, uid, 'done_tids', tid))
  await asyncio.gather(*futs)
Ejemplo n.º 6
0
async def get_list_solution(domain_id: str, pid: document.convert_doc_id, fields=None):
  # TODO(iceboy): projection, pagination.
  return await (document.get_multi(domain_id, document.TYPE_PROBLEM_SOLUTION,
                                   parent_doc_type=document.TYPE_PROBLEM, parent_doc_id=pid,
                                   fields=fields)
                        .sort([('vote', -1), ('doc_id', -1)])
                        .to_list(None))
Ejemplo n.º 7
0
def get_multi_reply(domain_id: str, did: document.convert_doc_id, *, fields=None):
  return document.get_multi(domain_id=domain_id,
                            doc_type=document.TYPE_DISCUSSION_REPLY,
                            parent_doc_type=document.TYPE_DISCUSSION,
                            parent_doc_id=did,
                            fields=fields) \
                 .sort([('doc_id', -1)])
Ejemplo n.º 8
0
def get_multi(domain_id: str, *, fields=None, **kwargs):
  return document.get_multi(domain_id=domain_id,
                            doc_type=document.TYPE_DISCUSSION,
                            fields=fields,
                            **kwargs) \
                 .sort([('update_at', -1),
                        ('doc_id', -1)])
Ejemplo n.º 9
0
def get_multi(domain_id: str, *, fields=None, **kwargs):
    return document.get_multi(domain_id=domain_id,
                              doc_type=document.TYPE_DISCUSSION,
                              fields=fields,
                              **kwargs) \
                   .sort([('update_at', -1),
                          ('doc_id', -1)])
Ejemplo n.º 10
0
Archivo: problem.py Proyecto: vijos/vj4
def get_multi_solution(domain_id: str, pid: document.convert_doc_id, fields=None):
  return document.get_multi(domain_id=domain_id,
                            doc_type=document.TYPE_PROBLEM_SOLUTION,
                            parent_doc_type=document.TYPE_PROBLEM,
                            parent_doc_id=pid,
                            fields=fields) \
                 .sort([('vote', -1), ('doc_id', -1)])
Ejemplo n.º 11
0
def get_multi_solution(domain_id: str, pid: document.convert_doc_id, fields=None):
  return document.get_multi(domain_id=domain_id,
                            doc_type=document.TYPE_PROBLEM_SOLUTION,
                            parent_doc_type=document.TYPE_PROBLEM,
                            parent_doc_id=pid,
                            fields=fields) \
                 .sort([('vote', -1), ('doc_id', -1)])
Ejemplo n.º 12
0
async def get_random_id(domain_id: str, **kwargs):
    pdocs = document.get_multi(domain_id=domain_id,
                               doc_type=document.TYPE_PROBLEM,
                               **kwargs)
    pcount = await pdocs.count()
    if pcount:
        async for pdoc in pdocs.skip(random.randrange(pcount)).limit(1):
            return pdoc['doc_id']
Ejemplo n.º 13
0
Archivo: contest.py Proyecto: vijos/vj4
def get_multi(domain_id: str, doc_type: int, fields=None, **kwargs):
  # TODO(twd2): projection.
  if doc_type not in [document.TYPE_CONTEST, document.TYPE_HOMEWORK]:
    raise error.InvalidArgumentError('doc_type')
  return document.get_multi(domain_id=domain_id,
                            doc_type=doc_type,
                            fields=fields,
                            **kwargs) \
                 .sort([('doc_id', -1)])
Ejemplo n.º 14
0
def get_multi(domain_id: str, *, fields=None, **kwargs):
    return document.get_multi(domain_id=domain_id,
                              doc_type=document.TYPE_DISCUSSION,
                              fields=fields,
                              **kwargs) \
                   .sort([("highlight",-1),
                          ('update_at', -1),
                          ('generation_time', -1),
                          ('num_replies', -1)])
Ejemplo n.º 15
0
async def get_list_solution(domain_id: str, pid: document.convert_doc_id,
                            fields=None, skip: int=0, limit: int=0):
  return await (document.get_multi(domain_id, document.TYPE_PROBLEM_SOLUTION,
                                   parent_doc_type=document.TYPE_PROBLEM, parent_doc_id=pid,
                                   fields=fields)
                        .sort([('vote', -1), ('doc_id', -1)])
                        .skip(skip)
                        .limit(limit)
                        .to_list(None))
Ejemplo n.º 16
0
def get_multi(domain_id: str, doc_type: int, fields=None, **kwargs):
    # TODO(twd2): projection.
    if doc_type not in [document.TYPE_CONTEST, document.TYPE_HOMEWORK]:
        raise error.InvalidArgumentError('doc_type')
    return document.get_multi(domain_id=domain_id,
                              doc_type=doc_type,
                              fields=fields,
                              **kwargs) \
                   .sort([('doc_id', -1)])
Ejemplo n.º 17
0
async def get_list(domain_id: str, *, fields=None, skip: int=0, limit: int=0):
  # TODO(twd2): projection.
  ddocs = await (document.get_multi(domain_id, document.TYPE_DISCUSSION, fields=fields)
                         .sort([('doc_id', -1)])
                         .skip(skip)
                         .limit(limit)
                         .to_list(None))
  await asyncio.gather(user.attach_udocs(ddocs, 'owner_uid'),
                       attach_vnodes(ddocs, domain_id, 'parent_doc_id'))
  return ddocs
Ejemplo n.º 18
0
async def get_vnode_and_list_and_count_for_node(domain_id: str,
                                                node_or_pid: document.convert_doc_id, *,
                                                fields=None, skip: int = 0, limit: int = 0):
  vnode = await get_vnode(domain_id, node_or_pid)
  count_future = asyncio.ensure_future(
    document.get_multi(domain_id, document.TYPE_DISCUSSION,
                       parent_doc_type=vnode['doc_type'],
                       parent_doc_id=vnode['doc_id']).count())
  # TODO(twd2): projection.
  ddocs = await (document.get_multi(domain_id, document.TYPE_DISCUSSION,
                                    parent_doc_type=vnode['doc_type'],
                                    parent_doc_id=vnode['doc_id'],
                                    fields=fields)
                 .sort([('doc_id', -1)])
                 .skip(skip)
                 .limit(limit)
                 .to_list(None))
  await asyncio.gather(user.attach_udocs(ddocs, 'owner_uid'),
                       attach_vnodes(ddocs, domain_id, 'parent_doc_id'))
  return vnode, ddocs, await count_future
Ejemplo n.º 19
0
async def get_list_reply(domain_id: str, did: document.convert_doc_id, *, fields=None):
  drdocs = await (document.get_multi(domain_id, document.TYPE_DISCUSSION_REPLY,
                                     parent_doc_type=document.TYPE_DISCUSSION, parent_doc_id=did,
                                     fields=fields)
                          .sort([('doc_id', -1)])
                          .to_list(None))
  drdocs_with_reply = list(drdocs)
  for drdoc in drdocs:
    if 'reply' in drdoc:
      drdocs_with_reply.extend(drdoc['reply'])
  await user.attach_udocs(drdocs_with_reply, 'owner_uid')
  return drdocs
Ejemplo n.º 20
0
async def get_dict_multi_domain(pdom_and_ids, *, fields=None):
  query = {'$or': []}
  key_func = lambda e: e[0]
  for domain_id, ptuples in itertools.groupby(sorted(set(pdom_and_ids), key=key_func),
                                              key=key_func):
    query['$or'].append({'domain_id': domain_id, 'doc_type': document.TYPE_PROBLEM,
                         'doc_id': {'$in': [e[1] for e in ptuples]}})
  result = dict()
  if not query['$or']:
    return result
  async for pdoc in document.get_multi(**query, fields=fields):
    result[(pdoc['domain_id'], pdoc['doc_id'])] = pdoc
  return result
Ejemplo n.º 21
0
async def get_list_by_user(domain_id: str, uid: int, *, fields=None):
  tsdocs = document.get_multi_status(domain_id, document.TYPE_TRAINING,
                                     uid=uid, done=True, fields=['doc_id'])
  done_tids = []
  async for tsdoc in tsdocs:
    done_tids.append(tsdoc['doc_id'])
  # TODO(iceboy): pagination, projection.
  tdocs = await (document.get_multi(domain_id, document.TYPE_TRAINING,
                                    require_tids={'$not': {'$elemMatch': {'$nin': done_tids}}},
                                    fields=fields)
                 .sort([('doc_id', 1)])
                 .to_list(None))
  return tdocs
Ejemplo n.º 22
0
Archivo: problem.py Proyecto: vijos/vj4
async def get_dict_multi_domain(pdom_and_ids, *, fields=None):
  query = {'$or': []}
  key_func = lambda e: e[0]
  for domain_id, ptuples in itertools.groupby(sorted(set(pdom_and_ids), key=key_func),
                                              key=key_func):
    query['$or'].append({'domain_id': domain_id, 'doc_type': document.TYPE_PROBLEM,
                         'doc_id': {'$in': [e[1] for e in ptuples]}})
  result = dict()
  if not query['$or']:
    return result
  async for pdoc in document.get_multi(**query, fields=fields):
    result[(pdoc['domain_id'], pdoc['doc_id'])] = pdoc
  return result
Ejemplo n.º 23
0
async def get_list(domain_id: str,
                   *,
                   fields=None,
                   skip: int = 0,
                   limit: int = 0):
    # TODO(twd2): projection.
    ddocs = await (document.get_multi(domain_id,
                                      document.TYPE_DISCUSSION,
                                      fields=fields).sort([
                                          ('doc_id', -1)
                                      ]).skip(skip).limit(limit).to_list(None))
    await asyncio.gather(user.attach_udocs(ddocs, 'owner_uid'),
                         attach_vnodes(ddocs, domain_id, 'parent_doc_id'))
    return ddocs
Ejemplo n.º 24
0
async def get_vnode_and_list_and_count_for_node(
        domain_id: str,
        node_or_pid: document.convert_doc_id,
        *,
        fields=None,
        skip: int = 0,
        limit: int = 0):
    vnode = await get_vnode(domain_id, node_or_pid)
    count_future = asyncio.ensure_future(
        document.get_multi(domain_id,
                           document.TYPE_DISCUSSION,
                           parent_doc_type=vnode['doc_type'],
                           parent_doc_id=vnode['doc_id']).count())
    # TODO(twd2): projection.
    ddocs = await (document.get_multi(domain_id,
                                      document.TYPE_DISCUSSION,
                                      parent_doc_type=vnode['doc_type'],
                                      parent_doc_id=vnode['doc_id'],
                                      fields=fields).sort([
                                          ('doc_id', -1)
                                      ]).skip(skip).limit(limit).to_list(None))
    await asyncio.gather(user.attach_udocs(ddocs, 'owner_uid'),
                         attach_vnodes(ddocs, domain_id, 'parent_doc_id'))
    return vnode, ddocs, await count_future
Ejemplo n.º 25
0
 async def test_add_get(self):
   doc_id = await document.add(DOMAIN_ID, CONTENT, OWNER_UID, DOC_TYPE)
   doc = await document.get(DOMAIN_ID, DOC_TYPE, doc_id)
   self.assertEqual(doc['_id'], doc_id)
   self.assertEqual(doc['content'], CONTENT)
   self.assertEqual(doc['owner_uid'], OWNER_UID)
   self.assertEqual(doc['domain_id'], DOMAIN_ID)
   self.assertEqual(doc['doc_type'], DOC_TYPE)
   self.assertEqual(doc['doc_id'], doc_id)
   docs = document.get_multi(domain_id=DOMAIN_ID, doc_type=DOC_TYPE, fields=['doc_id', 'title'])
   doc = await docs.__anext__()
   self.assertEqual(doc['doc_id'], doc_id)
   self.assertFalse('content' in doc)
   with self.assertRaises(StopAsyncIteration):
     await docs.__anext__()
Ejemplo n.º 26
0
async def get_list_reply(domain_id: str,
                         did: document.convert_doc_id,
                         *,
                         fields=None):
    drdocs = await (document.get_multi(
        domain_id,
        document.TYPE_DISCUSSION_REPLY,
        parent_doc_type=document.TYPE_DISCUSSION,
        parent_doc_id=did,
        fields=fields).sort([('doc_id', -1)]).to_list(None))
    drdocs_with_reply = list(drdocs)
    for drdoc in drdocs:
        if 'reply' in drdoc:
            drdocs_with_reply.extend(drdoc['reply'])
    await user.attach_udocs(drdocs_with_reply, 'owner_uid')
    return drdocs
Ejemplo n.º 27
0
async def get_list(domain_id: str, uid: int=None, fields=None, skip: int=0, limit: int=0):
  # TODO(iceboy): projection.
  pdocs = await (document.get_multi(domain_id, document.TYPE_PROBLEM, fields=fields)
                         .sort([('doc_id', 1)])
                         .skip(skip)
                         .limit(limit)
                         .to_list(None))
  piter = iter(pdocs)
  if uid is not None:
    doc_ids = [pdoc['doc_id'] for pdoc in pdocs]
    # TODO(iceboy): projection.
    psdocs = document.get_multi_status(domain_id, document.TYPE_PROBLEM,
                                       uid=uid, doc_id={'$in': doc_ids})
    async for psdoc in psdocs:
      pdoc = next(piter)
      while pdoc['doc_id'] < psdoc['doc_id']:
        pdoc['psdoc'] = {}
        pdoc = next(piter)
      pdoc['psdoc'] = psdoc
  for rest in piter:
    rest['psdoc'] = {}
  return pdocs
Ejemplo n.º 28
0
def get_multi(fields=None, **kwargs):
    return document.get_multi(domain_id=STORE_DOMAIN_ID,
                              doc_type=document.TYPE_USERFILE,
                              fields=fields,
                              **kwargs)
Ejemplo n.º 29
0
Archivo: problem.py Proyecto: vijos/vj4
def get_multi(*, fields=None, **kwargs):
  return document.get_multi(doc_type=document.TYPE_PROBLEM, fields=fields, **kwargs)
Ejemplo n.º 30
0
def get_multi(domain_id: str, *, fields=None, **kwargs):
  return document.get_multi(domain_id=domain_id, doc_type=document.TYPE_TRAINING,
                            fields=fields, **kwargs)
Ejemplo n.º 31
0
async def get_list(domain_id: str, fields=None):
  # TODO(iceboy): projection, pagination.
  tdocs = await (document.get_multi(domain_id, document.TYPE_CONTEST, fields=fields)
                 .sort([('doc_id', -1)])
                 .to_list(None))
  return tdocs
Ejemplo n.º 32
0
def get_multi(domain_id: str, *, fields=None, **kwargs):
  return document.get_multi(domain_id=domain_id, doc_type=document.TYPE_TRAINING,
                            fields=fields, **kwargs)
Ejemplo n.º 33
0
Archivo: problem.py Proyecto: vijos/vj4
async def get_random_id(domain_id: str, **kwargs):
  pdocs = document.get_multi(domain_id=domain_id, doc_type=document.TYPE_PROBLEM, **kwargs)
  pcount = await pdocs.count()
  if pcount:
    async for pdoc in pdocs.skip(random.randrange(pcount)).limit(1):
      return pdoc['doc_id']
Ejemplo n.º 34
0
def get_multi_solution_by_uid(domain_id: str, uid: int, fields=None):
    return document.get_multi(domain_id=domain_id,
                              doc_type=document.TYPE_PROBLEM_SOLUTION,
                              owner_uid=uid,
                              fields=fields)
Ejemplo n.º 35
0
Archivo: problem.py Proyecto: vijos/vj4
def get_multi_solution_by_uid(domain_id: str, uid: int, fields=None):
  return document.get_multi(domain_id=domain_id,
                            doc_type=document.TYPE_PROBLEM_SOLUTION,
                            owner_uid=uid,
                            fields=fields)
Ejemplo n.º 36
0
def get_multi(*, fields=None, **kwargs):
    return document.get_multi(doc_type=document.TYPE_PROBLEM,
                              fields=fields,
                              **kwargs)
Ejemplo n.º 37
0
def get_multi(fields=None, **kwargs):
  return document.get_multi(domain_id=STORE_DOMAIN_ID, doc_type=document.TYPE_USERFILE,
                            fields=fields, **kwargs)