• Python как создать метод для метода динамически?

    ckpunT
    @ckpunT Автор вопроса
    Немного развил свою мысль.
    def clause(func):
        def func_wrapper(*args, **kwargs):
            operation = " " + func.__name__.replace('_', '') + " "
            if args:
                if len(args) == 1:
                    a = operation + "".join(str(i) for i in args)
                else:
                    a = "(" + operation.join(str(i) for i in args) + ")"
            else:
                a = ""
            if kwargs:
                clause = []
                for k, v in kwargs.items():
                    op = '='
                    if str(v).find('%') >= 0:
                        op = 'like'
                    clause.append("%s %s '%s'" % (k, op, v))
                if len(kwargs) == 1:
                    k = operation + "".join(clause)
                else:
                    k = "(" + operation.join(clause) + ")"
            else:
                k = ""
            return a + k
        return func_wrapper
    
    class ORM():
        def __init__(self, table):
            self.table = table
        def select(self, *args):
            if args:
                list_cols = ", ".join(args)
            else:
                list_cols = "*"
            self.sql = "select %s from %s" % (list_cols, self.table)
            return self
        def insert(self, **kwargs):
            if not kwargs:
                raise
            else:
                col = ", ".join(kwargs.keys())
                val = ", ".join(["'{}'"] * len(kwargs))
                sql = "insert into %s (%s) values (%s)" % (self.table, col, val)
                self.sql = sql.format(*kwargs.values())
                return self
        def update(self, **kwargs):
            if not kwargs:
                raise
            else:
                upd = ", ".join(["%s='%s'" % (k, v) for k, v in kwargs.items()])
                self.sql = "update %s set %s" % (self.table, upd)
                return self
        def delete(self):
            self.sql = "delete from %s" % (self.table)
            return self
        def __getattr__(self, name):
            def wrap(*args, **kwargs):
                exp = " " + name.replace('_', ' ') + " "
                if args:
                    self.sql = self.sql + exp + ", ".join(str(i) for i in args)
                elif kwargs:
                    clause = []
                    for k, v in kwargs.items():
                        op = '='
                        if str(v).find('%') >= 0:
                            op = 'like'
                        clause.append("%s %s '%s'" % (k, op, v))
                    self.sql = self.sql + exp + " ".join(clause)
                return self
            return wrap
        def __repr__(self):
            s = self.sql[:]
            self.sql = ''
            return s
    
    
    @clause
    def _and(*args, **kwargs):
        pass
    
    @clause
    def _or(*args, **kwargs):
        pass
    
    def _in(**kwargs):
        for k, v in kwargs.items():
            return k + " in (" + ", ".join(str(i) for i in v) + ")"

    >>> t = ORM('test')
    >>> t.select('id', 'count(id) as cid', 'name', 'age').where(_or(_and(name='alex%', age=25), _and(name='%bob', age='27'), _in(age=range(25,35)))).group_by('cid', 'name', 'age').order_by('cid', 'name', 'age').limit(10)
    select id, count(id) as cid, name, age from test where ((age = '25' and name like 'alex%') or (age = '27' and name like '%bob') or age in (25, 26, 27, 28, 29, 30, 31, 32, 33, 34)) group by cid, name, age order by cid, name, age limit 10
    Ответ написан
    Комментировать
  • Как узнать индекс цвета в индексированной палитре цветов?

    http://dronov.blogspot.ru/2012/04/blog-post_3448.html
    В фотошопе если выбрать пипеткой нужный цвет, то он будет в палитре отображаться в rgb, cmyk и web

    Ответ написан
    Комментировать
  • Как узнать индекс цвета в индексированной палитре цветов?

    Плохо ковыряли фотошоп. getcolor.ru первая ссылка в гугле

    Ответ написан
  • Как контролировать трафик при наличии спутникового и мобильного интернета?

    Называется это резервирование канала, советую спросить у гуглояндекса и почитать по этой ссылке вместе с коментами.

    Ответ написан
    Комментировать
  • Как организовать раздачу инетрнета с ноутбука на Wifi роутер?

    Стандартная схема: кабель от провайдера -> роутер(wi-fi) -> планшеты, айфоны и прочие wi-fi устройства. Я так понимаю, что Вы от кого то получаете по вафле интернет на ноут и хотите его пустить далее. Тогда проще будет настроить на Вашем роутере режим репитера, если он конечно там есть. Либо на ноуте настроить режим "мост" с вафли на езернет и по кабелю подключить роутер(мазохизм в чистом виде).
    Ваш свисток умеет Ad-Hoc / Infrastructure mode, так что можно добиться раздачи инета непосредственно с него.

    Ответ написан
    Комментировать
  • Как покупать одежду и обувь на Amazon.com напрямую и без посредников?

    Подучить английский язык, зарегистрироваться на amazon.com, заполнив в последующем свой профиль. Знать конкретно, что Вы ищите, и в строке поиска на английском языке написать искомое. Открыть сайт translate.google.com и сложные слова из размерной таблицы переводить в нем. Отыскать не вытянутый сантиметр и измерять свои параметры согласно таблице, с помощью калькулятора, если вдруг таблица указана только в дюймах, перевести дюймы в сантиметры. Подучить английский и на понравившемся товаре нажать "add to cart". Далее оформление и оплата заказа с помощью Visa. Ну и самое долгое "Почта России", но это уже без Вашего участия.

    Ответ написан
    Комментировать