Пример #1
0
 def writeInfoItems(self, file):
     wr = self.writeInfoItem
     wr(file, 'Date', asclocaltime())
     wr(file, 'Python ver', sys.version)
     wr(file, 'Op Sys', os.name)
     wr(file, 'Platform', sys.platform)
     wr(file, 'Cur dir', os.getcwd())
Пример #2
0
    def logExceptionToDisk(self, errorMsgFilename=None):
        """Log the exception to disk.

        Writes a tuple containing (date-time, filename,
        pathname, exception-name, exception-data,error report
        filename) to the errors file (typically 'Errors.csv')
        in CSV format. Invoked by `handleException`.
        """
        if not self.setting('LogErrors'):
            return
        err, msg = self._exc[:2]
        err, msg = err.__name__, str(msg)
        logline = (asclocaltime(self._time), self.basicServletName(),
                   self.servletPathname(), err, msg, errorMsgFilename or '')

        def fixElement(element):
            element = str(element)
            if ',' in element or '"' in element:
                element = element.replace('"', '""')
                element = '"%s"' % element
            return element

        logline = map(fixElement, logline)
        filename = self._app.serverSidePath(self.setting('ErrorLogFilename'))
        if os.path.exists(filename):
            f = open(filename, 'a')
        else:
            f = open(filename, 'w')
            f.write('time,filename,pathname,exception name,'
                    'exception data,error report filename\n')
        f.write(','.join(logline) + '\n')
        f.close()
Пример #3
0
 def writeInfoItems(self, file):
     wr = self.writeInfoItem
     wr(file, 'Date', asclocaltime())
     wr(file, 'Python ver', sys.version)
     wr(file, 'Op Sys', os.name)
     wr(file, 'Platform', sys.platform)
     wr(file, 'Cur dir', os.getcwd())
Пример #4
0
    def willWriteCreateSQL(self, generator, out):
        # @@ 2001-02-04 ce: break up this method
        wr = out.write
        kv = self.writeKeyValue
        wr('/*\nStart of generated SQL.\n\n')
        kv(out, 'Date', asclocaltime())
        kv(out, 'Python ver', sys.version)
        kv(out, 'Op Sys', os.name)
        kv(out, 'Platform', sys.platform)
        kv(out, 'Cur dir', os.getcwd())
        kv(out, 'Num classes', len(self._klasses))
        wr('\nClasses:\n')
        for klass in self._model.allKlassesInOrder():
            wr('    %s\n' % klass.name())
        wr('*/\n\n')

        sql = generator.setting('PreSQL', None)
        if sql:
            wr('/* PreSQL start */\n' + sql + '\n/* PreSQL end */\n\n')

        dbName = generator.sqlDatabaseName()
        drop = generator.setting('DropStatements')
        if drop == 'database':
            wr(self.dropDatabaseSQL(dbName))
            wr(self.createDatabaseSQL(dbName))
            wr(self.useDatabaseSQL(dbName))
        elif drop == 'tables':
            wr(self.useDatabaseSQL(dbName))
            wr(self.dropTablesSQL())
        else:
            raise ValueError('Invalid value for DropStatements setting: %r' %
                             drop)
Пример #5
0
    def willWriteCreateSQL(self, generator, out):
        # @@ 2001-02-04 ce: break up this method
        wr = out.write
        kv = self.writeKeyValue
        wr('/*\nStart of generated SQL.\n\n')
        kv(out, 'Date', asclocaltime())
        kv(out, 'Python ver', sys.version)
        kv(out, 'Op Sys', os.name)
        kv(out, 'Platform', sys.platform)
        kv(out, 'Cur dir', os.getcwd())
        kv(out, 'Num classes', len(self._klasses))
        wr('\nClasses:\n')
        for klass in self._model.allKlassesInOrder():
            wr('    %s\n' % klass.name())
        wr('*/\n\n')

        sql = generator.setting('PreSQL', None)
        if sql:
            wr('/* PreSQL start */\n' + sql + '\n/* PreSQL end */\n\n')

        dbName = generator.sqlDatabaseName()
        drop = generator.setting('DropStatements')
        if drop == 'database':
            wr(self.dropDatabaseSQL(dbName))
            wr(self.createDatabaseSQL(dbName))
            wr(self.useDatabaseSQL(dbName))
        elif drop == 'tables':
            wr(self.useDatabaseSQL(dbName))
            wr(self.dropTablesSQL())
        else:
            raise ValueError('Invalid value for DropStatements setting: %r' % drop)
Пример #6
0
    def logExceptionToDisk(self, errorMsgFilename=None):
        """Log the exception to disk.

        Writes a tuple containing (date-time, filename,
        pathname, exception-name, exception-data,error report
        filename) to the errors file (typically 'Errors.csv')
        in CSV format. Invoked by `handleException`.

        """
        if not self.setting('LogErrors'):
            return
        err, msg = self._exc[:2]
        if isinstance(err, basestring): # string exception
            err, msg = '', str(msg or err)
        else:
            err, msg = err.__name__, str(msg)
        logline = (asclocaltime(self._time),
            self.basicServletName(), self.servletPathname(),
            err, msg, errorMsgFilename or '')
        def fixElement(element):
            element = str(element)
            if ',' in element or '"' in element:
                element = element.replace('"', '""')
                element = '"%s"' % element
            return element
        logline = map(fixElement, logline)
        filename = self._app.serverSidePath(self.setting('ErrorLogFilename'))
        if os.path.exists(filename):
            f = open(filename, 'a')
        else:
            f = open(filename, 'w')
            f.write('time,filename,pathname,exception name,'
                'exception data,error report filename\n')
        f.write(','.join(logline) + '\n')
        f.close()
Пример #7
0
    def log(self, message):
        """Log a message.

        This can be invoked to print messages concerning the servlet.
        This is often used by self to relay important information back
        to developers.
        """
        print '[%s] [msg] %s' % (asclocaltime(), message)
Пример #8
0
 def generatePNGImage(self):
     """Generate and return a PNG example image."""
     def f(x):
         return x, sin(x)
     draw = Drawing()
     draw.text((2.7, 0.8), 'y=sin(x)', black)
     draw.text((0.2, -0.8), 'created: ' + asclocaltime(), red)
     draw.lines(((0, 0), (2*pi, 0)), black) # x-axis
     draw.lines(((0, -1), (0, 1)), black) # y-axis
     draw.lines(map(f, map(lambda x: x*2*pi/X, xrange(X+1))), blue)
     return draw.png()
Пример #9
0
    def logExceptionToConsole(self, stderr=None):
        """Log an exception.

        Logs the time, servlet name and traceback to the console
        (typically stderr). This usually results in the information
        appearing in console/terminal from which AppServer was launched.
        """
        if stderr is None:
            stderr = sys.stderr
        stderr.write('[%s] [error] WebKit: Error while executing script %s\n' %
                     (asclocaltime(self._time), self.servletPathname()))
        traceback.print_exc(file=stderr)
Пример #10
0
    def logExceptionToConsole(self, stderr=None):
        """Log an exception.

        Logs the time, servlet name and traceback to the console
        (typically stderr). This usually results in the information
        appearing in console/terminal from which AppServer was launched.
        """
        if stderr is None:
            stderr = sys.stderr
        stderr.write('[%s] [error] WebKit: Error while executing script %s\n'
            % (asclocaltime(self._time), self.servletPathname()))
        traceback.print_exc(file=stderr)
Пример #11
0
    def generatePNGImage(self):
        """Generate and return a PNG example image."""
        def f(x):
            return x, sin(x)

        draw = Drawing()
        draw.text((2.7, 0.8), 'y=sin(x)', black)
        draw.text((0.2, -0.8), 'created: ' + asclocaltime(), red)
        draw.lines(((0, 0), (2 * pi, 0)), black)  # x-axis
        draw.lines(((0, -1), (0, 1)), black)  # y-axis
        draw.lines(map(f, map(lambda x: x * 2 * pi / X, xrange(X + 1))), blue)
        return draw.png()
Пример #12
0
 def printStartUpMessage(self):
     """Invoked by __init__, prints a little intro."""
     print 'WebKit AppServer', self.version()
     print 'Part of Webware for Python.'
     print 'Copyright 1999-2010 by Chuck Esterbrook. All Rights Reserved.'
     print 'WebKit and Webware are open source.'
     print
     print 'Process id is', os.getpid()
     print 'Date/time is', asclocaltime()
     print 'Python is', sys.version.replace(') [', ')\n[')
     print
     if self.setting('PrintConfigAtStartUp'):
         self.printConfig()
Пример #13
0
 def printStartUpMessage(self):
     """Invoked by __init__, prints a little intro."""
     print 'WebKit AppServer', self.version()
     print 'Part of Webware for Python.'
     print 'Copyright 1999-2010 by Chuck Esterbrook. All Rights Reserved.'
     print 'WebKit and Webware are open source.'
     print
     print 'Process id is', os.getpid()
     print 'Date/time is', asclocaltime()
     print 'Python is', sys.version.replace(') [', ')\n[')
     print
     if self.setting('PrintConfigAtStartUp'):
         self.printConfig()
Пример #14
0
 def printStartUpMessage(self):
     """Print a little intro to the activity log."""
     print('Webware for Python', self.webwareVersionString(), 'Application')
     print()
     print('Process id:', os.getpid())
     print('Start date/time:', asclocaltime())
     print('Python:', sys.version)
     print()
     if self.development():
         print("Running in development mode")
         print()
     if self.setting('PrintConfigAtStartUp'):
         self.printConfig()
Пример #15
0
    def writeMiscInfo(self):
        """Output misc info.

        Write a couple little pieces of information about the environment.
        """
        self.writeTitle('MiscInfo')
        info = {
            'time': asclocaltime(self._time),
            'filename': self.servletPathname(),
            'os.getcwd()': os.getcwd(),
            'sys.path': sys.path,
            'sys.version': sys.version,
        }
        self.writeDict(info)
Пример #16
0
    def writeMiscInfo(self):
        """Output misc info.

        Write a couple little pieces of information about the environment.
        """
        self.writeTitle('MiscInfo')
        info = {
            'time':        asclocaltime(self._time),
            'filename':    self.servletPathname(),
            'os.getcwd()': os.getcwd(),
            'sys.path':    sys.path,
            'sys.version': sys.version,
        }
        self.writeDict(info)
Пример #17
0
 def printStartUpMessage(self):
     """Invoked by __init__, prints a little intro."""
     print "WebKit AppServer", self.version()
     print "Part of Webware for Python."
     print "Copyright 1999-2010 by Chuck Esterbrook. All Rights Reserved."
     print "WebKit and Webware are open source."
     print "Please visit: http://www.webwareforpython.org"
     print
     print "Process id is", os.getpid()
     print "Date/time is", asclocaltime()
     print "Python is", sys.version.replace(") [", ")\n[")
     print
     if self.setting("PrintConfigAtStartUp"):
         self.printConfig()
Пример #18
0
    def saveErrorPage(self, html):
        """Save the error page.

        Saves the given HTML error page for later viewing by
        the developer, and returns the filename used.
        """
        filename = os.path.join(self._app._errorMessagesDir,
            self.errorPageFilename())
        try:
            with open(filename, 'w') as f:
                f.write(html)
        except IOError:
            sys.stderr.write('[%s] [error] WebKit: Cannot save error page (%s)\n'
                % (asclocaltime(self._time), filename))
        else:
            return filename
Пример #19
0
def shutDown(signum, frame):
    """Signal handler for shutting down the server."""
    print
    print "App server has been signaled to shutdown."
    if server and server._running > 2:
        print "Shutting down at", asclocaltime()
        sys.stdout.flush()
        server._running = 2
        if signum == SIGINT:
            raise KeyboardInterrupt
        elif signum == SIGHUP:
            sys.exit(3)  # force reload
        else:
            sys.exit(0)  # normal exit
    else:
        print "No running app server was found."
Пример #20
0
    def saveErrorPage(self, html):
        """Save the error page.

        Saves the given HTML error page for later viewing by
        the developer, and returns the filename used.
        """
        filename = os.path.join(self._app._errorMessagesDir,
                                self.errorPageFilename())
        try:
            with open(filename, 'w') as f:
                f.write(html)
        except IOError:
            sys.stderr.write(
                '[%s] [error] WebKit: Cannot save error page (%s)\n' %
                (asclocaltime(self._time), filename))
        else:
            return filename
Пример #21
0
def threadDump(signum, frame):
    """Signal handler for dumping thread stack frames to stdout."""
    print
    print "App server has been signaled to attempt a thread dump."
    print
    print "Thread stack frame dump at", asclocaltime()
    sys.stdout.flush()
    frames = sys._current_frames()
    print
    print "-" * 79
    print
    for threadID in sorted(frames):
        frame = frames[threadID]
        print "Thread ID: %d (reference count = %d)" % (
            threadID, sys.getrefcount(frame))
        print ''.join(traceback.format_list(traceback.extract_stack(frame)))
    print "-" * 79
    sys.stdout.flush()
Пример #22
0
    def willWriteSQL(self, generator, out):
        wr = out.write
        kv = self.writeKeyValue
        wr('/*\nStart of generated SQL.\n\n')
        kv(out, 'Date', asclocaltime())
        kv(out, 'Python ver', sys.version)
        kv(out, 'Op Sys', os.name)
        kv(out, 'Platform', sys.platform)
        kv(out, 'Cur dir', os.getcwd())
        kv(out, 'Num classes', len(self._klasses))
        wr('\nClasses:\n')
        for klass in self._klasses:
            wr('    %s\n' % klass.name())
        wr('*/\n\n')

        sql = generator.setting('PreSQL', None)
        if sql:
            wr('/* PreSQL start */\n' + sql + '\n/* PreSQL end */\n\n')

        # If database doesn't exist create it.
        dbName = generator.dbName()
Пример #23
0
    def willWriteSQL(self, generator, out):
        wr = out.write
        kv = self.writeKeyValue
        wr("/*\nStart of generated SQL.\n\n")
        kv(out, "Date", asclocaltime())
        kv(out, "Python ver", sys.version)
        kv(out, "Op Sys", os.name)
        kv(out, "Platform", sys.platform)
        kv(out, "Cur dir", os.getcwd())
        kv(out, "Num classes", len(self._klasses))
        wr("\nClasses:\n")
        for klass in self._klasses:
            wr("    %s\n" % klass.name())
        wr("*/\n\n")

        sql = generator.setting("PreSQL", None)
        if sql:
            wr("/* PreSQL start */\n" + sql + "\n/* PreSQL end */\n\n")

        # If database doesn't exist create it.
        dbName = generator.dbName()
Пример #24
0
    def willWriteSQL(self, generator, out):
        wr = out.write
        kv = self.writeKeyValue
        wr('/*\nStart of generated SQL.\n\n')
        kv(out, 'Date', asclocaltime())
        kv(out, 'Python ver', sys.version)
        kv(out, 'Op Sys', os.name)
        kv(out, 'Platform', sys.platform)
        kv(out, 'Cur dir', os.getcwd())
        kv(out, 'Num classes', len(self._klasses))
        wr('\nClasses:\n')
        for klass in self._klasses:
            wr('    %s\n' % klass.name())
        wr('*/\n\n')

        sql = generator.setting('PreSQL', None)
        if sql:
            wr('/* PreSQL start */\n' + sql + '\n/* PreSQL end */\n\n')

        # If database doesn't exist create it.
        dbName = generator.dbName()
Пример #25
0
    def logExceptionToDisk(self, errorMsgFilename=None):
        """Log the exception to disk.

        Writes a tuple containing (date-time, filename, pathname,
        exception-name, exception-data, error report filename)
        to the errors file (typically 'Errors.csv') in CSV format.
        Invoked by `handleException`.
        """
        if not self.setting('LogErrors'):
            return
        err, msg = self._exc[:2]
        err, msg = err.__name__, str(msg)

        logLine = (
            asclocaltime(self._time),
            self.basicServletName(), self.servletPathname(),
            err, msg, errorMsgFilename or '')

        def fixElement(element):
            element = str(element)
            if ',' in element or '"' in element:
                element = element.replace('"', '""')
                element = f'"{element}"'
            return element

        logLine = ','.join(map(fixElement, logLine)) + '\n'
        filename = self._app.setting('ErrorLogFilename')
        try:
            if os.path.exists(filename):
                with open(filename, 'a') as f:
                    f.write(logLine)
            else:
                with open(filename, 'w') as f:
                    f.write(
                        'time,filename,pathname,exception name,'
                        'exception data,error report filename\n')
                    f.write(logLine)
        except Exception as e:
            print('Could not write to error log:', e)
Пример #26
0
    def emailException(self, htmlErrMsg):
        """Email the exception.

        Send the exception via mail, either as an attachment,
        or as the body of the mail.
        """
        message = Message()

        # Construct the message headers
        headers = self.setting('ErrorEmailHeaders').copy()
        headers['Date'] = formatdate()
        headers['Mime-Version'] = '1.0'
        headers['Subject'] = '{} {}: {}'.format(
            headers.get('Subject', '[Webware Error]'),
            *sys.exc_info()[:2])
        for header, value in headers.items():
            if isinstance(value, (list, tuple)):
                value = ','.join(value)
            message.add_header(header, value)

        # Construct the message body
        if self.setting('EmailErrorReportAsAttachment'):
            # start off with a text/plain part
            text = self._emailBody.format(path=self.servletPathname(),
                                          ascTime=asclocaltime(self._time),
                                          time=self._time)
            message.set_type('multipart/mixed')
            part = Message()
            part.set_type('text/plain')
            body = StringIO()
            body.write(text)
            traceback.print_exc(file=body)
            part.set_payload(body.getvalue())
            body.close()
            message.attach(part)
            part = Message()
            # now add htmlErrMsg
            part.add_header('Content-Transfer-Encoding', '7bit')
            part.add_header('Content-Description',
                            'HTML version of Webware error message')
            part.add_header('Content-Disposition',
                            'attachment',
                            filename='WebwareErrorMsg.html')
            part.set_type('text/html')
            part.set_payload(htmlErrMsg)
            message.attach(part)
        else:
            message.set_type('text/html')
            message.set_payload(htmlErrMsg, 'us-ascii')

        # Send the message
        server = self.setting('ErrorEmailServer')
        # This setting can be: server, server:port, server:port:user:password
        # or server:port:user:password:popserver:popport for "smtp after pop".
        parts = server.split(':', 5)
        server = port = user = passwd = None
        popserver = popssl = popport = None
        try:
            # fetch individual parts until we get an IndexError
            server = parts[0]
            try:
                port = int(parts[1])
            except ValueError:
                pass
            user = parts[2]
            passwd = parts[3]
            popserver = parts[4]
            try:
                popport = int(parts[5])
            except ValueError:
                popport = None
            if parts[6].lower() == 'ssl':
                popssl = True
        except IndexError:
            pass
        if user and passwd and popserver:
            # SMTP after POP
            if popssl is None and popport == 995:
                popssl = True
            popssl = poplib.POP3_SSL if popssl else poplib.POP3
            if popport:
                popserver = popssl(popserver, popport)
            else:
                popserver = popssl(popserver)
            popserver.set_debuglevel(0)
            popserver.user(user)
            popserver.pass_(passwd)
            try:
                popserver.quit()
            except Exception:
                pass
        if port:
            server = smtplib.SMTP(server, port)
        else:
            server = smtplib.SMTP(server)
        try:
            server.set_debuglevel(0)
            if user and passwd and not popserver:
                # SMTP-AUTH
                server.ehlo()
                if server.has_extn('starttls'):
                    server.starttls()
                    server.ehlo()
                server.login(user, passwd)
            body = message.as_string()
            server.sendmail(headers['From'], headers['To'], body)
        finally:
            try:
                server.quit()
            except Exception:
                pass
Пример #27
0
 def timeStamp(self):
     """Return time() as a human readable string, useful for logging and debugging."""
     return asclocaltime(self.time())
Пример #28
0
def shutDown(arg1, arg2):
    print "Shutdown Called", asclocaltime()
    if server:
        server.initiateShutdown()
    else:
        print 'WARNING: No server reference to shutdown.'
Пример #29
0
    def emailException(self, htmlErrMsg):
        """Email the exception.

        Send the exception via mail, either as an attachment,
        or as the body of the mail.

        """
        message = Message()

        # Construct the message headers
        headers = self.setting('ErrorEmailHeaders').copy()
        headers['Date'] = formatdate()
        headers['Mime-Version'] = '1.0'
        headers['Subject'] = headers.get('Subject',
            '[WebKit Error]') + ' %s: %s' % sys.exc_info()[:2]
        for h, v in headers.items():
            if isinstance(v, (list, tuple)):
                v = ','.join(v)
            message.add_header(h, v)

        # Construct the message body
        if self.setting('EmailErrorReportAsAttachment'):
            # start off with a text/plain part
            text = ('WebKit caught an exception while processing'
                ' a request for "%s" at %s (timestamp: %s).'
                ' The plain text traceback from Python is printed below and'
                ' the full HTML error report from WebKit is attached.\n\n'
                    % (self.servletPathname(),
                        asclocaltime(self._time), self._time))
            message.set_type('multipart/mixed')
            part = Message()
            part.set_type('text/plain')
            body = StringIO()
            body.write(text)
            traceback.print_exc(file=body)
            part.set_payload(body.getvalue())
            body.close()
            message.attach(part)
            part = Message()
            # now add htmlErrMsg
            part.add_header('Content-Transfer-Encoding', '7bit')
            part.add_header('Content-Description',
                'HTML version of WebKit error message')
            part.add_header('Content-Disposition',
                'attachment', filename='WebKitErrorMsg.html')
            part.set_type('text/html')
            part.set_payload(htmlErrMsg)
            message.attach(part)
        else:
            message.set_type('text/html')
            message.set_payload(htmlErrMsg, 'us-ascii')

        # Send the message
        server = self.setting('ErrorEmailServer')
        # This setting can be: server, server:port, server:port:user:password
        # or server:port:user:password:popserver:popport for "smtp after pop".
        parts = server.split(':', 5)
        server = port = user = passwd = None
        popserver = popssl = popport = None
        try:
            server = parts[0]
            try:
                port = int(parts[1])
            except ValueError:
                pass
            user = parts[2]
            passwd = parts[3]
            popserver = parts[4]
            try:
                popport = int(parts[5])
            except ValueError:
                popport = None
            if parts[6].lower() == 'ssl':
                popssl = True
        except IndexError:
            pass
        if user and passwd and popserver:
            # SMTP after POP
            if popssl is None and popport == 995:
                popssl = True
            popssl = popssl and poplib.POP3_SSL or poplib.POP3
            if popport:
                popserver = popssl(popserver, popport)
            else:
                popserver = popssl(popserver)
            popserver.set_debuglevel(0)
            popserver.user(user)
            popserver.pass_(passwd)
            try:
                popserver.quit()
            except Exception:
                pass
        if port:
            server = smtplib.SMTP(server, port)
        else:
            server = smtplib.SMTP(server)
        try:
            server.set_debuglevel(0)
            if user and passwd and not popserver:
                # SMTP-AUTH
                server.ehlo()
                if server.has_extn('starttls'):
                    server.starttls()
                    server.ehlo()
                server.login(user, passwd)
            body = message.as_string()
            server.sendmail(headers['From'], headers['To'], body)
        finally:
            try:
                server.quit()
            except Exception:
                pass
Пример #30
0
 def writeContent(self):
     self.write('<h4>The current time is:</h4>')
     self.write('<h5 style="color:green">', asclocaltime(), '</h5>')
Пример #31
0
 def writeContent(self):
     self.write('<h4>The current time is:</h4>')
     self.write('<h5 style="color:green">', asclocaltime(), '</h5>')
Пример #32
0
 def testAsclocaltime(self):
     self.assertEqual(len(asclocaltime()), 24)
     t = time.time()
     self.assertEqual(asclocaltime(t), time.asctime(time.localtime(t)))