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

exclusion_key(doc: dict, ex_keys: tuple) dict[source]

指定のキーの要素を除外する

Parameters:
  • doc (dict)

  • ex_keys (tuple)

Returns:

output

Return type:

dict

static pullout_key(data: dict, pull_key: str) dict[source]

最初に発見した指定のキーの要素を、子要素を含めて抜き出す

Parameters:
  • data (dict)

  • pull_key (str)

Returns:

output

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_collections()[source]

DB内のコレクション及びドキュメントを全て削除する grid.fsのコレクションも含む

Returns:

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

structure(collection: str, oid: ObjectId, structure_mode: str, new_collection: str) list[source]

構造をrefからembへ、またはembからrefへ変更する

Parameters:
  • collection (str)

  • oid (ObjectId)

  • structure_mode (str)

  • new_collection (str)

Returns:

structured_result

Return type:

list

update(collection: str, oid: str | ObjectId, amend_data: dict, structure: str) bool[source]

修正データを用いてDBデータをアップデート

Parameters:
  • collection (str)

  • oid (str or ObjectId)

  • amend_data (dict)

  • structure (str)

Returns:

Return type:

bool

edman.exceptions module

exception edman.exceptions.EdmanDbConnectError(message)[source]

Bases: EdmanError

DB接続に関するエラー

exception edman.exceptions.EdmanDbProcessError(message)[source]

Bases: EdmanError

DB実行処理に関するエラー

exception edman.exceptions.EdmanError(message)[source]

Bases: Exception

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

fs_delete(oids: list) None[source]

fsからファイル削除

Parameters:

oids (list)

Returns:

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
static members()[source]
uni_doc = 3
class edman.json_manager.JsonManager[source]

Bases: object

JSONファイルの取扱いクラス

static save(report_data: dict, path: str | Path, name: str, date=False) None[source]

JSONファイルに書き出し

Parameters:
  • report_data (dict) – 対象の辞書データ

  • path (str or Path) – ファイルパス

  • name (str) – ファイル名

  • date (bool) – 日付 ファイル名先頭に追加

Returns:

None

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 generate_jms_query(query)[source]
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
それ以外はFalse

OKパターン
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

static to_datetime(s: str) datetime | str[source]
日付もしくは日付時間をdatetimeオブジェクトに変換
日付や日付時間にならないものは文字列に変換
Parameters:

s (str)

Returns:

Return type:

datetime or str

static type_cast_conv(datatype: str) Any[source]

データタイプに合わせて型を選択する

Parameters:

datatype (str)

Returns:

Return type:

Any

Module contents