示例#1
0
文件: db.py 项目: ryde/EDMAN
    def doc(self, collection: str, oid: Union[ObjectId, str],
            query: Union[list, None], reference_delete=True) -> dict:
        """
        | refもしくはembのドキュメントを取得する
        | オプションでedman特有のデータ含んで取得することもできる

        :param str collection:
        :param oid:
        :type oid: ObjectId or str
        :param query:
        :type query: list or None
        :param bool reference_delete: default True
        :return: result
        :rtype: dict
        """

        oid = Utils.conv_objectid(oid)
        doc = self.db[collection].find_one({'_id': oid})
        if doc is None:
            sys.exit('ドキュメントが存在しません')

        # embの場合は指定階層のドキュメントを引き抜く
        # refの場合はdocの結果をそのまま入れる
        doc_result = self._get_emb_doc(doc,
                                       query) if query is not None else doc

        # クエリの指定によってはリストデータなども取得出てしまうため
        if not isinstance(doc_result, dict):
            sys.exit(f'指定されたクエリはドキュメントではありません {query}')

        result = Utils.reference_item_delete(
            doc_result, ('_id', self.parent, self.child, self.file_ref)
        ) if reference_delete else doc_result

        return result
示例#2
0
 def recursive(data: dict):
     # idとrefの削除
     for key, val in data.items():
         if isinstance(data[key], dict):
             recursive(Utils.reference_item_delete(data[key], refs))
         # リストデータは中身を型変換する
         elif isinstance(data[key], list) and Utils.item_literal_check(
                 data[key]):
             data[key] = [self._format_datetime(i) for i in data[key]]
         elif isinstance(data[key], list):
             for item in data[key]:
                 recursive(Utils.reference_item_delete(item, refs))
         else:
             try:  # 型変換
                 data[key] = self._format_datetime(data[key])
             except Exception as e:
                 sys.exit(e)
示例#3
0
 def test__reference_item_delete(self):
     # 正常系
     doc = {
         self.parent: ObjectId(),
         self.child: [ObjectId(), ObjectId()],
         self.file: [ObjectId(), ObjectId()],
         'param': 'OK'
     }
     actual = Utils.reference_item_delete(
         doc, ('_id', self.parent, self.child, self.file))
     expected = {'param': 'OK'}
     self.assertDictEqual(actual, expected)