maestro-server/data-app

View on GitHub
app/services/ruler.py

Summary

Maintainability
A
0 mins
Test Coverage
F
34%
import re
import datetime
from app.repository.model import Model


class Ruler(object):
    @staticmethod
    def searchID(key, rule):
        id = re.search('(^_id)|(\._id)', key)

        if id:
            return Ruler.makeObjectId(key, rule)

        return rule

    @staticmethod
    def searchAt(key, rule):
        time = re.search('_at', key)

        if time and rule:
            rule = Ruler.enumSearchAt(rule)

        return rule

    @staticmethod   
    def enumSearchAt(rule):
        if isinstance(rule, dict):
            for k, v in rule.items():
                rule[k] = Ruler.makeDatetime(v)

        if isinstance(rule, str):
            rule = Ruler.makeDatetime(rule)

        return rule

    @staticmethod
    def makeDatetime(rule):
        if type(rule) is str:
            return datetime.datetime.strptime(
                                              rule[:19] + "Z",
                                              "%Y-%m-%dT%H:%M:%SZ")

    @staticmethod
    def makeObjectId(key, rule):
        if isinstance(rule, list):
            arr = map(lambda x: Ruler.searchID(key, x), rule)
            return list(arr)

        return Model.castObjectId(rule)

    @staticmethod
    def translateLists(key, rule):
        if isinstance(rule, list):
            rule = {'$in': rule}

        return rule

    @staticmethod
    def setV(source, batch):
        return source

    @staticmethod
    def switch(source, batch, default=None):
        return batch.get(source, default)