@@ -161,7 +161,7 @@ def __init__(
161161 collection_name = "atoms" ,
162162 username = None ,
163163 password = None ,
164- authSource = "admin" ,
164+ auth_source = "admin" ,
165165 uri_mode = False ,
166166 ** kwargs ,
167167 ):
@@ -175,31 +175,31 @@ def __init__(
175175 collection_name ,
176176 username ,
177177 password ,
178- authSource ,
178+ auth_source ,
179179 kwargs ,
180180 )
181181 )
182182
183183 if uri_mode :
184- self .client = MongoClient (host = host , authSource = authSource )
184+ self .client = MongoClient (host = host , authSource = auth_source )
185185 else :
186186 self .client = MongoClient (
187187 host = host ,
188188 port = port ,
189189 username = username ,
190190 password = password ,
191- authSource = authSource ,
191+ authSource = auth_source ,
192192 )
193193
194194 try :
195195 info = self .client .server_info () # Forces a call.
196196 logger .info (f"DB info: { info } " )
197197
198- except pymongo .errors .OperationFailure :
199- raise abcd .errors .AuthenticationError ()
198+ except pymongo .errors .OperationFailure as err :
199+ raise abcd .errors .AuthenticationError () from err
200200
201- except pymongo .errors .ServerSelectionTimeoutError :
202- raise abcd .errors .TimeoutError ()
201+ except pymongo .errors .ServerSelectionTimeoutError as err :
202+ raise abcd .errors .TimeoutError () from err
203203
204204 self .db = self .client [db_name ]
205205 self .collection = self .db [collection_name ]
@@ -258,8 +258,7 @@ def upload(self, file: Path, extra_infos=None, store_calc=True):
258258 def get_items (self , query = None ):
259259 # TODO: better method for aggregations
260260 query = parser (query )
261- for dct in self .db .atoms .find (query ):
262- yield dct
261+ yield from self .db .atoms .find (query )
263262
264263 def get_atoms (self , query = None ):
265264 query = parser (query )
@@ -320,18 +319,18 @@ def properties(self, query=None):
320319 return properties
321320
322321 def get_type_of_property (self , prop , category ):
323- # TODO: Probably it would be nicer to store the type info in the database from the beginning.
322+ # TODO: Store the type info in the database from the beginning?
324323 atoms = self .db .atoms .find_one ({prop : {"$exists" : True }})
325324 data = atoms [prop ]
326325
327326 if category == "arrays" :
328- if type (data [0 ]) == list :
327+ if isinstance (data [0 ], list ) :
329328 return f"array({ map_types [type (data [0 ][0 ])]} , N x { len (data [0 ])} )"
330329 return f"vector({ map_types [type (data [0 ])]} , N)"
331330
332- if type (data ) == list :
333- if type (data [0 ]) == list :
334- if type (data [0 ][0 ]) == list :
331+ if isinstance (data , list ) :
332+ if isinstance (data [0 ], list ) :
333+ if isinstance (data [0 ][0 ], list ) :
335334 return "list(list(...)"
336335 return f"array({ map_types [type (data [0 ][0 ])]} )"
337336 return f"vector({ map_types [type (data [0 ])]} )"
@@ -397,7 +396,8 @@ def add_property(self, data, query=None):
397396
398397 def rename_property (self , name , new_name , query = None ):
399398 logger .info (f"rename: query={ query } , old={ name } , new={ new_name } " )
400- # TODO name in derived.info_keys OR name in derived.arrays_keys OR name in derived.derived_keys
399+ # TODO name in derived.info_keys OR name in derived.arrays_keys
400+ # OR name in derived.derived_keys
401401 self .collection .update_many (
402402 parser (query ), {"$push" : {"derived.info_keys" : new_name }}
403403 )
@@ -407,15 +407,6 @@ def rename_property(self, name, new_name, query=None):
407407 {"$pull" : {"derived.info_keys" : name }, "$rename" : {name : new_name }},
408408 )
409409
410- # self.collection.update_many(
411- # parser(query + ['arrays.{}'.format(name)]),
412- # {'$push': {'derived.arrays_keys': new_name}})
413- #
414- # self.collection.update_many(
415- # parser(query + ['arrays.{}'.format(name)]),
416- # {'$pull': {'derived.arrays_keys': name},
417- # '$rename': {'arrays.{}'.format(name): 'arrays.{}'.format(new_name)}})
418-
419410 def delete_property (self , name , query = None ):
420411 logger .info (f"delete: query={ name } , porperty={ query } " )
421412
@@ -435,7 +426,7 @@ def exec(self, code, query=None):
435426 # TODO: Separate python environment with its own packages loaded
436427
437428 for dct in self .get_items (query ):
438- atoms = AtomsModel (self .collection , dct )
429+ AtomsModel (self .collection , dct )
439430 exec (code )
440431
441432 def __repr__ (self ):
@@ -483,30 +474,30 @@ def histogram(name, data, **kwargs):
483474 print (f"Mixed type error of the { name } property!" )
484475 return None
485476
486- if ptype == float :
477+ if isinstance ( data [ 0 ], float ) :
487478 bins = kwargs .get ("bins" , 10 )
488479 return _hist_float (name , data , bins )
489480
490- if ptype == int :
481+ if isinstance ( data [ 0 ], int ) :
491482 bins = kwargs .get ("bins" , 10 )
492483 return _hist_int (name , data , bins )
493484
494- if ptype == str :
485+ if isinstance ( data [ 0 ], str ) :
495486 return _hist_str (name , data , ** kwargs )
496487
497- if ptype == datetime :
488+ if isinstance ( data [ 0 ], datetime ) :
498489 bins = kwargs .get ("bins" , 10 )
499490 return _hist_date (name , data , bins )
500491
501492 print (f"{ name } : Histogram for list of { type (data [0 ])} types are not supported!" )
502493 logger .info (
503494 f"{ name } : Histogram for list of { type (data [0 ])} types are not supported!"
504495 )
505-
506- else :
507- logger .info (f"{ name } : Histogram for { type (data )} types are not supported!" )
508496 return None
509497
498+ logger .info (f"{ name } : Histogram for { type (data )} types are not supported!" )
499+ return None
500+
510501
511502def _hist_float (name , data , bins = 10 ):
512503 data = np .array (data )
@@ -596,39 +587,7 @@ def _hist_str(name, data, bins=10, truncate=20):
596587
597588
598589if __name__ == "__main__" :
599- # import json
600- # from ase.io import iread
601- # from pprint import pprint
602- # from server.styles.myjson import JSONEncoderOld, JSONDecoderOld, JSONEncoder
603-
604- print ("hello" )
605590 db = MongoDatabase (username = "mongoadmin" , password = "secret" )
606591 print (db .info ())
607592 print (db .count ())
608-
609593 print (db .hist ("uploaded" ))
610-
611- # for atoms in iread('../../tutorials/data/bcc_bulk_54_expanded_2_high.xyz', index=slice(None)):
612- # # print(at)
613- # atoms.calc.results['forces'] = atoms.arrays['force']
614- # # at.arrays['force'] = None
615- #
616- # json_data = json.dumps(atoms, cls=JSONEncoderOld)
617- # print(json_data)
618- #
619- # atom_dict = json.loads(json_data, cls=JSONDecoderOld)
620- # print(atom_dict)
621- #
622- # print(atoms == atom_dict)
623- #
624- # with JSONEncoder() as encoder:
625- # data = encoder.encode(atoms)
626- #
627- # print(data)
628- #
629- # with DictEncoder() as encoder:
630- # data = encoder.encode(atoms)
631- #
632- # pprint(data)
633- #
634- # db.collection.insert_one(DictEncoder().encode(atoms))
0 commit comments