Beispiel #1
0
    def data(self, values):
        """
        Set plain dictionary object which are suitable for OpenTMI backend
        :param values:
        :return:
        """
        data = remove_empty_from_dict(values)

        def has_attribute(ref, key):
            """
            Validates that attribute key has in ref
            :param ref: Object
            :param key: String
            :return: None
            :raise KeyError: if does not exists
            """
            if not hasattr(ref, key):
                raise KeyError("Key '{}' does not exists".format(key))

        def fnc(value, path):
            """
            mapper function
            :param value: Value to be set
            :param path: array of nested path
            :return:
            """
            ref = self
            for key in path[0:-1]:
                has_attribute(ref, key)
                ref = getattr(ref, key)
            key = path[-1]
            has_attribute(ref, key)
            setattr(ref, key, value)

        map_values_deep(data, fnc)
Beispiel #2
0
    def available_metrics_tuples(self):

        result = set()

        for entry in self.result.values():
            py_.map_values_deep(entry,
                                lambda __, path: result.add(tuple(path)))

        return sorted(result)
Beispiel #3
0
 def data(self):
     """
     Get plain Dictionary object which are suitable for OpenTMI backend
     :return: Dictionary containsi whole data
     """
     data = map_values_deep(
         self._data, lambda x: x.data if isinstance(x, BaseApi) else x)
     return remove_empty_from_dict(data)
Beispiel #4
0
    def put(self):
        data = request.get_json(force=True)

        objToPut = []

        for item in data['body']:
            filters = self.makeFilter(item)

            item = omit(item, ['_id', 'updated_at'])
            item = map_values_deep(item, updaterIds)

            objToPut.append({'filter': filters, 'data': item})

        return self.entity().batch_process(objToPut)
Beispiel #5
0
    def post(self):
        valid = syncValidate().validate()



        if valid:
            try:
                query = json.loads(valid['query'])
                body = json.loads(valid['body'])
                entity = valid['entity']
            except Exception as error:
                return FactoryInvalid.responseInvalid({'msg': str(error)}, 422)

            query = map_values_deep(query, updaterIds)
            return {
                'results':  Model(name=entity).updateMany(query, body)
            }
Beispiel #6
0
    def post(self):
        valid = aggregateValidate().validate()

        if valid:
            try:
                pipeline = json.loads(valid['pipeline'])
                entity = valid['entity']
            except Exception as error:
                return FactoryInvalid.responseInvalid({'msg': str(error)}, 422)

            if not has(pipeline, '[0].$match.roles\._id'):
                return FactoryInvalid.responseInvalid(
                    {
                        'msg':
                        'Must delimite $match which roles._id ($match {role.id})'
                    }, 422)

            args = map_values_deep(pipeline, updaterIds)
            return {'items': Aggregate(entity).pipeline(args)}
Beispiel #7
0
def test_map_values_deep(case, expected):
    assert _.map_values_deep(*case) == expected
Beispiel #8
0
def opts_update_from_env(opts):
    return map_values_deep(opts, lambda x: resolve_env(x, prefix='env/'))