Ejemplo n.º 1
0
def update_user_script_cache():
    """
    """
    print 'Updating user-script cache...'
    session = Session()

    update_query = str(session.query(User.id, Script.id,
        func.sum(Commit.timeadd), func.count(Commit.id)
        ).join((Commit, Commit.user_id==User.id)).join(
            (Script, Script.id == Commit.script_id)).group_by(
            User.id, Script.id))

    session.execute('TRUNCATE TABLE uscache') # CASCADE?
    session.execute('INSERT INTO uscache %s' % update_query)
    session.commit()

    del session
    print 'Done updating user-script cache...'
Ejemplo n.º 2
0
def update_user_script_cache():
    """
    """
    print 'Updating user-script cache...'
    session = Session()

    update_query = str(
        session.query(User.id, Script.id, func.sum(Commit.timeadd),
                      func.count(Commit.id)).join(
                          (Commit, Commit.user_id == User.id)).join(
                              (Script,
                               Script.id == Commit.script_id)).group_by(
                                   User.id, Script.id))

    session.execute('TRUNCATE TABLE uscache')  # CASCADE?
    session.execute('INSERT INTO uscache %s' % update_query)
    session.commit()

    del session
    print 'Done updating user-script cache...'
Ejemplo n.º 3
0
def update_user_script_variable_cache():
    """
    """
    print 'Updating user-script-variable cache...'
    session = Session()

    update_query = str(session.query(User.id, Script.id, Variable.id,
        func.sum(CommitVar.amount)).join(
            (Commit, Commit.user_id == User.id)).join(
            (Script, Commit.script_id == Script.id)).join(
            (CommitVar, CommitVar.commit_id == Commit.id)).join(
            (Variable, Variable.id == CommitVar.variable_id)).group_by(
            User.id, Script.id, Variable.id))

    session.execute('TRUNCATE TABLE usvcache') # CASCADE?
    session.execute('INSERT INTO usvcache %s' % update_query)
    session.commit()

    del session
    print 'Done updating user-script-variable cache...'
Ejemplo n.º 4
0
def update_user_script_variable_cache():
    """
    """
    print 'Updating user-script-variable cache...'
    session = Session()

    update_query = str(
        session.query(
            User.id, Script.id, Variable.id, func.sum(CommitVar.amount)).join(
                (Commit, Commit.user_id == User.id)).join(
                    (Script, Commit.script_id == Script.id)).join(
                        (CommitVar, CommitVar.commit_id == Commit.id)).join(
                            (Variable,
                             Variable.id == CommitVar.variable_id)).group_by(
                                 User.id, Script.id, Variable.id))

    session.execute('TRUNCATE TABLE usvcache')  # CASCADE?
    session.execute('INSERT INTO usvcache %s' % update_query)
    session.commit()

    del session
    print 'Done updating user-script-variable cache...'
Ejemplo n.º 5
0
def manage_variable(env, variableid):
    """
        Page to manage a variable. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl,
            {   'session' : env['beaker.session']} )

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    if user.admin_level < 1:
        return str('Access denied')

    tmpl = jinjaenv.get_template('managevariable.html')

    variable = session.query(Variable).filter(Variable.id == \
            variableid).first()

    if not variable:
        return None

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)

        if data is None:
            return str('Invalid POST data')

        if 'newname' not in data:
            return str('Invalid POST data')

        data['newname'] = urllib.unquote_plus(data['newname'])
        if len(data['newname']) == 0 or len(data['newname']) > 20:
            return template_render(tmpl,
                {   'session' : env ['beaker.session'],
                    'error' : 'Variable name too long.',
                })

        res = session.query(Variable).filter(Variable.name ==
                data['newname']).first()

        if res is None:
            variable.name = data['newname']
            session.add(variable)
            try:
                session.commit()
            except sqlalchemy.exc.IntegrityError as e:
                session.rollback()
                print 'Rollback in manage_variable'
                print 'Post data:', data
                print 'Exception:', e
        else:
            return template_render(tmpl,
                {   'session' : env ['beaker.session'],
                    'error' : 'Name already exists in the system.',
                    'variable' : variable
                })

    return template_render(tmpl,
        {   'session' : env['beaker.session'],
            'variable' : variable
        })
Ejemplo n.º 6
0
def create_variable(env):
    """
        Page to create a variable. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl,
            {   'session' : env['beaker.session']} )

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    if user.admin_level < 1:
        return str('Access denied')

    tmpl = jinjaenv.get_template('createvariable.html')

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)
        if data is None:
            return str('Error: Invalid POST data')

        if 'variable' in data:
            s = data['variable']
            s = urllib.unquote_plus(s)
        else:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Variable name not specified'})

        if len(s) == 0 or len(s) > 60:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Variable name has invalid length'})

        # 'on' when checked; not in data when not clicked. XXX
        if 'is_var' in data:
            v = 1
        else:
            v = 0

        res = session.query(Variable).filter(Variable.name ==
            s).first()

        if res:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Variable already exists'})

        variable = Variable(s, v)
        session.add(variable)
        try:
            session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback! create_variable'
            print 'Post data:', data
            print 'Exception:', e

        return template_render(tmpl, { 'session' : env ['beaker.session'],
              'newvariable' : variable})


    return template_render(tmpl,
        {'session' : env['beaker.session'] })
Ejemplo n.º 7
0
def create_script(env):
    """
        Page to create a script. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl,
            {   'session' : env['beaker.session']}  )

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    tmpl = jinjaenv.get_template('createscript.html')

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)
        if data is None:
            return str('Error: Invalid POST data')

        if 'script' in data:
            s = data['script']
            s = urllib.unquote_plus(s)
        else:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Script contains invalid characters'})

        if len(s) == 0 or len(s) > 20:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Script name has invalid length'})

        res = session.query(Script).filter(Script.name == s).all()
        if res:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Script already exists'})

        user = session.query(User).filter(User.id == \
                env['beaker.session']['loggedin_id']).first()

        if not user:
            return template_render(tmpl, { 'session' : env ['beaker.session'],
                'error' : 'Error: Invalid user in session?'})

        script = Script(s)
        script.owner = user

        session.add(script)
        try:
           session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback! create_script.'
            print 'Post data:', data
            print 'Exception:', e

        return template_render(tmpl, { 'session' : env ['beaker.session'],
              'newscript' : script })

    return template_render(tmpl,
        { 'session' : env ['beaker.session']
            })
Ejemplo n.º 8
0
def manage_script(env, scriptid):
    """
        Page to manage a specific script. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl,
            {   'session' : env['beaker.session']}  )

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    script = session.query(Script).filter(Script.id == scriptid).first()

    if not script:
        return None

    if script.owner.name != user.name:
        return None

    if str(env['REQUEST_METHOD']) == 'POST':
            data = read_post_data(env)

            if data is None:
                return str('Error: Invalid POST data')

            if 'variable' in data:
                try:
                    id = data['variable']
                except ValueError:
                    return str('Invalid POST data: Not a number')

            var = session.query(Variable).filter(Variable.id == id).first()

            if var is None:
                return str('Invalid POST data: No such variable')

            if var not in script.variables:
                script.variables.append(var)

            try:
                session.commit()
            except sqlalchemy.exc.IntegrityError as e:
                session.rollback()
                print 'Rollback in stats.py, manage_script:'
                print 'Postdata:', data
                print 'Exception:', e

    vars = session.query(Variable).filter(Variable.is_var==1).all()
    vars_intersect = filter(lambda x: x not in script.variables, vars) if \
        script.variables is not None else vars

    tmpl = jinjaenv.get_template('managescript.html')

    return template_render(tmpl,
        { 'session' : env ['beaker.session'],
            'script' : script,
            'vars' : vars_intersect
            })
Ejemplo n.º 9
0
def register_user(env):
    """
        Page to register a user. Handles POST and GET data.
    """
    tmpl = jinjaenv.get_template('registeruser.html')

    session = Session()

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)

        if data is None:
            return str('Error: Invalid post data')

        if 'user' not in data or 'pass' not in data:
            return template_render(tmpl,
            {   'session' : env['beaker.session'], 'registerfail' : True,
                'error' : 'Post data not complete'}  )

        data['user'] = urllib.unquote_plus(data['user'])
        data['pass'] = urllib.unquote_plus(data['pass'])
        if 'mail' in data:
            data['mail'] = urllib.unquote_plus(data['mail'])

        if len(data['user']) > 20 or len(data['pass']) > 20 or \
           len(data['user']) == 0 or len(data['pass']) == 0:
            return template_render(tmpl,
            {   'session' : env['beaker.session'], 'registerfail' : True,
                'error' : 'Username or Password too long.'}  )

        data['pass'] = hashlib.sha256(data['pass']).hexdigest()

        if 'mail' in data:
            if len(data['mail']) > 40:
                return template_render(tmpl,
            {   'session' : env['beaker.session'], 'registerfail' : True,
                'error' : 'Email address is too long'} )

        log.log([], LVL_VERBOSE, PyLogger.INFO, 'Register POST data: %s' %
                str(data))

        if 'mail' in data and data['mail']:
            if not emailre.match(data['mail']):
                return template_render(tmpl,
                {   'session' : env['beaker.session'], 'registerfail' : True,
                    'error': 'Invalid Email.'}  )

        # Does the user exist?
        res =  session.query(User).filter(func.lower(User.name) ==
                data['user'].lower()).first()

        if res:
            return template_render(tmpl,
            {   'session' : env['beaker.session'], 'registerfail' : True,
                'error' : 'Username already exists'}  )


        user = User(data['user'], data['pass'], data['mail'] if 'mail' in data
                else None)

        session.add(user)
        try:
           session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback in register_user'
            print 'Post data:', data
            print 'Exception:', e

        return template_render(tmpl,
            { 'session' : env['beaker.session'],
               'registersuccess' : True,
               'user' : user} )

    elif str(env['REQUEST_METHOD']) == 'GET':
        return template_render(tmpl,
            {   'session' : env['beaker.session']}  )
    else:
        return None
Ejemplo n.º 10
0
from mptparser.time_parser import timeparse




session = Session()

sqlabspara = session.query(AbstractPara).all()

week = [u'понедельник', u'вторник', u'среда', u'четверг', u'пятница', u'суббота']

now = datetime.date.today()
if (int(datetime.datetime.strftime(now, '%W')) % 2) == 0:  # числитель
    print 'Числитель'
else:
    print 'Знаменатель'

#print now.weekday()
for abspara in sqlabspara:
    #Добавляем расписание на неделю в бд, откуда потем тащем в календарь
    for xday in xrange(0, 7):
        dateoffset = now + datetime.timedelta(days=xday)
        if dateoffset.weekday() == week.index(abspara.dayofweek):
            paradate = dateoffset
            start, end = timeparse(abspara.numberpara, paradate.weekday())
            sqlpara = Para(abspara, paradate, start, end)
            #print sqlpara.abstractpara.dayofweek
            session.add(sqlpara)

session.commit()
Ejemplo n.º 11
0
def create_variable(env):
    """
        Page to create a variable. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl, {'session': env['beaker.session']})

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    if user.admin_level < 1:
        return str('Access denied')

    tmpl = jinjaenv.get_template('createvariable.html')

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)
        if data is None:
            return str('Error: Invalid POST data')

        if 'variable' in data:
            s = data['variable']
            s = urllib.unquote_plus(s)
        else:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Variable name not specified'
                })

        if len(s) == 0 or len(s) > 60:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Variable name has invalid length'
                })

        # 'on' when checked; not in data when not clicked. XXX
        if 'is_var' in data:
            v = 1
        else:
            v = 0

        res = session.query(Variable).filter(Variable.name == s).first()

        if res:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Variable already exists'
                })

        variable = Variable(s, v)
        session.add(variable)
        try:
            session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback! create_variable'
            print 'Post data:', data
            print 'Exception:', e

        return template_render(tmpl, {
            'session': env['beaker.session'],
            'newvariable': variable
        })

    return template_render(tmpl, {'session': env['beaker.session']})
Ejemplo n.º 12
0
def create_script(env):
    """
        Page to create a script. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl, {'session': env['beaker.session']})

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    tmpl = jinjaenv.get_template('createscript.html')

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)
        if data is None:
            return str('Error: Invalid POST data')

        if 'script' in data:
            s = data['script']
            s = urllib.unquote_plus(s)
        else:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Script contains invalid characters'
                })

        if len(s) == 0 or len(s) > 20:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Script name has invalid length'
                })

        res = session.query(Script).filter(Script.name == s).all()
        if res:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Script already exists'
                })

        user = session.query(User).filter(User.id == \
                env['beaker.session']['loggedin_id']).first()

        if not user:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Error: Invalid user in session?'
                })

        script = Script(s)
        script.owner = user

        session.add(script)
        try:
            session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback! create_script.'
            print 'Post data:', data
            print 'Exception:', e

        return template_render(tmpl, {
            'session': env['beaker.session'],
            'newscript': script
        })

    return template_render(tmpl, {'session': env['beaker.session']})
Ejemplo n.º 13
0
def manage_script(env, scriptid):
    """
        Page to manage a specific script. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl, {'session': env['beaker.session']})

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    script = session.query(Script).filter(Script.id == scriptid).first()

    if not script:
        return None

    if script.owner.name != user.name:
        return None

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)

        if data is None:
            return str('Error: Invalid POST data')

        if 'variable' in data:
            try:
                id = data['variable']
            except ValueError:
                return str('Invalid POST data: Not a number')

        var = session.query(Variable).filter(Variable.id == id).first()

        if var is None:
            return str('Invalid POST data: No such variable')

        if var not in script.variables:
            script.variables.append(var)

        try:
            session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback in stats.py, manage_script:'
            print 'Postdata:', data
            print 'Exception:', e

    vars = session.query(Variable).filter(Variable.is_var == 1).all()
    vars_intersect = filter(lambda x: x not in script.variables, vars) if \
        script.variables is not None else vars

    tmpl = jinjaenv.get_template('managescript.html')

    return template_render(tmpl, {
        'session': env['beaker.session'],
        'script': script,
        'vars': vars_intersect
    })
Ejemplo n.º 14
0
def register_user(env):
    """
        Page to register a user. Handles POST and GET data.
    """
    tmpl = jinjaenv.get_template('registeruser.html')

    session = Session()

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)

        if data is None:
            return str('Error: Invalid post data')

        if 'user' not in data or 'pass' not in data:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'registerfail': True,
                    'error': 'Post data not complete'
                })

        data['user'] = urllib.unquote_plus(data['user'])
        data['pass'] = urllib.unquote_plus(data['pass'])
        if 'mail' in data:
            data['mail'] = urllib.unquote_plus(data['mail'])

        if len(data['user']) > 20 or len(data['pass']) > 20 or \
           len(data['user']) == 0 or len(data['pass']) == 0:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'registerfail': True,
                    'error': 'Username or Password too long.'
                })

        data['pass'] = hashlib.sha256(data['pass']).hexdigest()

        if 'mail' in data:
            if len(data['mail']) > 40:
                return template_render(
                    tmpl, {
                        'session': env['beaker.session'],
                        'registerfail': True,
                        'error': 'Email address is too long'
                    })

        log.log([], LVL_VERBOSE, PyLogger.INFO,
                'Register POST data: %s' % str(data))

        if 'mail' in data and data['mail']:
            if not emailre.match(data['mail']):
                return template_render(
                    tmpl, {
                        'session': env['beaker.session'],
                        'registerfail': True,
                        'error': 'Invalid Email.'
                    })

        # Does the user exist?
        res = session.query(User).filter(
            func.lower(User.name) == data['user'].lower()).first()

        if res:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'registerfail': True,
                    'error': 'Username already exists'
                })

        user = User(data['user'], data['pass'],
                    data['mail'] if 'mail' in data else None)

        session.add(user)
        try:
            session.commit()
        except sqlalchemy.exc.IntegrityError as e:
            session.rollback()
            print 'Rollback in register_user'
            print 'Post data:', data
            print 'Exception:', e

        return template_render(
            tmpl, {
                'session': env['beaker.session'],
                'registersuccess': True,
                'user': user
            })

    elif str(env['REQUEST_METHOD']) == 'GET':
        return template_render(tmpl, {'session': env['beaker.session']})
    else:
        return None
Ejemplo n.º 15
0
def manage_variable(env, variableid):
    """
        Page to manage a variable. Handles both GET and POST.
    """
    if not loggedin(env):
        tmpl = jinjaenv.get_template('loginform.html')
        return template_render(tmpl, {'session': env['beaker.session']})

    session = Session()

    user = session.query(User).filter(User.id == \
            env['beaker.session']['loggedin_id']).first()

    if not user:
        return None

    if user.admin_level < 1:
        return str('Access denied')

    tmpl = jinjaenv.get_template('managevariable.html')

    variable = session.query(Variable).filter(Variable.id == \
            variableid).first()

    if not variable:
        return None

    if str(env['REQUEST_METHOD']) == 'POST':
        data = read_post_data(env)

        if data is None:
            return str('Invalid POST data')

        if 'newname' not in data:
            return str('Invalid POST data')

        data['newname'] = urllib.unquote_plus(data['newname'])
        if len(data['newname']) == 0 or len(data['newname']) > 20:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Variable name too long.',
                })

        res = session.query(Variable).filter(
            Variable.name == data['newname']).first()

        if res is None:
            variable.name = data['newname']
            session.add(variable)
            try:
                session.commit()
            except sqlalchemy.exc.IntegrityError as e:
                session.rollback()
                print 'Rollback in manage_variable'
                print 'Post data:', data
                print 'Exception:', e
        else:
            return template_render(
                tmpl, {
                    'session': env['beaker.session'],
                    'error': 'Name already exists in the system.',
                    'variable': variable
                })

    return template_render(tmpl, {
        'session': env['beaker.session'],
        'variable': variable
    })