[e58af05] | 1 | import errors |
---|
| 2 | from errors import * |
---|
| 3 | __all__ = ['errors'] |
---|
| 4 | __all__.extend(errors.__all__) |
---|
| 5 | |
---|
[33ea505] | 6 | from job import GutenbachJob |
---|
| 7 | __all__.append('GutenbachJob') |
---|
[e58af05] | 8 | |
---|
| 9 | from printer import GutenbachPrinter |
---|
| 10 | __all__.append('GutenbachPrinter') |
---|
| 11 | |
---|
| 12 | from requests import make_empty_response, GutenbachRequestHandler |
---|
| 13 | __all__.append('make_empty_response') |
---|
| 14 | __all__.append('GutenbachRequestHandler') |
---|
| 15 | |
---|
[eee389a] | 16 | from server import IPPServer |
---|
[e58af05] | 17 | __all__.append('IPPServer') |
---|
| 18 | |
---|
[287d6ec] | 19 | import BaseHTTPServer |
---|
[d04a689] | 20 | import logging |
---|
[6effd50] | 21 | import sys |
---|
[ee8e6d0] | 22 | import traceback |
---|
[a9eb577e] | 23 | import os |
---|
| 24 | import shutil |
---|
[d04a689] | 25 | |
---|
[e58af05] | 26 | # configure and initialize logging |
---|
[609a9b0] | 27 | logger = None |
---|
[ee8e6d0] | 28 | |
---|
[e58af05] | 29 | def error(self, request=None, client_address=None): |
---|
[ee8e6d0] | 30 | logger.fatal(traceback.format_exc()) |
---|
[eee389a] | 31 | self.gutenbach_printer.running = False |
---|
[6effd50] | 32 | sys.exit(1) |
---|
[478ca74] | 33 | |
---|
[a9eb577e] | 34 | def new_logfile(logfile): |
---|
| 35 | if os.path.exists(logfile): |
---|
| 36 | pth = os.path.abspath(os.path.dirname(logfile)) |
---|
| 37 | filename = os.path.basename(logfile) |
---|
| 38 | logfiles = [f for f in os.listdir(pth) if f.startswith(filename + ".")] |
---|
| 39 | lognums = [0] |
---|
| 40 | for f in logfiles: |
---|
| 41 | try: |
---|
| 42 | lognums.append(int(f.lstrip(filename + "."))) |
---|
| 43 | except TypeError: |
---|
| 44 | pass |
---|
| 45 | nextnum = max(lognums) + 1 |
---|
| 46 | shutil.move(logfile, os.path.join(pth, "%s.%d" % (filename, nextnum))) |
---|
| 47 | |
---|
[609a9b0] | 48 | def start(config): |
---|
| 49 | global logger |
---|
[a9eb577e] | 50 | logkwargs = {} |
---|
| 51 | logkwargs['level'] = getattr(logging, config['loglevel'].upper()) |
---|
| 52 | if 'logfile' in config: |
---|
| 53 | logkwargs['filename'] = config['logfile'] |
---|
| 54 | new_logfile(config['logfile']) |
---|
| 55 | logging.basicConfig(**logkwargs) |
---|
| 56 | logger = logging.getLogger(__name__) |
---|
| 57 | |
---|
[e58af05] | 58 | logger.info("Starting Gutenbach server...") |
---|
[609a9b0] | 59 | printers = sorted(config['printers'].keys()) |
---|
| 60 | gutenbach = GutenbachPrinter(printers[0], config['printers'][printers[0]]) |
---|
[e58af05] | 61 | gutenbach.start() |
---|
| 62 | |
---|
| 63 | logger.info("Starting IPP server...") |
---|
[609a9b0] | 64 | server_address = ('', config['port']) |
---|
[e58af05] | 65 | httpd = BaseHTTPServer.HTTPServer(server_address, IPPServer) |
---|
[6effd50] | 66 | httpd.handle_error = error.__get__(httpd) |
---|
[eee389a] | 67 | httpd.gutenbach_printer = gutenbach |
---|
[e58af05] | 68 | while gutenbach.isAlive(): |
---|
| 69 | try: |
---|
| 70 | httpd.handle_request() |
---|
| 71 | except: |
---|
| 72 | error(httpd) |
---|
[287d6ec] | 73 | |
---|
[e58af05] | 74 | __all__.append('start') |
---|