⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 handler.py

📁 Network Administration Visualized 网络管理可视化源码
💻 PY
字号:
#! /usr/bin/env python# -*- coding: ISO8859-1 -*-## Copyright 2006 UNINETT AS## This file is part of Network Administration Visualized (NAV)## NAV is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## NAV is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with NAV; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA### Author: Stein Magnus Jodal <stein.magnus.jodal@uninett.no>#"""mod_python handler for the Messages subsystem."""__copyright__ = "Copyright 2006 UNINETT AS"__license__ = "GPL"__author__ = "Stein Magnus Jodal (stein.magnus.jodal@uninett.no)"__id__ = "$Id:$"import timefrom mod_python import apache, utilimport mx.DateTimeimport nav.dbimport nav.messagesimport nav.maintenancefrom nav.web.URI import URIfrom nav.web.templates.MessagesListTemplate import MessagesListTemplatefrom nav.web.templates.MessagesNewTemplate import MessagesNewTemplatefrom nav.web.templates.MessagesFeedTemplate import MessagesFeedTemplatedbconn = nav.db.getConnection('webfront', 'manage')db = dbconn.cursor()def handler(req):    """Handler for the Messages subsystem."""    # Initialize form    keep_blank_values = True    req.form = util.FieldStorage(req, keep_blank_values)    # Get arguments    args = URI(req.unparsed_uri)    # Get section    if len(args.path.split('/')[-1]):        section = args.path.split('/')[-1]    else:        section = 'active'     # Create initial menu, more is appended depending on context    menu = []    menu.append({'link': 'active', 'text': 'Active', 'admin': False})    menu.append({'link': 'planned', 'text': 'Planned', 'admin': False})    menu.append({'link': 'historic', 'text': 'Historic', 'admin': False})    ### SECTIONS    # RSS 2.0 feed    if section == 'rss':        page = MessagesFeedTemplate()        page.msgs = nav.messages.getMsgs('publish_start < now() AND publish_end > now() AND replaced_by IS NULL')        page.channeltitle = 'NAV Message Feed from ' + req.hostname        page.channeldesc = page.channeltitle        page.channellink = 'http://' + req.hostname + args.path        page.channellang = 'en-us'        page.channelttl = '60'        page.pubDate = 0        for i, msg in enumerate(page.msgs):            if msg['publish_start'] > page.pubDate:                page.pubDate = msg['publish_start']            page.msgs[i]['link'] = 'http://' + req.hostname \                + '/messages/view?id=' + str(page.msgs[i]['messageid'])            page.msgs[i]['guid'] = page.msgs[i]['link']        if page.pubDate == 0:            page.pubDate = mx.DateTime.now()        # Done, output the page        req.content_type = 'text/xml'        req.send_http_header()        req.write(page.respond())        return apache.OK    # Planned messages (not yet reached publishing time)    elif section == 'planned':        page = MessagesListTemplate()        page.title = 'Planned Messages'        page.msgs = nav.messages.getMsgs('publish_start > now() AND publish_end > now() AND replaced_by IS NULL')    # Historic and replaced messages    elif section == 'historic':        page = MessagesListTemplate()        page.title = 'Historic Messages'        page.msgs = nav.messages.getMsgs('publish_end < now() OR replaced_by IS NOT NULL', 'publish_end DESC')    # View a message    elif section == 'view' and args.get('id'):        page = MessagesListTemplate()        page.title = 'Message'        menu.append({'link': 'view', 'text': 'View', 'admin': False})        msgid = int(args.get('id'))        page.msgs = nav.messages.getMsg(msgid)    # Expire a message    elif section == 'expire' and args.get('id'):        page = MessagesListTemplate()        page.title = 'Expire message'        menu.append({'link': 'expire', 'text': 'Expire', 'admin': True})        page.infomsgs = []        msgid = int(args.get('id'))        nav.messages.expireMsg(msgid)        page.infomsgs.append('The following message was expired.')        page.msgs = nav.messages.getMsg(msgid)    # New, followup and edit message    elif section == 'new' or section == 'edit' or section == 'followup':        page = MessagesNewTemplate()        page.title = 'Create New Message'        page.tasks = nav.maintenance.getTasks('maint_end > now()')        page.errors = []        # Followup        if section == 'followup':            page.current = 'new' # Just to mark the menu tab            if not args.get('id'):                page.errors.append('Message ID in request is not a digit.')            else:                msgid = int(args.get('id'))                page.replaces_messageid = msgid                msg = nav.messages.getMsg(msgid)[0]                page.replaces_message = msg                page.formtitle = msg['title']                page.start_year = int(msg['publish_start'].strftime('%Y'))                page.start_month = int(msg['publish_start'].strftime('%m'))                page.start_day = int(msg['publish_start'].strftime('%d'))                page.start_hour = int(msg['publish_start'].strftime('%H'))                page.start_min = int(msg['publish_start'].strftime('%M'))                page.end_year = int(msg['publish_end'].strftime('%Y'))                page.end_month = int(msg['publish_end'].strftime('%m'))                page.end_day = int(msg['publish_end'].strftime('%d'))                page.end_hour = int(msg['publish_end'].strftime('%H'))                page.end_min = int(msg['publish_end'].strftime('%M'))        # Edit        if section == 'edit':            page.title = 'Edit Message'            page.submittext = 'Save Message'            menu.append({'link': 'edit', 'text': 'Edit', 'admin': True})            if not args.get('id'):                page.errors.append('Message ID in request is not a digit.')            else:                msgid = int(args.get('id'))                msg = nav.messages.getMsg(msgid)[0]                page.edit_messageid = msgid                page.formtitle = msg['title']                page.description = msg['description']                page.tech_description = msg['tech_description']                page.start_year = int(msg['publish_start'].strftime('%Y'))                page.start_month = int(msg['publish_start'].strftime('%m'))                page.start_day = int(msg['publish_start'].strftime('%d'))                page.start_hour = int(msg['publish_start'].strftime('%H'))                page.start_min = int(msg['publish_start'].strftime('%M'))                page.end_year = int(msg['publish_end'].strftime('%Y'))                page.end_month = int(msg['publish_end'].strftime('%m'))                page.end_day = int(msg['publish_end'].strftime('%d'))                page.end_hour = int(msg['publish_end'].strftime('%H'))                page.end_min = int(msg['publish_end'].strftime('%M'))                if type(msg['replaces_message']) is int:                    page.replaces_messageid = msg['replaces_message']                    page.replaces_message = \                        nav.messages.getMsg(page.replaces_messageid)[0]                else:                    page.replaces_messageid = False                if type(msg['tasks']) is list:                    page.maint_tasks = []                    for task in msg['tasks']:                        page.maint_tasks.append(str(task['maint_taskid']))                else:                    page.maint_tasks = []        # Form submitted        page.submit = req.form.has_key('submit')        if page.submit:            # Get and control form data            if req.form.has_key('title') and req.form['title']:                title = req.form['title']                page.formtitle = title            else:                page.errors.append('You did not supply a title.')            # Descriptions            if req.form.has_key('description') and req.form['description']:                description = req.form['description']                page.description = description            else:                page.errors.append('You did not supply a description.')            if req.form.has_key('tech_description') and len(req.form['tech_description']) > 0:                tech_description = req.form['tech_description']                page.tech_description = tech_description            else:                tech_description = False            # Publish times            if (req.form.has_key('start_year') and req.form['start_year']                and req.form.has_key('start_month') and req.form['start_month']                and req.form.has_key('start_day') and req.form['start_day']                and req.form.has_key('start_hour') and req.form['start_hour']                and req.form.has_key('start_min') and req.form['start_min']):                publish_start = '%4d-%02d-%02d %02d:%02d' % (                    int(req.form['start_year']), int(req.form['start_month']),                    int(req.form['start_day']), int(req.form['start_hour']),                    int(req.form['start_min']))                publish_start = time.strptime(publish_start, '%Y-%m-%d %H:%M')                page.start_year = int(req.form['start_year'])                page.start_month = int(req.form['start_month'])                page.start_day = int(req.form['start_day'])                page.start_hour = int(req.form['start_hour'])                page.start_min = int(req.form['start_min'])            else:                publish_start = time.localtime()                        if (req.form.has_key('end_year') and req.form['end_year']                and req.form.has_key('end_month') and req.form['end_month']                and req.form.has_key('end_day') and req.form['end_day']                and req.form.has_key('end_hour') and req.form['end_hour']                and req.form.has_key('end_min') and req.form['end_min']):                publish_end = '%4d-%02d-%02d %02d:%02d' % (                    int(req.form['end_year']), int(req.form['end_month']),                    int(req.form['end_day']), int(req.form['end_hour']),                    int(req.form['end_min']))                publish_end = time.strptime(publish_end, '%Y-%m-%d %H:%M')                page.end_year = int(req.form['end_year'])                page.end_month = int(req.form['end_month'])                page.end_day = int(req.form['end_day'])                page.end_hour = int(req.form['end_hour'])                page.end_min = int(req.form['end_min'])            else:                publish_end = time.localtime(int(time.time()) + 7*24*60*60)            if publish_start >= publish_end:                page.errors.append('Publish end is before or same as start, ' \                    + 'message will never be published.')                        # Maintenance tasks            if req.form.has_key('maint_tasks'):                maint_tasks = req.form['maint_tasks']                if type(maint_tasks) is not list:                    maint_tasks = [maint_tasks]                try:                    maint_tasks.remove('none')                except ValueError, error:                    pass                page.maint_tasks = maint_tasks            else:                maint_tasks = []            # Followup            if req.form.has_key('replaces_messageid') \                and req.form['replaces_messageid']:                replaces_messageid = int(req.form['replaces_messageid'])                page.replaces_messageid = replaces_messageid            else:                replaces_messageid = False            # Get ID of message edited            if section == 'edit':                if req.form.has_key('edit_messageid') \                    and req.form['edit_messageid']:                    edit_messageid = int(req.form['edit_messageid'])                else:                    page.errors.append('ID of edited message is missing.')            # Get session data            author = req.session['user'].login            # If any data not okay, form is showed with list of errors on top.            # There is no need to do anything further here.            if len(page.errors):                pass            # No errors, update database            else:                if section == 'edit':                    msgid = edit_messageid                else:                    msgid = False                # Update/Insert message                msgid = nav.messages.setMsg(msgid, title, description,                    tech_description, publish_start, publish_end, author,                    replaces_messageid)                # For updates, remove all existing task connections                if section == 'edit':                    nav.messages.removeMsgTasks(msgid)                # Connect with task                for taskid in maint_tasks:                    nav.messages.setMsgTask(msgid, int(taskid))                # Expire replaced messages                # If a msg is "unreplaced" it will still be expired                #if replaces_messageid:                #    nav.messages.expireMsg(replaces_messageid)                # Redirect to view?id=$newid and exit                req.headers_out['location'] = 'view?id=' + str(msgid)                req.status = apache.HTTP_MOVED_TEMPORARILY                req.send_http_header()                return apache.OK    # Default: Show active messages (public messages)    else:        page = MessagesListTemplate()        page.title = 'Active Messages'        page.msgs = nav.messages.getMsgs('publish_start < now() AND publish_end > now() AND replaced_by IS NULL')    # Check if user is logged in    if req.session['user'].id != 0:        page.authorized = True    else:        page.authorized = False    # Push menu to page    page.menu = menu    if page.authorized:        page.menu.append({'link': 'new', 'text': 'Create new', 'admin': True})    if not page.hasVar('current'):        page.current = section    if not page.hasVar('submittext'):        page.submittext = page.title    # Done, output the page    req.content_type = 'text/html'    req.send_http_header()    req.write(page.respond())    return apache.OK

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -