1#!/usr/bin/env python
2
3#
4# A python module that maps printerdata to a dictionary.  We define
5# two classes.  The printerdata class maps to Get/Set/Enum/DeletePrinterData
6# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx
7#
8
9#
10# TODO:
11#
12#   - Implement __delitem__
13#
14
15from samba import spoolss
16
17class printerdata:
18    def __init__(self, host, creds = {}):
19        self.hnd = spoolss.openprinter(host, creds = creds)
20
21    def keys(self):
22        return self.hnd.enumprinterdata().keys()
23
24    def __getitem__(self, key):
25        return self.hnd.getprinterdata(key)['data']
26
27    def __setitem__(self, key, value):
28        # Store as REG_BINARY for now
29        self.hnd.setprinterdata({"key": "", "value": key, "type": 3,
30                                 "data": value})
31
32class printerdata_ex:
33    def __init__(self, host):
34        self.host = host
35        self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver",
36                               "DsUser"]
37
38    def keys(self):
39        return self.top_level_keys
40
41    def has_key(self, key):
42        for k in self.top_level_keys:
43            if k == key:
44                return 1
45        return 0
46
47    class printerdata_ex_subkey:
48        def __init__(self, host, key):
49            self.hnd = spoolss.openprinter(host)
50            self.key = key
51
52        def keys(self):
53            return self.hnd.enumprinterdataex(self.key).keys()
54
55        def __getitem__(self, key):
56            return self.hnd.getprinterdataex(self.key, key)['data']
57
58    def __getitem__(self, key):
59        return self.printerdata_ex_subkey(self.host, key)
60