1 | import errors |
---|
2 | from errors import * |
---|
3 | __all__ = ['errors'] |
---|
4 | __all__.extend(errors.__all__) |
---|
5 | |
---|
6 | from job import GutenbachJob |
---|
7 | __all__.append('GutenbachJob') |
---|
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 | |
---|
16 | from server import IPPServer |
---|
17 | __all__.append('IPPServer') |
---|
18 | |
---|
19 | import BaseHTTPServer |
---|
20 | import logging |
---|
21 | import sys |
---|
22 | import traceback |
---|
23 | import os |
---|
24 | import shutil |
---|
25 | |
---|
26 | # configure and initialize logging |
---|
27 | logger = None |
---|
28 | |
---|
29 | def error(self, request=None, client_address=None): |
---|
30 | logger.fatal(traceback.format_exc()) |
---|
31 | self.gutenbach_printer.running = False |
---|
32 | sys.exit(1) |
---|
33 | |
---|
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 | |
---|
48 | def start(config): |
---|
49 | global logger |
---|
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 | |
---|
58 | logger.info("Starting Gutenbach server...") |
---|
59 | printers = sorted(config['printers'].keys()) |
---|
60 | gutenbach = GutenbachPrinter(printers[0], config['printers'][printers[0]]) |
---|
61 | gutenbach.start() |
---|
62 | |
---|
63 | logger.info("Starting IPP server...") |
---|
64 | server_address = ('', config['port']) |
---|
65 | httpd = BaseHTTPServer.HTTPServer(server_address, IPPServer) |
---|
66 | httpd.handle_error = error.__get__(httpd) |
---|
67 | httpd.gutenbach_printer = gutenbach |
---|
68 | while gutenbach.isAlive(): |
---|
69 | try: |
---|
70 | httpd.handle_request() |
---|
71 | except: |
---|
72 | error(httpd) |
---|
73 | |
---|
74 | __all__.append('start') |
---|