• Диапазон в SQLAlchemy?

    @pcdesign
    Можно вот так попробовать:
    number = Column(db.Enum('1', '2', '3'), unique=False)  # И т.д.  Ну или list(range(1,11)) засунуть.


    Ну то есть жестко задать с помощью Enum возможные значения.
    Ответ написан
    Комментировать
  • Как в python проверить дату, что она входит в диапазон: текущий квартал или предыдущий квартал +25 дней?

    @pcdesign Автор вопроса
    Накидал как-то так.
    Вроде работает.
    from datetime_periods import period
    from dateutil.parser import parse
    import math
    import datetime
    
    current_date = datetime.datetime.now()
    
    
    def get_num_quarter(ref):  # Возвращает номер квартала
        return math.ceil(ref.month/3.)
    
    
    def start_end_quarter(ref):  # Возвращает первый и последний день квартала
        return period(ref, 'quarter')
    
    
    def previous_quarter(ref):  # Возвращает 1-ый день предыдущего квартала
        quarter = (ref.month - 1) // 3
        prev_quarter = (quarter - 1) % 4
        return datetime.datetime(ref.year if quarter > 0
                                 else ref.year-1, prev_quarter*3+1, 1)
    
    dates = "2015-07-10 2015-03-07 2015-06-25 2015-04-21 2014-07-30".split(" ")
    
    for d in dates:
        date_obj = parse(d)
        # Проверяем входит ли дата в текущий квартал
        if (current_date.year == date_obj.year
                and get_num_quarter(date_obj) == get_num_quarter(current_date)):
            print(d + " - Входит. Т.к. дата относится к текущему кварталу")
            continue
    
        # Проверяем условие: предыдущий кв. + 25 дней
        prev_date = previous_quarter(current_date)
        start = start_end_quarter(prev_date)[0]
        end = start_end_quarter(prev_date)[1] + datetime.timedelta(days=25)
        if start < date_obj and current_date < end:
            print(d + " - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились")
        else:
            print(d + " - Не входит в диапазон")


    Результат:
    2015-07-10 - Входит. Т.к. дата относится к текущему кварталу
    2015-03-07 - Не входит в диапазон
    2015-06-25 - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились
    2015-04-21 - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились
    2014-07-30 - Не входит в диапазон
    Ответ написан
    Комментировать
  • Python, web. Есть ли что-то между CGI и Flask?

    @pcdesign
    Flask - это микрофреймворк. Почему это он громоздкий?

    Это если бы ради "веб-мордочки с двумя полями и тремя кнопками" решили бы городить огород с Django, тогда замечание о громоздкости было бы уместно.
    Ответ написан
    Комментировать
  • Как установить модуль Gtk3 для Perl из CPAN?

    @pcdesign
    sudo apt-get install libgtk3-perl

    Может так?
    Ответ написан
    Комментировать
  • Как отредактировать множество текстовых файлов?

    @pcdesign
    perl -pi~ -e 's/foo/bar/g' *.html

    Ну вот например однострочник.
    Подменяет foo на bar во всех файлах с расширением .html.

    Ваша задача решается в 3 однострочника.

    P.S. И этот однострочник так же сохраняет оригиналы файлов с именами html~.
    Ответ написан
    Комментировать
  • Как узнать ip клиента?

    @pcdesign
    from flask import Flask,   request
    @app.route('/ip/')
    def get_user_ip():
        ip = request.headers.get('X-Real-IP')
        return ip
    Ответ написан
  • Как сделать вычитание двух файлов в perl?

    @pcdesign
    Если я правильно понял вопрос.
    Пусть у нас есть два файла 1.txt и 2.txt
    cat 1.txt                                                                                                                                   
    100
    2323
    2390238
    32322323
    9002


    cat 2.txt 
    34
    4343
    434
    2390238
    32322323
    9002


    С таким содержанием.
    Теперь их можно сравнить и вычислить разницу таким образом:

    #!/usr/bin/env perl 
    use strict;
    use warnings;
    use utf8;
    use File::Slurp;
    use Array::Utils qw(:all);
    
    my @arr1 = read_file( '1.txt', chomp => 1 );
    my @arr2 = read_file( '2.txt', chomp => 1 );
    
    # Получилось 2 массива. 
    # Теперь сравниваем их c помощью use Array::Utils qw(:all);
    # И вычисляем разницу
    # Получаем элементы из массива @аrr1, которые не входят в массив @arr2
    
    
    my @minus = array_minus( @arr1, @arr2 );
    
    for my $i (@minus){
            print "$i \n";
    }


    Результат работы:
    100 
    2323


    Теперь можно то что находится в массиве @minus записать в файл да и все.
    Ответ написан
    1 комментарий
  • Ошибка invalid syntax, почему появляется?

    @pcdesign
    Мне кажется здесь у вас ломается:
    >>> x = ‘Spam!’
      File "<stdin>", line 1
        x = ‘Spam!’
                ^
    SyntaxError: invalid character in identifier


    Надо использовать кавычки типа " или '
    Ответ написан
    Комментировать
  • Как в Perl писать в Named Pipe?

    @pcdesign
    #!/usr/bin/perl -w
    while (1) {
        open(FIFO, "> \\\\.\\pipe\\mypipe")
            or die "writing: $!\n";
        print FIFO "The current time is ", scalar(localtime), "\n";
        close FIFO;
        sleep 1;
    }


    или
    IO::Pipe
    Ответ написан
    4 комментария
  • Как Dial научить использовать Follow me?

    @pcdesign Автор вопроса
    Изобрел велосипед.
    Написал модуль на перле, который обращается к MySQL базе и вытаскивает оттуда необходимую инфу:
    номер мобильного follow me и текущий трак.

    #===============================================================================
    #
    #         FILE: followme.pm
    #
    #  DESCRIPTION: Модуль, который выдает текущий транк на исход, а так же выдает
    #                               номер мобильного в follow me
    #
    #        FILES: ---
    #         BUGS: ---
    #        NOTES: ---
    #       AUTHOR: YOUR NAME (),
    # ORGANIZATION:
    #      VERSION: 1.0
    #      CREATED: 04/22/2015 11:58:36 AM
    #     REVISION: ---
    #===============================================================================
    
    use strict;
    use warnings;
    use DBI;
    
    package Followme;
    
    our $dbh_ast = 
    DBI->connect( 'dbi:mysql:dbname=asterisk;host=localhost', 'dbuser', 'pass' ) or die;
    
    sub new {
        my ( $class, %self ) = @_;
        bless \%self, $class;
        return \%self;
    }
    
    sub get_followme {
        my $self = shift;
        my $ext  = $self->{ext};
        my $sql  = 'SELECT `grplist`  FROM `findmefollow` WHERE `grpnum` 
                               LIKE ? AND `grplist` LIKE ?';
        my ($followme_phone) = $dbh_ast->selectrow_array( $sql, undef, $ext, $ext . '-%' );
        if ($followme_phone) {
            $self->{followme_phone} = substr $followme_phone, 5, -1;
            return $self->{followme_phone};
        }
        else {
            return undef;
        }
    }
    
    sub get_current_trunk {
        my $self = shift;
        my $sql  = 'SELECT t.name, t.dialoutprefix
                               FROM  `outbound_route_trunks` o,  `trunks` t
                   WHERE t.disabled LIKE  "off"
                               AND o.trunk_id = t.trunkid
                               ORDER BY o.seq ASC 
                               LIMIT 0 , 1';
        my ( $trunk_name, $dialoutprefix ) = $dbh_ast->selectrow_array($sql);
        $self->{dialoutprefix} = $dialoutprefix;
        return $trunk_name.'/'.$dialoutprefix.$self->{followme_phone};
    }
    
    1;


    И используется вот так:
    use Followme;
    my $f = Followme->new( ext => "100" );
    if ( $f->get_followme() ) {
        my $followme = $f->get_current_trunk();
        $AGI->exec( 'Dial', 'SIP/' . $followme . ',40,m(default)tw' );
    }
    Ответ написан
    Комментировать
  • Perl: LWP и бесконечный цикл?

    @pcdesign
    Памят очищать в перле не надо.
    Этим занимается сборщик мусора.
    Если на коленке, то вот такой скрипт на перле:
    use strict;
    use warnings;
    use utf8;
    use feature 'say';
    use LWP::Simple;
    use HTTP::Request::Common qw(GET);
    use open ':std', ':encoding(UTF-8)';
    
    my $ua = LWP::UserAgent->new;
    
    my @add = qw(http://rbc.ru http://habrahabr.ru http://some_dead_site_.net http://yahoo.com);
    my %http = map {$_ => 1} @add;
    while (1) {
        for my $address (keys %http) {
            my $req = GET $address;
            my $res = $ua->request($req);
            if ( $res->{'_msg'} eq 'OK' ) {
                say "С сайтом $address - все ок";
            }
            else {
                say "Сайт $address - лежит. Удаляем из списка";
                delete $http{$address};
            }
        }
        say "######Спим 20 секунд######";
        sleep 20;
    }


    И результат работы:

    С сайтом http://yahoo.com - все ок
    Сайт http://some_dead_site_.net - лежит. Удаляем из списка
    С сайтом http://habrahabr.ru - все ок
    С сайтом http://rbc.ru - все ок
    ######Спим 20 секунд######
    С сайтом http://yahoo.com - все ок
    С сайтом http://habrahabr.ru - все ок
    С сайтом http://rbc.ru - все ок
    ######Спим 20 секунд######
    Ответ написан
    1 комментарий
  • Flask-User. Как задать время действия сессии?

    @pcdesign Автор вопроса
    В class ConfigClass(object):
    надо добавить пару строк:

    COOKIE_SECURE = 'Secure'                                                     
    COOKIE_DURATION = timedelta(days=365)


    После этого те пользователи, которые поставят галку на "Запомнить меня", тем и будет присвоена долгая сессия.
    Ответ написан
    5 комментариев
  • Кто имеет опыт в оптимизации Perl скриптов?

    @pcdesign
    my %child;
    my $n = $dbh->prepare('SELECT * FROM `table` where key =?  ');
    $n->execute($value);
    my $all = $n->fetchall_arrayref( {} );
    foreach my $item (@$all) {
        print $item->{'arid'};
    }
    Ответ написан
  • Json файл внутри?

    @pcdesign
    Попробовал у себя. Python 3:
    import json
    
    listok = {'привет': 'медвед'}
    data = json.dumps(listok)
    print('Json: %s' % data)
    
    new_obj = json.loads(data)
    print('Python obj: %s' % new_obj)


    Результат выполнения:
    Json: {"\u043f\u0440\u0438\u0432\u0435\u0442": "\u043c\u0435\u0434\u0432\u0435\u0434"}
    Python obj: {'привет': 'медвед'}

    ===============
    И в Python 2.6.6

    #!/usr/bin/python
    # -*- coding: utf-8 -*- 
    
    import json
    
    listok = {'привет': 'медвед'}
    data = json.dumps(listok)
    print 'Json: %s' % data
    
    
    new_obj = json.loads(data)
    print('Python obj: %s' % new_obj)
    
    for key in new_obj:
            print key, new_obj[key]


    Результат:
    Json: {"\u043f\u0440\u0438\u0432\u0435\u0442": "\u043c\u0435\u0434\u0432\u0435\u0434"}
    Python obj: {u'\u043f\u0440\u0438\u0432\u0435\u0442': u'\u043c\u0435\u0434\u0432\u0435\u0434'}
    привет медвед
    Ответ написан
    22 комментария
  • Как получить id поста?

    @pcdesign
    Ну как-то так:
    def __init__(self, text=None, writer=None,  key=None):
            self.text = text
            self.writer = current_user.id
            self.key = key
    Ответ написан
    4 комментария
  • Как сгенерерировать ссылку на пост?

    @pcdesign
    Насколько я понимаю - это из-за точки в post.id.
    Назовите post_id, например.
    @app.route('/post/<post_id>')

    А еще лучше вот так:
    @app.route('/post/<int:post_id>')
    Гарантированно пройдут только целые числа.

    Вот здесь подробнее:
    flask.pocoo.org/docs/0.10/quickstart/#variable-rules
    Ответ написан
    33 комментария
  • Правильное использование контроллера в Mojo?

    @pcdesign
    Имеет смысл подписаться на рассылку
    mail.pm.org/mailman/listinfo/moscow-pm
    moscow.pm.org
    И спросить там.
    Рассылка очень активная, быстро ответят.
    Ответ написан
    Комментировать
  • Что нибудь хорошее про mezzanine cms?

    @pcdesign
    Хорошо, все удобно.
    Делал инет магазин на этой штуке.
    Никаких нареканий.
    Правда магазин англоязычный, так что потестить с русским языком не удалось.
    Ну и еще поддерживается python 3.4.
    На нем у меня все и взлетело.
    Ответ написан
    3 комментария
  • Как сделать множество сайтов на одном Flask приложении?

    @pcdesign
    У меня была схожая задача.
    Решил ее вот так:
    @app.before_request
    def before_request():
        sitename = db = ""
        if request.headers['Host'] in 'www.example1.com':
            sitename = 'example1.com'
            db = 'example1_com'
        elif request.headers['Host'] in 'www.example2.com':
            sitename = 'example2.com'
            db = 'example2_com'	
        else:
            sitename = 'test.com'
            db = 'test_com'
         # И т.д.
         app.jinja_env.globals['sitename'] = sitename


    Ну то есть разруливание было на уровне @app.before_request.
    Ответ написан