edman package¶
Submodules¶
edman.config module¶
- class edman.config.Config[source]¶
Bases:
object
このパッケージを利用したシステム上での共通の定義
デフォルトのままをおすすめします
定義を変更した場合、このパッケージを利用している他のシステムと、データ交換ができなくなりますDBにデータが入っている状態で、この定義を変更した場合、データが破壊される可能性がありますそれでも変更したい場合は、単一、もしくは同じシステム内で定義を統一することその場合、他のシステムとデータ交換したくなった場合は独自に変換スクリプトを作成してください- child = '_ed_child'¶
- date = '#date'¶
- file = '_ed_file'¶
- file_attachment = '_ed_attachment'¶
- fs_chunks = 'fs.chunks'¶
- fs_files = 'fs.files'¶
- parent = '_ed_parent'¶
edman.convert module¶
- class edman.convert.Convert[source]¶
Bases:
object
研究データをEdman用にコンバートするクラス
- dict_to_edman(raw_data: dict, mode='ref') list [source]¶
- json辞書からedman用に変換するembはobjectIdを付与したり、辞書からリストに変換している
- Parameters:
raw_data (dict) – JSONを辞書にしたデータ
mode (str) – ref(reference) or emb(embedded) データ構造の選択肢
- Returns:
インサート用のリストデータ
- Return type:
list
- emb(data: dict) dict [source]¶
- エンベデッドモードでedman用の変換を行う主に日付の変換update処理でも使用している
- Parameters:
data (dict)
- Returns:
- Return type:
dict
edman.db module¶
- class edman.db.DB(con=None)[source]¶
Bases:
object
DB関連クラスMongoDBへの接続や各種チェック、インサート、作成や破棄など- bson_type(bson_data: dict, search_filters=None) dict [source]¶
DB内のデータをJSONに従って型変更をする DBにあってJSONにないキーは無視 スペルミスも含め型一覧にない型を指定した時はstrに変換 | | JSON例: | { | “コレクション名”:{ | “キー”: “変更する型”, | “キー2”: “変更する型”, | }, | “コレクション名2”:{ | “キー”: [“変更する型”,”変更する型”], | } | }
値がリストの時・双方どちらかがリストでない時は無視・JSON側が単一、DB側が複数の時は単一の型で全て変換するJSON:[‘str’]DB:[‘1’,’2’,’3’]・JSON側よりDB側が少ない時はJSON側は切り捨てJSON:[‘str’、’int’, ‘int’]DB:[‘1’,2]・DB側よりJSON側が少ない時は、リストの最後の型で繰り返すJSON:[‘str’、’int’]DB:[‘1’,2,3,4,5]型一覧:[int,float,bool,str,datetime]search_filtersを指定すると該当するドキュメントのみ変換するsearch_filters = {‘collection_name’:{‘_id’:ObjectId(‘OBJECTID’)}}- Parameters:
bson_data (dict)
search_filters – default None
- Returns:
result
- Return type:
dict
- create_role(db_name: str, role_name: str, role='readWrite') None [source]¶
ロールを作成
admin権限のみ使える LDAPユーザ用 admin DBにロールを作成、role_nameはグループのdn
- Parameters:
db_name (str)
role_name (str)
role (str) – default ‘readWrite’
- Returns:
- create_role_for_dbuser(db_name: str, role_name: str, role='readWrite') None [source]¶
ロールを作成
admin権限のみ使える ユーザDBにロールを作成
- Parameters:
db_name (str)
role_name (str)
role (str) – default ‘readWrite’
- Returns:
- create_user_and_role(db_name: str, user_name: str, pwd: str, role='readWrite', role_name='edman') None [source]¶
指定のロールとユーザを作成 DB内部ユーザのみ対象 DB内部ユーザを作成するメソッドなので、各ユーザのDBにロールとユーザ情報を作成する admin権限のみ使える
- Parameters:
db_name (str)
user_name (str)
pwd (str)
role (str) – default ‘readWrite’
role_name (str) – default ‘edman’
- Returns:
- delete(oid: str | ObjectId, collection: str, structure: str) bool [source]¶
- ドキュメントを削除する指定のoidを含む下位のドキュメントを全削除refで親が存在する時は親のchildリストから指定のoidを取り除く
- Parameters:
oid (str or ObjectId)
collection (str)
structure (str)
- Returns:
- Return type:
bool
- delete_db(delete_db_name: str, admin_db='admin') None [source]¶
DBの削除
- Parameters:
delete_db_name (str)
admin_db (str)
- Returns:
- static delete_reference(emb_data: dict, reference: tuple) dict [source]¶
ドキュメント内の特定の項目(リファレンスも)を削除する
- Parameters:
emb_data (dict or list)
reference (tuple)
- Returns:
- Return type:
dict
- delete_role(role_name: str, target_db: str) None [source]¶
指定されたDB内のロールの削除 admin権限のみ
- Parameters:
role_name (str)
target_db (str)
- Returns:
- delete_user_and_role(user_name: str, db_name: str, role_name='edman', admin_name='admin') None [source]¶
ユーザ削除 adminのみ実行可能
- Parameters:
user_name (str)
db_name (str)
role_name (str) – default ‘edman’
admin_name (str) – default ‘admin’
- Returns:
- doc(collection: str, oid: ObjectId | str, query: list | None, reference_delete=True) dict | None [source]¶
- refもしくはembのドキュメントを取得するオプションでedman特有のデータ含んで取得することもできる
- Parameters:
collection (str)
oid (ObjectId or str)
query (list or None)
reference_delete (bool) – default True
- Returns:
result
- Return type:
dict or None
- find_collection_from_objectid(oid: str | ObjectId) str | None [source]¶
- DB内のコレクションから指定のObjectIDを探し、所属しているコレクションを返すDBに負荷がかかるので使用は注意が必要
- Parameters:
oid (ObjectId or str)
- Returns:
collection
- Return type:
str or None
- get_child(self_doc: dict, depth: int) dict [source]¶
- 子のドキュメントを取得depthで深度を設定し、階層分取得する
- Parameters:
self_doc (dict)
depth (int)
- Returns:
- Return type:
dict
- get_child_all(self_doc: dict) dict [source]¶
子のドキュメントを再帰で全部取得
- Parameters:
self_doc (dict)
- Returns:
- Return type:
dict
- get_collections(coll_filter=None, gf_filter=True) list [source]¶
コレクションを取得
- Parameters:
coll_filter (dict or None)
gf_filter (bool) – default True
- Returns:
result
- Return type:
list
- property get_db¶
プロパティ
- Returns:
DB接続インスタンス(self.db)
- get_ref_depth(doc: dict, reference_key: str) int [source]¶
要素への階層の数を取得する
- Parameters:
doc (dict)
reference_key (str) – DBRefが格納されているキー名 例:_ed_parent, _ed_child
- Returns:
- Return type:
int
- get_reference_point(self_result: dict) dict [source]¶
- ドキュメントに親や子のリファレンス項目名が含まれているか調べる片方しかない場合は末端(親、または一番下の子)となる両方含まれていればこのドキュメントには親と子が存在する両方含まれていなければ、単独のドキュメント
- Parameters:
self_result (dict)
- Returns:
- Return type:
dict
- get_root_dbref(doc: dict) None | DBRef [source]¶
ref形式のドキュメントのルートのDBRef要素を取得する ※root要素内にはparentのdbref要素は存在しないので、上から2階層目のparentのdbrefを取得する :param dict doc: :return: parent_ref :rtype: None or DBRef
- get_structure(collection: str, oid: ObjectId) str [source]¶
対象のドキュメントの構造を取得する
- Parameters:
collection (str)
oid (ObjectId)
- Returns:
result
- Return type:
str
- insert(insert_data: list) list[dict[str, list[ObjectId]]] [source]¶
インサート実行
- Parameters:
insert_data (list) – バルクインサート対応のリストデータ
- Returns:
results
- Return type:
list
- item_delete(collection: str, oid: ObjectId | str, delete_key: str, query: list | None) bool [source]¶
ドキュメントの項目を削除する
- Parameters:
collection (str)
oid (str or ObjectId)
delete_key (str)
query (list or None)
- Returns:
- Return type:
bool
- loop_exclusion_key_and_ref(collection: str, key: str, exclusion: tuple) dict [source]¶
対象のコレクション内のドキュメントを全て、指定のキーの要素を抜き出してrefに変換してDBに入れる また、取り出したデータ内の指定の要素を除外することもできる
- Parameters:
collection (str) – 変換対象のコレクション
key (str) – refに変換開始する対象のキー
exclusion (tuple) – 除外するキーの設定
- Returns:
- Return type:
dict
- static pack_list(types: list, target: list) list [source]¶
typesが少ない時に、最後の値で足りない分を埋める 例 types = [str, int, int, str] target = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’] 出力は [str, int, int, str, str]
types = [int] target = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’] 出力は [int, int, int, int, int]
- Parameters:
types
target
- Returns:
types
- Return type:
list
edman.exceptions module¶
- exception edman.exceptions.EdmanDbConnectError(message)[source]¶
Bases:
EdmanError
DB接続に関するエラー
- exception edman.exceptions.EdmanDbProcessError(message)[source]¶
Bases:
EdmanError
DB実行処理に関するエラー
- exception edman.exceptions.EdmanFormatError(message)[source]¶
Bases:
EdmanError
Edmanの名称や決まりごとに関するエラー
- exception edman.exceptions.EdmanInternalError(message)[source]¶
Bases:
EdmanError
Edmanの処理に関するエラー
edman.file module¶
- class edman.file.File(db=None)[source]¶
Bases:
object
ファイル取扱クラス
- delete(delete_oid: ObjectId, collection: str, oid: ObjectId | str, structure: str, query=None) bool [source]¶
該当のoidをファイルリファレンスから削除し、GridFSからファイルを削除
- Parameters:
delete_oid (ObjectId)
collection (str)
oid (str)
structure (str)
query (list or None)
- Returns:
- Return type:
bool
- download(file_oid: list[ObjectId], path: str | Path) bool [source]¶
Gridfsからデータをダウンロードし、ファイルに保存
- Parameters:
file_oid (list)
path (str or Path)
- Returns:
result
- Return type:
bool
- static file_gen(files: Tuple[Path]) Iterator [source]¶
ファイルタプルからファイルを取り出すジェネレータ
- Parameters:
files (tuple) – 中身はPathオブジェクト
- Returns:
ファイル名と内容(str)のタプル
- Return type:
tuple
- file_list_attachment(doc: dict, files_oid: List[ObjectId]) dict [source]¶
辞書データにファイルのoidを挿入する docにself.file_refがあれば、追加する処理 oidが重複していないものだけ追加 ファイルが同じでも別のoidが与えられていれば追加される
- Parameters:
doc (dict)
files_oid (list) – ObjectIdのリスト
- Returns:
doc
- Return type:
dict
- file_list_replace(doc: dict, files_oid: list) dict [source]¶
ドキュメントのファイルリファレンスを入力されたリストに置き換える もし空リストならファイルリファレンス自体を削除する すでにファイルリファレンスデータが存在していることを前提としているため、 docにファイルリファレンスデータが無かった場合は例外を発生する
- Parameters:
doc (dict)
files_oid (list)
- Returns:
doc
- Return type:
dict
- static generate_file_path_dict(files_list: list, p: Path) dict[str, Path] [source]¶
files_listから添付ファイルの存在確認をし、添付ファイルのファイルパスを値とする辞書を作成
- Parameters:
files_list (list)
p (Path)
- Returns:
result
- Return type:
dict
- generate_upload_list(data: dict) list[str] [source]¶
json辞書からキーfiles_dir_keyの値であるリストを抽出し、新しいリストにする
- Parameters:
data (dict)
- Returns:
result
- Return type:
list
- static generate_zip_filename(filename=None) str [source]¶
‘%Y%m%d%H%M%S’.zipのファイル名を生成 任意の文字列を指定すると, ‘%Y%m%d%H%M%S’ + 任意の文字列 + .zipを生成
- Parameters:
filename (any) – strにキャストされる
- Returns:
- Return type:
str
- get_file_names(collection: str, oid: ObjectId | str, structure: str, query=None) dict [source]¶
ファイル一覧を取得 ファイルが存在しなければ空の辞書を返す
- Parameters:
collection (str)
oid (str)
structure (str)
query (list or None) – embの時だけ必要. refの時はNone
- Returns:
result
- Return type:
dict
- get_file_ref(doc: dict, structure: str, query=None) list [source]¶
ファイルリファレンス情報を取得
- Parameters:
doc (dict)
structure (str)
query
- Type:
list or None
- Returns:
files_list
- Return type:
list
- get_fileref_and_generate_dl_list(docs: dict, attach_key: str) tuple[dict, dict] [source]¶
- json出力用の辞書内のファイルリファレンスをファイルパス文字列リストに置き換える
例: {“_ed_file”:[ObjectId(‘file_oid_1’),ObjectId(‘file_oid_2’)]} ↓ {“_ed_attachment”:[“document_oid/sample.jpg”,”document_oid/sample2.jpg”]}
- 同時にダウンロード処理用の辞書を作成する
{ObjectId(‘document_oid’):[ObjectId(‘file_oid_1’),ObjectId(‘file_oid_2’)]}
- Parameters:
docs (dict)
attach_key (str)
- Returns:
- Return type:
tuple
- grid_in(files: Tuple[Path, ...]) list[ObjectId] [source]¶
Gridfsへ複数のデータをアップロード
- Parameters:
files (tuple)
- Returns:
inserted
- Return type:
list
- json_rewrite(data: dict, files_dict: dict) dict [source]¶
元のjsonのファイルパスをinsert済みのファイルのoidに書き換える
- Parameters:
data (dict)
files_dict (dict)
- Returns:
- Return type:
dict
- upload(collection: str, oid: ObjectId | str, file_path: Tuple[Path], structure: str, query=None) bool [source]¶
ドキュメントにファイルリファレンスを追加する ファイルのインサート処理なども行う :param str collection: :param oid: :type oid: ObjectId or str :param tuple file_path:ドキュメントに添付する単数or複数のファイルパス :param str structure: :param query: :type query: list or None :return: :rtype: bool
- upload_zipped(zip_file: IO) dict | None [source]¶
zipファイルを解凍し、ファイルをgridfsに格納、結果のoidを含めたjsonを返す
- Parameters:
zip_file (IO) – アップロードされたzipファイル
- Returns:
- Return type:
dict
- zipped_contents(downloads: dict, json_tree_file_name: str, encoded_json: bytes, p: Path) str [source]¶
jsonと添付ファイルを含むzipファイルを生成 zipファイル内部にjson_tree_file_name.jsonのjsonファイルを含む 添付ファイルがなく、jsonファイルだけ取得したい場合はzipped_jsonを利用
- Parameters:
downloads (dict)
json_tree_file_name (str)
encoded_json (bytes)
p (Path)
- Return type:
str
- Returns:
- static zipped_json(encoded_json: bytes, json_tree_file_name: str, p: Path) Path [source]¶
zipファイル内部にjson_tree_file_name.jsonのjsonファイルを含む 添付ファイルがなく、jsonファイルだけ取得したい場合に使用する
- Parameters:
encoded_json (bytes) – json文字列としてダンプしたものを指定の文字コードでバイト列に変換したもの
json_tree_file_name (str) – zipファイル内に配置するjsonファイルの名前
p (Path) – ファイルを保存するディレクトリのパス
:return:zip_filepath :rtype:Path
edman.json_manager module¶
- class edman.json_manager.GetJsonStructure(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]¶
Bases:
Enum
- all_doc = 2¶
- manual_select = 1¶
- uni_doc = 3¶
edman.search module¶
- class edman.search.Search(db=None)[source]¶
Bases:
object
検索関連クラス
- doc2(collection: str, oid: ObjectId | str, exclude_keys=None) dict [source]¶
指定するドキュメントを取得する doc()の置き換え版 リファクタリング完了後にdoc()を削除する embは対象外
- Parameters:
collection (str)
oid (ObjectId)
exclude_keys (None or list) – e.g. [‘_id’, ‘parent’, ‘child’, ‘file’]
- Returns:
result
- Return type:
dict
- find(collection: str, query: dict, parent_depth=0, child_depth=0, exclusion=None) dict [source]¶
検索用メソッド
- Parameters:
collection (str) – 対象コレクション
query (dict) – 検索クエリ
parent_depth (int) – 親の指定深度
child_depth (int) – 子の指定深度
:param None or list exclusion:除外するリファレンスキー 例 [‘_ed_file’] :return: result 親 + 自分 + 子の階層構造となった辞書データ :rtype: dict
- generate_json_dict(result_dict: dict, include=None) dict [source]¶
- edman依存の項目を処理する::
_idとrefの削除 型をJSONに合わせる
process_data_derived_from_mongodb()の置き換え版 process_data_derived_from_mongodb()は廃止予定
- Parameters:
result_dict (dict)
include (List or None) – e.g. [‘_id’, self.parent, self.child, self.file]
- Returns:
result_dict
- Return type:
dict
- get_tree(collection: str, oid: ObjectId, include=None) dict [source]¶
oidで指定するドキュメントが所属するツリーを全て取得する
- Parameters:
collection (str)
oid (ObjectId)
include (None or list) – e.g. [‘_id’, ‘parent’, ‘child’, ‘file’]
- Returns:
result
- Return type:
dict
- process_data_derived_from_mongodb(result_dict: dict, exclusion=None) dict [source]¶
- MongoDB依存の項目を処理する::
_idやrefの削除 型をJSONに合わせる
廃止予定 代替 generate_json_dict()
- Parameters:
result_dict (dict)
exclusion (List or None) – default [‘_id’, self.parent, self.child, self.file]
- Returns:
result_dict
- Return type:
dict
edman.utils module¶
- class edman.utils.Utils[source]¶
Bases:
object
各クラス共通の静的メソッドインスタンス化禁止- static child_combine(rec_result: list) Generator [source]¶
- 同じコレクションのデータをリストでまとめるジェネレータコレクション:ドキュメントのリストを作成{collection:[{key:value},{key:value}…]}
- Parameters:
rec_result (list)
- Returns:
- Return type:
Generator
- static collection_name_check(collection_name: str) bool [source]¶
- MongoDBの命名規則チェック(コレクション名) | # $ None(null) ‘’ system.最初がアンスコか文字mongoの制約の他に頭文字に#もNGコレクション名空間の最大長は、データベース名、ドット(.)区切り文字およびコレクション名(つまり <database>.<collection>)を合わせて120バイトを超えないことただし、子のメソッド利用時はDB名を取得するタイミングではないため、文字数のチェックは行えないことを留意すること
- Parameters:
collection_name (str)
- Returns:
- Return type:
bool
- static conv_objectid(oid: str | ObjectId) ObjectId [source]¶
- 文字列だった場合ObjectIdを変換する元々ObjectIdならそのまま
- Parameters:
oid (ObjectId or str)
- Returns:
result
- Return type:
ObjectId
- static doc_traverse(doc: dict, target_keys: list, query: list, f: Callable) dict [source]¶
- ドキュメントを走査し、クエリで指定した階層に指定の関数オブジェクトを適応関数適応後のドキュメントを返す
- Parameters:
doc (dict)
target_keys (list) – コールバック関数の適応対象の辞書のキーのリスト
query (list)
f (Callable) – コールバック関数
- Returns:
doc
- Return type:
dict
- static field_name_check(field_name: str) bool [source]¶
- MongoDBの命名規則チェック(フィールド名)void, None(Null), 文字列先頭に($ .)は使用不可
- Parameters:
field_name (str)
- Returns:
- Return type:
bool
- static item_delete(doc: dict, del_keys: tuple) dict [source]¶
特定のキーの項目を削除 _id、親と子のリファレンス、ファイルリファレンスなど
- Parameters:
doc (dict)
del_keys (tuple)
- Returns:
item
- Return type:
dict
- static item_literal_check(list_child: dict | list) bool [source]¶
- リストデータ内にリテラルやオブジェクトのデータだけあればTrueそれ以外はFalseOKパターンlist_child = [1,2,3]list_child = [1,2,objectId()]NGパターンlist_child = {‘A’:’B’}list_child = [‘A’:[1,2,3]]list_child = [1,2,{‘A’:’B’}]
- Parameters:
list_child (dict or list)
- Returns:
- Return type:
bool
- static query_check(query: list, doc: dict) bool [source]¶
クエリーが正しいか評価
- Parameters:
query (list)
doc (dict)
- Returns:
result
- Return type:
bool