Example #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
Example #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)])
Example #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)])
Example #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
Example #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)
Example #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))
Example #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)])
Example #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)])
Example #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)])
Example #10
0
File: problem.py Project: 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)])
Example #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)])
Example #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']
Example #13
0
File: contest.py Project: 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)])
Example #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)])
Example #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))
Example #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)])
Example #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
Example #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
Example #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
Example #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
Example #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
Example #22
0
File: problem.py Project: 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
Example #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
Example #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
Example #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__()
Example #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
Example #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
Example #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)
Example #29
0
File: problem.py Project: vijos/vj4
def get_multi(*, fields=None, **kwargs):
  return document.get_multi(doc_type=document.TYPE_PROBLEM, fields=fields, **kwargs)
Example #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)
Example #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
Example #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)
Example #33
0
File: problem.py Project: 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']
Example #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)
Example #35
0
File: problem.py Project: 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)
Example #36
0
def get_multi(*, fields=None, **kwargs):
    return document.get_multi(doc_type=document.TYPE_PROBLEM,
                              fields=fields,
                              **kwargs)
Example #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)