Esempio n. 1
0
def show_query(cloud_name, type_name, qry):
    data = []
    fields = list(model.get_model(type_name).get_schema().fields.keys())
    with model.Session() as session:
        for r in query.Query({type_name: [qry]}).search(session, cloud_name):
            data.append([str(getattr(r, f)) for f in fields])
    return fields, data
Esempio n. 2
0
def show_query(cloud_name, type_name, qry):
    data = []
    fields = model.get_model(type_name).get_schema().fields.keys()
    with model.Session() as session:
        for r in query.Query({type_name: [qry]}).search(session, cloud_name):
            data.append([str(getattr(r, f)) for f in fields])
    return fields, data
Esempio n. 3
0
 def get_objects(self, model_name, exclude_objects=None):
     klass = model.get_model(model_name)
     with model.Session() as session:
         for obj in self.migration.query.search(session, self.src_cloud,
                                                klass):
             if (obj.find_link(self.dst_cloud) or
                     (exclude_objects is not None and
                      obj.object_id in exclude_objects)):
                 continue
             yield obj
Esempio n. 4
0
 def get_objects(self, model_name, exclude_objects=None):
     klass = model.get_model(model_name)
     with model.Session() as session:
         for obj in self.migration.query.search(session, self.src_cloud,
                                                klass):
             if (obj.find_link(self.dst_cloud) or
                     (exclude_objects is not None and
                      obj.object_id in exclude_objects)):
                 continue
             yield obj
Esempio n. 5
0
 def _deserialize(obj_dict):
     if not isinstance(obj_dict, dict):
         return obj_dict
     if 'type' not in obj_dict:
         return obj_dict
     try:
         model_cls = model.get_model(obj_dict['type'])
     except ImportError:
         return obj_dict
     if not issubclass(model_cls, model.Model):
         return obj_dict
     return model_cls.load(obj_dict['object'])
Esempio n. 6
0
 def _deserialize(obj_dict):
     if not isinstance(obj_dict, dict):
         return obj_dict
     if 'type' not in obj_dict:
         return obj_dict
     try:
         model_cls = model.get_model(obj_dict['type'])
     except ImportError:
         return obj_dict
     if not issubclass(model_cls, model.Model):
         return obj_dict
     return model_cls.load(obj_dict['object'])
Esempio n. 7
0
 def check_override_rules(self, data):
     overrides = data['overrides']
     for object_type, ovr in list(overrides.items()):
         try:
             model_cls = model.get_model(object_type)
         except ImportError:
             raise marshmallow.ValidationError(
                 'Invalid object type "{0}"'.format(object_type))
         schema = model_cls.schema_class()
         for attribute, _ in list(ovr.items()):
             if attribute not in schema.fields:
                 raise marshmallow.ValidationError(
                     'Invalid override rule: "{0}" schema don\'t have '
                     '"{1}" attribute.'.format(object_type, attribute))
Esempio n. 8
0
    def __init__(self, source, destination, objects, migration_flow_factories,
                 overrides, **kwargs):
        self.source = source
        self.destination = destination
        self.query = query.Query(objects)
        self.migration_flow_factories = {}

        # Migration logic can be extended through migration_flow_factories
        # migration parameter
        for factory_class in migration_flow_factories:
            migrated_class = factory_class.migrated_class
            self.migration_flow_factories[migrated_class] = factory_class

        self.overrides = {model.get_model(k): v for k, v in overrides.items()}

        super(Migration, self).__init__(objects=objects, **kwargs)
Esempio n. 9
0
    def __init__(self, query):
        """
        Accept dict as specified in configuration, compile all the JMESPath
        queries, and store it as internal immutable state.
        :param query: query dictionary
        """

        assert isinstance(query, dict)

        self.queries = {}
        for type_name, subqueries in query.items():
            cls = model.get_model(type_name)
            for subquery in subqueries:
                if isinstance(subquery, basestring):
                    subquery = jmespath.compile(subquery)
                else:
                    subquery = DictSubQuery(subquery)
                cls_queries = self.queries.setdefault(cls, [])
                cls_queries.append(subquery)
Esempio n. 10
0
    def __init__(self, query):
        """
        Accept dict as specified in configuration, compile all the JMESPath
        queries, and store it as internal immutable state.
        :param query: query dictionary
        """

        assert isinstance(query, dict)

        self.queries = {}
        for type_name, subqueries in list(query.items()):
            cls = model.get_model(type_name)
            for subquery in subqueries:
                if isinstance(subquery, str):
                    subquery = jmespath.compile(subquery)
                else:
                    subquery = DictSubQuery(subquery)
                cls_queries = self.queries.setdefault(cls, [])
                cls_queries.append(subquery)