Browse Source

New load method

prieto 8 years ago
parent
commit
30b939f158
1 changed files with 45 additions and 46 deletions
  1. 45
    46
      lodel/leapi/leobject.py

+ 45
- 46
lodel/leapi/leobject.py View File

@@ -494,20 +494,10 @@ raised when trying to import Datasource"
494 494
             raise LeApiDataCheckError("Datas consistency checks fails", err_l)
495 495
     
496 496
     ## @brief Add a new instance of LeObject
497
-    # @param datas dict : the values to be inserted
498
-    # @param classname str : The class name
499 497
     # @return a new uid en case of success, False otherwise
500 498
     @classmethod
501 499
     def insert(cls, datas):
502
-        if classname is not None:
503
-            class_is = cls.name2class(classname)
504
-            if not class_is:
505
-                raise LeApiErrors("Error when inserting",{'error':ValueError("The class '%s' was not found"%classname)})
506
-            else:
507
-                target_cls = classname
508
-        else:
509
-            target_cls = cls.__name__
510
-        query = LeInsertQuery(target_cls)
500
+        query = LeInsertQuery(cls.__name__)
511 501
         return query.execute(datas)
512 502
 
513 503
     ## @brief Update an instance of LeObject
@@ -552,38 +542,48 @@ raised when trying to import Datasource"
552 542
     #@param uids a list: lists of (fieldname, fieldvalue), with fieldname in cls._uids
553 543
     #@returns the number of deleted items
554 544
     @classmethod
555
-    def delete(cls, uids):
545
+    def delete_bundle(cls, query_filters):
556 546
         deleted = 0
557
-        for uid in uids:
558
-            if len(uid) != len(cls._uid):
559
-                raise AttributeError("Wrong number in uid's list, expected %d got %d" % (len(cls._uid), len(uid)))
560
-            filters = list()
561
-            for field in uid:
562
-                if field not in cls._uid:
563
-                    raise AttributeError("%s is not a uid or a part of uid for %s class" % (field, cls.__name__))
564
-                filters.append((field, uid[field]))
565
-            try:
566
-                query = LeDeleteQuery(cls.__name__, filters)
567
-            except Exception as err:
568
-                raise err
547
+        try:
548
+            query = LeDeleteQuery(cls.__name__, query_filters)
549
+        except Exception as err:
550
+            raise err
569 551
                 
570
-            try:
571
-                result = query.execute()
572
-            except Exception as err:
573
-                raise err
574
-            deleted += result
552
+        try:
553
+            result = query.execute()
554
+        except Exception as err:
555
+            raise err
556
+        deleted += result
575 557
         return deleted
576 558
             
577 559
     
578 560
     ## @brief Load an instance of LeObject
579
-    #@param uid
561
+    #@param uid a list of tuple (uid_field_nane, value) ou a single value
580 562
     #@return an instance of a subclass of LeObject
581 563
     @classmethod
582
-    def load(cls, uid):
583
-        uids = cls._uid
564
+    def load(cls, uid_tuples):
584 565
         query_filter = list()
585
-        for uid in uids:
586
-            query_filter.append((uid, '=', cls.data(uid)))
566
+        uids = cls._uid
567
+        if uids.isinstance(tuple):
568
+            if not uid_tuples.isinstance(list):
569
+                raise AttributeError ("In %s:load : uid must be a list of tuple" % cls.__name__)
570
+            elif len(uid_tuples) != len(uids):
571
+                raise AttributeError ("In %s:load : must have %d uid fields" % len(uids))
572
+            for fieldname, fieldvalue in uid_tuples:
573
+                if fieldname in uids:
574
+                    dhdl = cls.data_handler(fieldname)
575
+                    if dhdl.check_data_value(fieldvalue)[1] is None:
576
+                        query_filter.append((fieldname, '=', fieldvalue))
577
+                    else:
578
+                        raise AttributeError("n %s:load :%s not a valid value for %s" % (fieldvalue, fieldname))
579
+                else:
580
+                    raise AttributeError ("In %s:load :%s not a uid field for class %s" % (fieldname, cls.__name__))
581
+        else:
582
+            dhdl = cls.data_handler(uids)
583
+            if dhdl.check_data_value(uid_tuples)[1] is None:
584
+                query_filter.append((uids, '=', uid_tuples))
585
+            else:
586
+                raise AttributeError("n %s:load :%s not a valid value for %s" % (uid_tuples, uids))
587 587
         query = LeGetQuery(cls.__name__, query_filter, limit = 1)
588 588
         try:
589 589
             result=query.execute()
@@ -604,20 +604,16 @@ raised when trying to import Datasource"
604 604
     #@param group list : A list of field names or tuple (FIELDNAME,[ASC | DESC])
605 605
     #@param limit int : The maximum number of returned results
606 606
     #@param offset int : offset
607
+    #@param Inst
607 608
     #@return a list of items (lists of (fieldname, fieldvalue))
608 609
     @classmethod
609
-    def get(cls, query_filters, field_list=None, order=None, group=None, limit=None, offset=0, classname = None):
610
-        if classname is not None:
611
-            class_is = cls.name2class(classname)
612
-            if not class_is:
613
-                raise LeApiErrors("Error when inserting",{'error':ValueError("The class '%s' was not found"%classname)})
614
-            else:
615
-                target_cls = classname
616
-        else:
617
-            target_cls = cls.__name__
618
-                
610
+    def get(cls, query_filters, field_list=None, order=None, group=None, limit=None, offset=0):
611
+        for uid in cls._uids:
612
+            if uid not in field_list:
613
+                raise AttributeError("In %s:get : Cannot instanciate a LeObject without it's identifier" % cls.__name__)
614
+        
619 615
         try:
620
-            query = LeGetQuery(target_class, query_filter, field_list = field_list, order = order, group = group, limit = limit, offset = offset)
616
+            query = LeGetQuery(cls.__name__, query_filter, field_list = field_list, order = order, group = group, limit = limit, offset = offset)
621 617
         except ValueError as err:
622 618
             raise err
623 619
             
@@ -628,9 +624,12 @@ raised when trying to import Datasource"
628 624
         
629 625
         objects = list()
630 626
         for res in result:
631
-            objects.append(cls.name2class(res[CLASS_ID_FIELDNAME])(res))
627
+            inst = cls.name2class(res[CLASS_ID_FIELDNAME])(res)
628
+            objects.append(inst)
632 629
         
633 630
         return objects
631
+    
632
+
634 633
 
635 634
         
636 635
         

Loading…
Cancel
Save