def __init__(self, name_ns_pm=None): '''New L{Printer} from a printer name (C{str}), C{NSPrinter} or C{PMPrinter}. @raise TypeError: Invalid I{name_ns_pm}. @raise PrintError: No printer with name I{name_ns_pm}. ''' if not name_ns_pm: # generic printer _PM_Type0.__init__(self, PMPrinter_t()) self._libPCcall(libPC.PMCreateGenericPrinter) pm = self.PM ns = _nsPrinter('Generic', pm) elif isinstance(name_ns_pm, _Strs): for p in get_printers(): if p.name == name_ns_pm: pm = p.PM ns = _nsPrinter(p.name, pm) break else: raise PrintError('no such %s: %r' % (Printer.__name__, name_ns_pm)) elif isinstanceOf(name_ns_pm, PMPrinter_t): pm = name_ns_pm ns = _nsPrinter(cfString2str(libPC.PMPrinterGetName(pm)), pm) elif isObjCInstanceOf(name_ns_pm, NSPrinter, name='name_ns_pm'): ns = name_ns_pm # special method name due to leading underscore pm = send_message(ns, '_printer', restype=PMPrinter_t) _PM_Type0.__init__(self, pm) self._NS = ns # _RO
def _2str(self, libPC_func, *args): s = c_char_p() if args: args += (byref(s), ) self._libPCcall(libPC_func, *args) else: self._libPCcall(libPC_func, byref(s)) return cfString2str(s)
def nsString2str(ns, dflt=None): # XXX an NS*String method '''Create a Python C{str} or C{unicode} from an C{NS[Mutable]Str[ing]}. @param ns: The C{NS[Mutable]Str[ing]} (L{ObjCInstance}). @return: The string (C{str} or C{unicode}) or I{dflt}. ''' # XXX need c_void_p for nested strings in lists, sets, etc.? if not isinstanceOf(ns, NSStr, c_void_p): isObjCInstanceOf(ns, NSConstantString, NSMutableString, NSString, c_void_p, name='ns') return cfString2str(ns, dflt=dflt)
def isAlias(path): '''Resolve a macOS file or folder alias. @param path: The alias name (C{str} or L{NSStr}). @return: The alias' target (C{str}) or C{None} if I{path} isn't a macOS alias. @see: U{mac-alias<https://GitHub.com/al45tair/mac_alias>} and U{here<https://StackOverflow.com/questions/21150169>}. ''' if isinstance(path, _ByteStrs): path = release(NSStr(path)) elif isinstanceOf(path, NSStr, name='path'): pass u = NSURL.alloc().initFileURLWithPath_(path) r = cfURLResolveAlias(u) # URL_t u.release() if r: u = ObjCInstance(r) # URL_t to NSURL r = cfString2str(u.path()) u.release() return r
def name(self): '''Get the printer name (C{str}) or C{""}. ''' if self._name is None: self._name = cfString2str(libPC.PMPrinterGetName(self.PM)).strip() return self._name
def location(self): '''Get the printer location (C{str}) or C{""}. ''' s = libPC.PMPrinterGetLocation(self.PM) return cfString2str(s) if s else _NN_
def ID(self): '''Get the printer IDentifier (C{str}) or C{""}. ''' return cfString2str(libPC.PMPrinterGetID(self.PM)).strip()
def location(self): '''Get the printer location (C{str}). ''' return cfString2str(libPC.PMPrinterGetLocation(self.PM))