コード例 #1
0
ファイル: openebs.py プロジェクト: sven4all/openebs
def openebs(environ, start_response):
    url = environ['PATH_INFO'][1:]
    try:
        username = environ['REMOTE_USER']
        dataowner = 'HTM'
    except:
        return notfound(start_response)

    if url == '/update':
        renderLinePages('HTM')

    elif url == '/KV15messages':
        post_env = environ.copy()
        post_env['QUERY_STRING'] = ''
        post = cgi.FieldStorage(fp=env['wsgi.input'], environ=post_env, keep_blank_values=False)

        if 'userstopcodes' in post and messagecontent in post:
            try:
                [int(x) for x in post['userstopcodes']]
            except:
                return badrequest(start_reponse)
        else:
            return badrequest(start_response)

        msg = StopMessage(dataownercode=dataowner, userstopcodes=post['userstopcodes'], messagecontent=post['messagecontent'])

        if 'messagepriority' in post:
            if MessagePriority().validate(post['messagepriority']):
                msg.messagepriority = post['messagepriority']
            else:
                return badrequest(start_response)

        if 'messagetype' in post:
            if MessageType().validate(post['messagetype']):
                msg.messagetype = post['messagetype']
            else:
                return badrequest(start_response)

        if 'messagestarttime' in post:
            try:
                msg.messagestarttime = datetime.strptime(post['messagestarttime'], '%Y-%m-%dT%H:%M:%S')
            except:
                return badrequest(start_reponse)
        
        if 'messageendtime' in post:
            try:
                msg.messageendtime = datetime.strptime(post['messageendtime'], '%Y-%m-%dT%H:%M:%S')
            except:
                return badrequest(start_reponse)

        kv15 = KV15messages(stopmessages = [msg])

        if 'messagescenario' in post:
            if len(post['messagescenario']) > 0:
                kv15.store(post['messagescenario'])
            else:
                return badrequest(start_reponse)
        
        else:     
            kv15.push(remote, '/TMI_Post/KV15')
コード例 #2
0
ファイル: kv15.py プロジェクト: sven4all/openebs
def waitforit(timestamp):
	now = datetime.today()
	seconds = (timestamp - now).seconds
	print '\nWaiting for: %s (%ds)' % (timestamp, seconds)
	if seconds < 3600:
		sleep(seconds)

XX = 23
YY = (XX + 1) % 24


# GENERAL
# REMOVE

waitforit(datetime.combine(date.today(), time(XX, 00)))
msg = StopMessage(userstopcodes=['42028501'], messagecontent='GENERAL REMOVE')
msg.messagetype = MessageType.GENERAL
msg.mesagedurationtype = MessageDurationType.REMOVE
msg.messagestarttime = datetime.combine(date.today(), time(XX, 05))
kv15 = KV15messages(stopmessages = [msg])
kv15.push(remote, '/TMI_Post/KV15')

waitforit(datetime.combine(date.today(), time(XX, 10)))
delmsg = msg.delete()
kv15 = KV15messages(stopmessages = [delmsg])
kv15.push(remote, '/TMI_Post/KV15')


# GENERAL
# ENDTIME
コード例 #3
0
def waitforit(timestamp):
	now = datetime.today()
	seconds = (timestamp - now).seconds
	print '\nWaiting for: %s (%ds)' % (timestamp, seconds)
	if seconds < 3600:
		sleep(seconds)

XX = 23
YY = (XX + 1) % 24


# GENERAL
# REMOVE

waitforit(datetime.combine(date.today(), time(XX, 00)))
msg = StopMessage(dataownercode='VTN', userstopcodes=['42028501'], messagecontent='GENERAL REMOVE')
msg.messagetype = MessageType.GENERAL
msg.mesagedurationtype = MessageDurationType.REMOVE
msg.messagestarttime = datetime.combine(date.today(), time(XX, 05))
kv15 = KV15messages(stopmessages = [msg])
kv15.push(remote, '/TMI_Post/KV15')

waitforit(datetime.combine(date.today(), time(XX, 10)))
delmsg = msg.delete()
kv15 = KV15messages(stopmessages = [delmsg])
kv15.push(remote, '/TMI_Post/KV15')


# GENERAL
# ENDTIME
コード例 #4
0
def openebs(environ, start_response):
    url = environ['PATH_INFO']
    dataownercode = None
    ip_addr = environ['REMOTE_ADDR']
    #    if url == '/uitloggen':
    #    	return signout(start_response)

    if 'REMOTE_USER' not in environ and 'HTTP_AUTHORIZATION' not in environ:
        return authenticate(start_response)

    if 'REMOTE_USER' not in environ and 'HTTP_AUTHORIZATION' in environ:
        import base64
        environ['REMOTE_USER'], _pass = base64.decodestring(
            environ['HTTP_AUTHORIZATION'].split('Basic ')[1]).split(':', 2)

    try:
        username, domain = environ['REMOTE_USER'].split('@')
        dataownercode = auth_lookup[domain.lower()]
    except:
        return notfound(start_response)
    author = environ['REMOTE_USER']
    auth_author = {'scenario_create': False, 'scenario_delete': False}
    if author in authorization:
        auth_author = authorization[author]

    if url == '/stops/line':
        reply = querylinesperstop(dataownercode)
        start_response(
            '200 OK', COMMON_HEADERS_JSON + [
                ('Content-length', str(len(str(reply)))),
            ])
        return reply
    elif '/stops/line/' in url:
        arguments = url.split('/')
        # temp fix, while waiting for linedirection in KV7network, query will be fast enough then
        key = dataownercode + '_' + arguments[3]
        if key in stopinline_cache:
            reply = stopinline_cache[key]
        else:
            reply = querystopinline(dataownercode, arguments[3])
            stopinline_cache[key] = reply
        start_response(
            '200 OK', COMMON_HEADERS_JSON + [
                ('Content-length', str(len(str(reply)))),
            ])
        return reply

    elif url == '/line':
        reply = querylines(dataownercode)
        start_response(
            '200 OK', COMMON_HEADERS_JSON + [
                ('Content-length', str(len(str(reply)))),
            ])
        return reply

    elif url == '/update':
        renderLinePages(dataownercode)

    elif url == '/berichten.html':
        renderKV15messages(dataownercode)

    elif url == '/settings.js':
        reply = json.dumps(dict(auth_author.items() + [('username', author)]))

        start_response(
            '200 OK', COMMON_HEADERS_JSON + [
                ('Content-length', str(len(str(reply)))),
            ])
        return reply

    elif url == '/KV15scenarios':
        if environ['REQUEST_METHOD'] == 'GET':
            reply = StopMessage().overview_scenario(dataownercode)
            start_response(
                '200 OK', COMMON_HEADERS_JSON + [
                    ('Content-length', str(len(str(reply)))),
                ])
            return reply
        elif environ['REQUEST_METHOD'] == 'POST':
            post_env = environ.copy()
            post_env['QUERY_STRING'] = ''
            post = cgi.FieldStorage(fp=environ['wsgi.input'],
                                    environ=post_env,
                                    keep_blank_values=False)
            scenarioname = None
            scenariostarttime = None
            scenarioendtime = None

            if 'scenarioname' not in post:
                return badrequest(
                    start_response,
                    'Kan geen scenario plannen zonder ScenarioName')

            if 'scenariostarttime' in post:
                try:
                    scenariostarttime = datetime.strptime(
                        post['scenariostarttime'].value, '%Y-%m-%dT%H:%M:%S')
                    if scenariostarttime > (datetime.now() +
                                            timedelta(hours=72)):
                        return badrequest(
                            start_response,
                            'ScenarioStartTime kan niet 72 uur in de toekomst liggen'
                        )
                except:
                    return badrequest(
                        start_response,
                        'ScenarioStartTime kan niet worden gevalideerd')
            else:
                return badrequest(
                    start_response,
                    'Kan geen scenario plannen zonder ScenarioStartTime')

            if 'scenarioendtime' in post:
                try:
                    scenarioendtime = datetime.strptime(
                        post['scenarioendtime'].value, '%Y-%m-%dT%H:%M:%S')
                except:
                    return badrequest(
                        start_response,
                        'ScenarioEndTime kan niet worden gevalideerd')
            else:
                return badrequest(
                    start_response,
                    'Kan geen scenario plannen zonder ScenarioEndTime')

            if scenariostarttime >= scenarioendtime:
                return badrequest(
                    start_response,
                    'ScenarioStartTime later of gelijk aan ScenarioEndTime')

            return badrequest(
                start_response,
                'Je hebt alles goed ingevuld, maar dit stukje moeten we nog implementeren.'
            )

    elif url.startswith('/KV15scenarios/'):
        if environ['REQUEST_METHOD'] == 'GET':
            scenario = url.split('/KV15scenarios/')[1]
            reply = StopMessage().overview_scenario(dataownercode, scenario)
            start_response(
                '200 OK', COMMON_HEADERS_JSON + [
                    ('Content-length', str(len(str(reply)))),
                ])
            return reply

    elif url == '/KV15deletescenarios':
        if environ['REQUEST_METHOD'] == 'POST':
            post_env = environ.copy()
            post_env['QUERY_STRING'] = ''
            post = cgi.FieldStorage(fp=environ['wsgi.input'],
                                    environ=post_env,
                                    keep_blank_values=False)

            if 'scenario_delete' in auth_author and auth_author[
                    'scenario_delete']:
                if 'scenarioname' not in post:
                    return badrequest(start_response,
                                      'Geen scenario opgestuurd')

                StopMessage().delete_scenario(dataownercode,
                                              post['scenarioname'].value)
                reply = 'OK'
                start_response(
                    '200 OK', COMMON_HEADERS_HTML + [
                        ('Content-length', str(len(str(reply)))),
                    ])
                return reply
            else:
                return badrequest(
                    start_response,
                    'U heeft geen rechten om een scenario te verwijderen')

    elif url == '/KV15deletemessages':
        if environ['REQUEST_METHOD'] == 'POST':
            post_env = environ.copy()
            post_env['QUERY_STRING'] = ''
            post = cgi.FieldStorage(fp=environ['wsgi.input'],
                                    environ=post_env,
                                    keep_blank_values=False)
            messagecodedate = None
            messagecodenumber = None
            if 'messagecodedate' not in post:
                return badrequest(start_response,
                                  'Geen messagecodedate ingevuld')
            else:
                messagecodedate = post['messagecodedate'].value

            if 'messagecodenumber' not in post:
                return badrequest(start_response,
                                  'Geen messagecodenumber ingevuld')
            else:
                try:
                    messagecodenumber = int(post['messagecodenumber'].value)
                except:
                    return badrequest(start_response,
                                      'Messagecodenumber geen integer')
            msg = DeleteMessage(dataownercode=dataownercode,
                                messagecodedate=messagecodedate,
                                messagecodenumber=messagecodenumber)
            kv15 = KV15messages(stopmessages=[msg])

            conn = psycopg2.connect(kv15_database_connect)
            kv15.save(conn=conn)
            kv15.log(conn=conn,
                     author=author,
                     message='DELETE',
                     ipaddress=ip_addr)
            try:
                respcode, resp = kv15.push(remote, remote_path)
            except:
                conn.rollback()
                conn.close()
                return badrequest(start_response, 'Connectie met GOVI mislukt')
            if not send or '>OK</' in resp:
                conn.commit()
                conn.close()
            else:
                conn.rollback()
                conn.close()
                regex = re.compile(
                    "<tmi8:ResponseError>(.*)</tmi8:ResponseError>",
                    re.MULTILINE | re.LOCALE | re.DOTALL)
                r = regex.search(resp)
                resp = r.groups()[0]
                return badrequest(start_response, resp)
            reply = 'Bericht verwijderd'
            start_response(
                '200 OK', COMMON_HEADERS_TEXT + [
                    ('Content-length', str(len(reply))),
                ])
            return reply

    elif url == '/KV15messages':
        if environ['REQUEST_METHOD'] == 'GET':
            reply = StopMessage().overview(dataownercode)
            start_response(
                '200 OK', COMMON_HEADERS_JSON + [
                    ('Content-length', str(len(str(reply)))),
                ])
            return reply

        elif environ['REQUEST_METHOD'] == 'POST':
            kv15 = None
            post_env = environ.copy()
            post_env['QUERY_STRING'] = ''
            post = cgi.FieldStorage(fp=environ['wsgi.input'],
                                    environ=post_env,
                                    keep_blank_values=False)
            userstopcodes = None
            if 'userstopcodes[]' in post:
                try:
                    if isinstance(post['userstopcodes[]'], list):
                        userstopcodes = [
                            x.value.split('_')[1]
                            for x in post['userstopcodes[]']
                        ]
                        for x in post['userstopcodes[]']:
                            if x.value.split('_')[0] != dataownercode:
                                return badrequest(
                                    start_response,
                                    'Userstopcodes buiten dataowner domein')
                    else:
                        userstopcodes = [
                            str(post['userstopcodes[]'].value).split('_')[1]
                        ]
                        if str(post['userstopcodes[]'].value).split(
                                '_')[0] != dataownercode:
                            return badrequest(
                                start_response,
                                'Userstopcode buiten dataowner domein')
                except Exception as e:
                    print e
                    return badrequest(start_response,
                                      'Fout in UserStopCodes formaat')
            else:
                if 'userstopcodes[]' not in post:
                    return badrequest(start_response,
                                      'Er zijn geen haltes geselecteerd')

            if 'messagecontent' not in post:
                return badrequest(start_response, 'Bericht ontbreekt')

            msg = StopMessage(dataownercode=dataownercode,
                              userstopcodes=userstopcodes,
                              messagecontent=post['messagecontent'].value)
            if 'messagepriority' in post:
                if MessagePriority().validate(post['messagepriority'].value):
                    msg.messagepriority = post['messagepriority'].value
                else:
                    return badrequest(
                        start_response,
                        'MessagePriority kan niet worden gevalideerd')

            if 'messagetype' in post:
                if MessageType().validate(post['messagetype'].value):
                    msg.messagetype = post['messagetype'].value
                else:
                    return badrequest(
                        start_response,
                        'MessageType kan niet worden gevalideerd')

            if 'messagestarttime' in post:
                try:
                    msg.messagestarttime = datetime.strptime(
                        post['messagestarttime'].value, '%Y-%m-%dT%H:%M:%S')
                    if msg.messagestarttime > (datetime.now() +
                                               timedelta(hours=72)):
                        return badrequest(
                            start_response,
                            'MessageStartTime kan niet 72 uur in de toekomst liggen'
                        )
                except:
                    return badrequest(
                        start_response,
                        'MessageStartTime kan niet worden gevalideerd')

            if 'messageendtime' in post:
                try:
                    msg.messageendtime = datetime.strptime(
                        post['messageendtime'].value, '%Y-%m-%dT%H:%M:%S')
                    if msg.messageendtime < (datetime.now() -
                                             timedelta(minutes=5)):
                        return badrequest(
                            start_response,
                            'MessageEndTime kan niet in het verleden liggen')
                except:
                    return badrequest(
                        start_response,
                        'MessageEndTime kan niet worden gevalideerd')

            if msg.messagestarttime >= msg.messageendtime:
                return badrequest(
                    start_response,
                    'MessageStartTime later of gelijk aan MessageEndTime')

            kv15 = KV15messages(stopmessages=[msg])

            if 'messagescenario' in post:
                if 'scenario_create' in auth_author and auth_author[
                        'scenario_create']:
                    if len(post['messagescenario'].value) > 0:
                        conn = psycopg2.connect(kv15_database_connect)
                        kv15.save(
                            conn=conn,
                            messagescenario=post['messagescenario'].value)
                        conn.commit()
                        conn.close()
                    else:
                        return badrequest(
                            start_response,
                            'MessageScenario kan niet worden gevalideerd')
                else:
                    return forbidden(
                        start_response,
                        'U heeft geen rechten om een scenario te maken')
            else:
                conn = psycopg2.connect(kv15_database_connect)
                kv15.save(conn=conn)
                kv15.log(conn=conn,
                         author=author,
                         message='PUBLISH',
                         ipaddress=ip_addr)
                try:
                    respcode, resp = kv15.push(remote, remote_path)
                except:
                    conn.rollback()
                    conn.close()
                    return badrequest(start_response,
                                      'Fout opgetreden in connectie met GOVI')
                if not send or '>OK</' in resp:
                    conn.commit()
                    conn.close()
                else:
                    conn.rollback()
                    conn.close()
                    regex = re.compile(
                        "<tmi8:ResponseError>(.*)</tmi8:ResponseError>",
                        re.MULTILINE | re.LOCALE | re.DOTALL)
                    r = regex.search(resp)
                    resp = r.groups()[0]
                    return badrequest(start_response, resp)
            reply = 'Bericht verstuurd'
            start_response(
                '200 OK',
                COMMON_HEADERS_TEXT + [('Content-length', str(len(reply)))])
            return reply
    return notfound(start_response)