annotate zebra.py @ 7:0687a6666873

Case insensitive platform
author Ben Croston <ben@croston.org>
date Sat, 13 Aug 2011 08:37:53 +0100
parents ad9d9bf61243
children 19fd067db7ca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
1 #!/usr/bin/env python
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
2 # NOTE: this package is Linux specific at the moment
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
3
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
4 import subprocess
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
5 import os.path
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
6 import sys
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
7 if sys.platform.lower().startswith('win'):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
8 import win32print
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
9
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
10 class zebra(object):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
11 def __init__(self, queue=None):
1
21c3229ed401 Tidy up
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 0
diff changeset
12 """queue - name of the printer queue"""
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
13 self.queue = queue
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
14
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
15 def _output_unix(self, commands):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
16 if self.queue == 'zebra_python_unittest':
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
17 p = subprocess.Popen(['cat','-'], stdin=subprocess.PIPE)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
18 else:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
19 p = subprocess.Popen(['lpr','-P%s'%self.queue], stdin=subprocess.PIPE)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
20 if type(commands) == bytes:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
21 p.communicate(commands)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
22 else:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
23 p.communicate(str(commands).encode())
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
24 p.stdin.close()
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
25
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
26 def _output_win(self, commands):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
27 raise Exception('Not yet implemented')
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
28
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
29 def output(self, commands):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
30 assert self.queue is not None
7
0687a6666873 Case insensitive platform
Ben Croston <ben@croston.org>
parents: 2
diff changeset
31 if sys.platform.lower().startswith('win'):
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
32 self._output_win(commands)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
33 else:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
34 self._output_unix(commmands)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
35
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
36 def _getqueues_unix(self):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
37 queues = []
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
38 output = subprocess.check_output(['lpstat','-p'], universal_newlines=True)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
39 for line in output.split('\n'):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
40 if line.startswith('printer'):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
41 queues.append(line.split(' ')[1])
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
42 return queues
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
43
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
44 def _getqueues_win(self):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
45 raise Exception('Not yet implemented')
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
46
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
47 def getqueues(self):
7
0687a6666873 Case insensitive platform
Ben Croston <ben@croston.org>
parents: 2
diff changeset
48 if sys.platform.lower().startswith('win'):
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
49 return self._getqueues_win()
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
50 else:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
51 return self._getqueues_unix()
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
52
1
21c3229ed401 Tidy up
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 0
diff changeset
53 def setqueue(self, queue):
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
54 self.queue = queue
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
55
2
ad9d9bf61243 Change direct transfer to direct thermal
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 1
diff changeset
56 def setup(self, direct_thermal=None, label_height=None, label_width=None):
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
57 commands = '\n'
2
ad9d9bf61243 Change direct transfer to direct thermal
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 1
diff changeset
58 if direct_thermal:
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
59 commands += ('OD\n')
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
60 if label_height:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
61 commands += ('Q%s,%s\n'%(label_height[0],label_height[1]))
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
62 if label_width:
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
63 commands += ('q%s\n'%label_width)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
64 self.output(commands)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
65
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
66 def store_graphic(self, name, filename):
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
67 assert filename.endswith('.pcx')
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
68 commands = '\nGK"%s"\n'%name
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
69 commands += 'GK"%s"\n'%name
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
70 size = os.path.getsize(filename)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
71 commands += 'GM"%s"%s\n'%(name,size)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
72 self.output(commands)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
73 self.output(open(filename,'rb').read())
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
74
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
75 if __name__ == '__main__':
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
76 z = zebra()
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
77 print 'Printer queues found:',z.getqueues()
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
78 z.setqueue('zebra_python_unittest')
2
ad9d9bf61243 Change direct transfer to direct thermal
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 1
diff changeset
79 z.setup(direct_thermal=True, label_height=(406,32), label_width=609) # 3" x 2" direct thermal label
1
21c3229ed401 Tidy up
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 0
diff changeset
80 z.store_graphic('logo','logo.pcx')
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
81 label = """
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
82 N
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
83 GG419,40,"logo"
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
84 A40,80,0,4,1,1,N,"Tangerine Duck 4.4%"
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
85 A40,198,0,3,1,1,N,"Duty paid on 39.9l"
1
21c3229ed401 Tidy up
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents: 0
diff changeset
86 A40,240,0,3,1,1,N,"Gyle: 127 Best Before: 16/09/2011"
0
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
87 A40,320,0,4,1,1,N,"Pump & Truncheon"
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
88 P1
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
89 """
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
90 z.output(label)
5bd9ee5c0cae Initial version
Ben Croston <ben@fuzzyduckbrewery.co.uk>
parents:
diff changeset
91