1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#!/usr/bin/python
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: humberto@openerp.com.ve
# angélicaisabelb@gmail.com
# example of pycups-1.9.52
# Planified by: Nhomar Hernande
# Finance by: Helados Gilda, C.A. http://heladosgilda.com.ve
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import cups
def do_indent (indent):
return " "*indent
def getippqueue (dev, queue, depth):
# print "entro en el metodo: getippqueue"
name = dev.rfind ('/')
name = dev[name + 1:]
dev = dev[6:]
e = dev.find (':')
if e == -1:
e = dev.find ('/')
host = dev[:e]
cups.setServer (host)
try:
c = cups.Connection ()
printers = c.getPrinters ()
classes = c.getClasses ()
except RuntimeError:
# Failed to connect.
return
except cups.IPPError, e:
if e == cups.IPP_OPERATION_NOT_SUPPORTED:
# CUPS-Get-Printers not supported so not a CUPS server.
printers = {}
classes = {}
else:
return
try:
queue = c.getPrinterAttributes (name)
except cups.IPPError, e:
# Failed to connect.
return
dev = queue['device-uri']
getqueue (name, queue, host, depth + 1, printers, classes)
def getqueue (name, queue, host, depth, printers, classes):
#print "entro en el metodo: getqueue"
indent = do_indent(depth)
if queue['printer-type'] & cups.CUPS_PRINTER_CLASS:
# print "%s* Name:\t%s[@%s] (class)" % (indent, name, host)
dev = queue['device-uri']
if dev.startswith ('ipp:'):
getippqueue (dev, queue, depth)
else:
members = classes[name]
depth += 1
indent = do_indent(depth)
for member in members:
getqueue (member, printers[member], host,
depth, printers, classes)
else:
# print "%s* Name:\t%s[@%s]" % (indent, name, host)
dev = queue['device-uri']
info = queue['printer-info']
# print "%sURI:\t%s" % (indent, dev)
# print "%sInfo:\t%s" % (indent, info)
if dev.startswith ('ipp:'):
getippqueue (dev, name, depth)
def gethost (host=None, depth=0):
# print "entro aqui"
if not host:
host = "localhost"
cups.setServer (host)
c = cups.Connection ()
printers = c.getPrinters ()
classes = c.getClasses ()
indent = do_indent(depth)
lista_impresoras=[]
for name, queue in printers.iteritems ():
getqueue (name, queue, host, depth, printers, classes)
lista_impresoras.append(name)
return lista_impresoras
|