Example #1
0
    def novabase_simplify(self, obj, skip_complex_processing=False):
        """Simplify a NovaBase object."""

        if not self.already_processed(obj):

            # obj.update_foreign_keys()
            key = self.get_cache_key(obj)

            if self.simple_cache.has_key(key):
                simplified_object = self.simple_cache[key]
            else:
                novabase_classname = str(obj.__class__.__name__)
                if novabase_classname == "LazyReference" or novabase_classname == "LazyValue":
                    novabase_classname = obj.resolve_model_name()
                if isinstance(obj, dict) and "novabase_classname" in obj:
                    novabase_classname = obj["novabase_classname"]
                tmp = {
                    "simplify_strategy": "novabase",
                    "tablename": obj.__tablename__,
                    "novabase_classname": novabase_classname,
                    "id": obj.id,
                    "_pid": extract_adress(obj)
                }
                if hasattr(tmp, "user_id"):
                    tmp = utils.merge_dicts(obj, {"user_id": obj.user_id})
                if hasattr(tmp, "project_id"):
                    tmp = utils.merge_dicts(tmp,
                                            {"project_id": obj.project_id})
                if not key in self.simple_cache:
                    self.simple_cache[key] = tmp
                    self.target_cache[key] = obj

                simplified_object = tmp

            if skip_complex_processing:
                return simplified_object

            key = self.get_cache_key(obj)
            if not key in self.simple_cache:
                self.simple_cache[key] = simplified_object
                self.target_cache[key] = obj

            complex_object = self.extract_complex_object(obj)

            metadata_class_name = novabase_classname
            complex_object[
                "_metadata_novabase_classname"] = metadata_class_name
            complex_object["_pid"] = extract_adress(obj)
            complex_object["_rid"] = str(self.request_uuid)

            if not key in self.complex_cache:
                self.complex_cache[key] = complex_object
        else:
            key = self.get_cache_key(obj)
            simplified_object = self.simple_cache[key]
        return simplified_object
Example #2
0
    def object_simplify(self, obj):
        """Convert this object to dictionnary that contains simplified values:
        every value is simplified according to the appropriate strategy."""

        result = obj
        do_deep_simplification = False
        is_basic_type = False

        try:
            if hasattr(obj, "__dict__") or obj.__class__.__name__ == "dict":
                do_deep_simplification = True
        except:
            is_basic_type = True

        if do_deep_simplification and not is_basic_type:

            novabase_classname = str(obj.__class__.__name__)
            if novabase_classname == "LazyReference" or novabase_classname == "LazyValue":
                novabase_classname = obj.resolve_model_name()
            if isinstance(obj, dict) and "novabase_classname" in obj:
                novabase_classname = obj["novabase_classname"]

            # Initialize fields to iterate
            if hasattr(obj, "reload_default_values"):
                obj.reload_default_values()

            result = self.extract_complex_object(obj)

            if utils.is_novabase(obj):
                key = self.get_cache_key(obj)
                if not key in self.complex_cache:
                    self.complex_cache[key] = result
                    self.simple_cache[key] = self.novabase_simplify(obj, True)
                    self.target_cache[key] = obj

                    metadata_class_name = novabase_classname
                    metadata_dict = {
                        "_metadata_novabase_classname": metadata_class_name,
                        "_pid": extract_adress(obj),
                        "_rid": str(self.request_uuid)
                    }
                    self.complex_cache[key] = utils.merge_dicts(
                        self.complex_cache[key], metadata_dict)
                    self.simple_cache[key] = utils.merge_dicts(
                        self.simple_cache[key], metadata_dict)
                    result = self.complex_cache[key]

        return result
Example #3
0
 def lock(self, name, ttl):
     self.unlock(name, only_expired=True)
     retry = 0
     request_uuid = ("%s_%s" % (self.uuid, name)).__hash__()
     while retry < self.retry_count:
         now = time.time()
         failed = False
         keys = map(lambda x: "%s_%s" % (x, name), self.lock_labels)
         lock_value = {"host": self.uuid, "start_date": now, "ttl": ttl, "request_uuid": request_uuid}
         processed_keys = []
         for key in keys:
             lock_value_with_key = merge_dicts(lock_value, {"key": key})
             result = self.redis_client.hsetnx("lock", key, json.dumps(lock_value_with_key))
             if result == 0:
                 failed = True
                 break
             else:
                 processed_keys += [key]
         if failed:
             self.redis_client.hdel("lock", processed_keys)
             retry += 1
             time.sleep(random.uniform(0.005, 0.010))
         else:
             return True
     return False
Example #4
0
 def query(self, *entities, **kwargs):
     from lib.rome.core.orm.query import Query
     return Query(*entities, **merge_dicts(kwargs, {"session": self}))
Example #5
0
 def query(self, *entities, **kwargs):
     from lib.rome.core.orm.query import Query
     return Query(*entities, **merge_dicts(kwargs, {"session": self}))