NEWS ---- New in 2.0.4: - remove the install_requires from setup.py New in 2.0.2a0, 2.0.3: - attempts to fix installation in PyPi New in 2.0.2: - removed shebang from example/cupstree.py - ignore driverless utilities for postscriptdriver tags creation (Fedora bug #1873385) - remove epydoc from Makefile (#27) - fix invalid delete of pointer (#11) - Makefile uses wrong Python (#32) - define PY_SSIZE_T_CLEAN in cupsipp.h - fixes traceback during IPPRequest.writeIO with Python 3.10 - fix the test.py when there is no printer installed (#46) - Use PyObject_Call() instead of deprecated PyEval New in 2.0.1: * pypi required .tar.gz * cups.require couldn't handle version bigger than 1 New in 2.0.0: * dropped macros for older CUPS < 2.0.0 * dropped Python 2 support and its related macros * update license headers * thread did not hold GIL when called Py_XDECREF() from destroy_TLS(), causing SIGSEGV(Fedora bug #1816107) * fixed several compiler warnings * fix silent error on Connection.printFiles() (patch by Wilbert Berendsen) New in 1.9.74: * fix Connection_writeRequestData with binary data (https://github.com/zdohnal/pycups/pull/1) * misspelling (patch by Edward Betts) * fixed print function in example/cupstree.py (patch by Jiri Popelka) New in 1.9.73: * Fixed build for CUPS 1.6.3 by making several constants conditional on CUPS >= 1.7. New in 1.9.72: * Removed private CANCEL_DOCUMENT, GET_DOCUMENT_ATTRIBUTES, GET_DOCUMENTS, DELETE_DOCUMENT, SET_DOCUMENT_ATTRIBUTES IPP operation constants. * Fixed build for CUPS 1.4 by making several constants conditional on CUPS >= 1.5. New in 1.9.71: * Fixes for cups.IPP_JOB_CANCELED, cups.IPP_ERROR_JOB_CANCELED, cups.IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED, cups.IPP_AUTHENTICATION_CANCELED, cups.IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED, and cups.IPP_UPGRADE_REQUIRED. New in 1.9.70: * cups.ippErrorString(). Fixed build with CUPS 1.5. New-style (CUPS 1.6) naming for HTTP status (cups.HTTP_STATUS_*), IPP orientation (cups.IPP_ORIENT_*), IPP status (cups.IPP_STATUS_*), and IPP I/O (cups.IPP_STATE_*) constants. New in 1.9.69: * cups.IPPRequest.operation, cups.IPPRequest.state, cups.IPPRequest.statuscode, cups.ippOpString(), cups.IPP_OP_*, cups.IPPRequest.addSeparator(), cups.IPPRequest.add(), cups.IPPRequest.writeIO(). New in 1.9.68: * Now builds against CUPS 2.0. * The rpm provider script is now Python3. New in 1.9.67: * Bindings for streaming API: cups.CUPS_FORMAT_* constants, cups.createJob(), cups.startDocument(), cups.writeRequestData(), cups.finishDocument(). New in 1.9.66: * Python 3 support. New in 1.9.65: * cups.connectDest() API fix: now returns a tuple. * cups.enumDests(), cups.connectDest(), and cups.CUPS_DEST_FLAGS_* constants (requires CUPS 1.6). New in 1.9.63: * cups.IPPError tuple now contains the specific error string, if one is available. New in 1.9.62: * Define all constants regardless of which version of CUPS is built against. New in 1.9.60: * New constants from 1.5: - IPP_AUTHENTICATION_CANCELED - IPP_PKI_ERROR - HTTP_NOT_IMPLEMENTED - HTTP_BAD_GATEWAY - HTTP_SERVICE_UNAVAILABLE - HTTP_GATEWAY_TIMEOUT - HTTP_NOT_SUPPORTED - HTTP_AUTHORIZATION_CANCELED - HTTP_PKI_ERROR New in 1.9.59: * Password callbacks can now return None to indicate they want to abort the current operation. New in 1.9.58: * cups.Connection.adminExportSamba New in 1.9.57: * Fixed rpm provides script for newer versions of rpm. New in 1.9.56: * Builds against older versions of CUPS again. New in 1.9.55: * cups.IPP_QUALITY_DRAFT, cups.IPP_QUALITY_NORMAL, cups.IPP_QUALITY_HIGH * cups.IPP_PORTRAIT, cups.IPP_LANDSCAPE, cups.IPP_REVERSE_PORTRAIT, cups.IPP_REVERSE_LANDSCAPE * cups.IPP_RES_UNITS_CM, cups.IPP_RES_UNITS_INCH * Support for IPP_TAG_RESOLUTION as triplet (xres, yres, units). New in 1.9.52: * cups.Connection.getPPDs2(): New method, identical to getPPDs() but returning all attribute values as lists. New in 1.9.50: * cups.Connection.getPPD3() * cups.Connection.getJobs() now takes optional requested_attributes argument. * cups.Connection.getPrinterAttributes(): member-names is now always a list. * cups.HTTP_NOT_MODIFIED constant. * cups.PPD_ORDER_ANY constant. * cups.PPD_ORDER_DOCUMENT constant. * cups.PPD_ORDER_EXIT constant. * cups.PPD_ORDER_JCL constant. * cups.PPD_ORDER_PAGE constant. * cups.PPD_ORDER_PROLOG constant. * cups.PPD.emitString() method. * cups.PPD.emit() method. * cups.PPD.emitAfterOrder() method. * cups.PPD.emitFd() method. * cups.PPD.emitJCL() method. * cups.PPD.emitJCLEnd() method. New in 1.9.48: * cups.Connection.cancelJob()'s optional second argument is now a keyword. New in 1.9.47: * cups.Connection.restartJob() now takes optional job_hold_until argument. * cups.Connection.cancelJob() now takes optional purge_job argument. * cups.setPasswordCB2() method. * cups.Connection.moveJob() method. * cups.IPPAttribute and cups.IPPRequest types. * IPP state constants. * cups.Connection.getDevices() now takes optional timeout argument. New in 1.9.46: * cups.Connection.getDevices() now takes optional limit, exclude_schemes and include_schemes arguments. * cups.Connection.getPPDs() now takes optional limit, exclude_schemes, include_schemes, ppd_device_id, ppd_make, ppd_make_and_model, ppd_model_number, ppd_product, ppd_psversion, ppd_type and ppd_natural_language arguments. * cups.ppdSetConformance() method. * cups.PPD_CONFORM_RELAXED constant. * cups.PPD_CONFORM_STRICT constant. * cups.modelSort() now accepts Unicode strings. New in 1.9.45: * cups.PPD.localizeIPPReason() * cups.PPD.localizeMarkerName() New in 1.9.42: * cups.Connection.getJobAttributes() now takes optional requested_attributes argument. * cups.Connection.getJobs() now takes optional limit and first_job_id arguments. New in 1.9.41: * cups.Connection.putFile() now accepts a file descriptor or a Python file object as the destination. New in 1.9.40: * cups.Connection() now takes optional arguments host, port, and encryption. * cups.Connection.getPrinterAttributes() now takes an optional requested_attributes argument New in 1.9.39: * cups.Connection.authenticateJob() auth parameter is now optional * cups.Connection.printFile() * cups.Connection.printFiles() New in 1.9.38: * cups.Connection.getFile() now accepts a file descriptor or a Python file object as the destination. New in 1.9.37: * cups.Connection.authenticateJob() * cups.CUPS_PRINTER_DISCOVERED New in 1.9.36: * cups.Connection.renewSubscription() now takes an optional parameter lease_duration. * cups.Connection.getJobAttributes() and cups.Connection.getNotifications(): State reasons are now lists as they ought to be. New in 1.9.35: * cups.Connection.getJobAttributes() * cups.Connection.cancelAllJobs() New in 1.9.32: * cups.Connection.getPrinterAttributes() now takes a uri keyword argument for fetching attributes from non-CUPS IPP servers. New in 1.9.31: * cups.Connection.getDocument() * cups.Connection.getDefault() New in 1.9.29: * IPP attribute strings are now represented as Unicode objects. New in 1.9.28: * cups.Connection.getDests() now includes a (None,None) key in its result for identifying the default printer. This is intended to be equivalent to cupsGetDest(NULL, NULL, ...). New in 1.9.27: * IPP attributes with type IPP_TAG_NOVALUE now take Python value None. New in 1.9.25: * cups.CUPS_SERVER_REMOTE_ANY (for CUPS 1.3) * cups.Connection.getServerPPD() New in 1.9.23: * cups.require() New in 1.9.22: * cups.Connection.getPPDs() and cups.Connection.getDevices() now allow threads during the IO request * cups.Connection.printTestPage() now optionally takes more parameters than just the printer name New in 1.9.21: * cups.Connection.getSubscriptions() * cups.Connection.createSubscription() * cups.Connection.getNotifications() * cups.Connection.renewSubscription() * cups.Connection.cancelSubscription() * cups.CUPS_PRINTER_COMMANDS New in 1.9.20: * cups.Connection.getPrinters() 'printer-state-reasons' attribute is now a list (as it ought to have been originally). New in 1.9.19: * cups.IPP_JOB_* job states New in 1.9.18: * cups.Connection.getJobs() now includes job-state, job-preserved, time-at-creation, time-at-processing, time-at-completed, job-media-sheets, and job-media-sheets-completed attributes. * cups.Connection.getJobs() has new optional parameters which_jobs and my_jobs. * cups.Connection.setJobHoldUntil() * cups.Connection.restartJob() New in 1.9.17: * cups.PPD.localize() New in 1.9.16: * cups.Connection.getPrinters() now includes printer-state-message and printer-state-reasons attributes * cups.Connection.disablePrinter() and cups.Connection.rejectJobs() now take an optional 'reason' keyword argument and use it to set printer-state-message * cups.Connection.getJobs() now includes job-priority attribute New in 1.9.15: * cups.Connection.getJobs() * cups.Connection.cancelJob() New in 1.9.13: * cups.HTTP_FORBIDDEN New since 1.9.10: * cups.HTTP_* status codes New since 1.9.9: * cups.Connection getClasses() handles IPP_NOT_FOUND * PYCUPS_DEBUG environment variable controls debugging output New since 1.9.8: * cups.Connection.addPrinterOptionDefault() now supports lists and tuples * cups.Connection.getPrinterAttributes() now handles multi-valued default options as lists * cups.IPP_FINISHINGS_* constants * cups.Connection getPrinters() handles IPP_NOT_FOUND New since 1.9.7: * cups.Connection.adminGetServerSettings() * cups.Connection.adminSetServerSettings() * cups.CUPS_SERVER_* string constants New since 1.9.6: * threading support * cups.Dest type * cups.Connection.addPrinterOptionDefault() * cups.Connection.deletePrinterOptionDefault() * cups.Connection.getDests() New since 1.9.5: * cups.Attribute object * cups.PPD.attributes * cups.PPD.findAttr() * cups.PPD.findNextAttr() New since 1.9.4: * cups.Connection.setPrinterShared() now handles classes * cups.Connection.printTestPage() * cups.Connection.getPPDs() includes ppd-make attribute * cups.IPP_MAX_NAME New since 1.9.3: * cups.Connection.enablePrinter() uses IPP_PAUSE_PRINTER * cups.Connection.disablePrinter() uses IPP_RESUME_PRINTER * cups.Connection.deleteClass() * cups.Connection.setPrinterLocation() and cups.Connection.setPrinterInfo() now handle classes New since 1.9.2: * cups.PPD.* now convert from the PPD character set encoding * cups.Connection.setPrinterPublished() is now renamed to cups.Connection.setPrinterShared() * cups.Connection.setPrinterUsersAllowed() * cups.Connection.setPrinterUsersDenied() New since 1.9.1: * fixed cups.Connection.setPrinterInfo() * fixed cups.Connection.setPrinterLocation() * cups.Connection.getPrinterAttributes() * cups.Connection.setPrinterJobSheets() * cups.Connection.setPrinterErrorPolicy() * cups.Connection.setPrinterOpPolicy() * cups.PPD.nondefaultsMarked() * cups.IPP_* error constants New since 1.9.0: * cups.Constraint type * cups.IPPError now includes the cupsLastErrorString() * cups.IPP_PRINTER_* constants * cups.setPort() * cups.getUser() * cups.getServer() * cups.getPort() * cups.getEncryption() * cups.PPD.constraints attribute * cups.PPD.getOptionGroups() method changed to optionGroups attribute * cups.PPD.Group.options is a list, not a dict * cups.PPD.findOption() * cups.PPD.writeFd() * cups.Connection.addPrinter now allows ppdname="foo.ppd" keyword for installed PPDs; also info, location, device and ppd keywords * cups.Connection.getPPDs() * cups.Connection.getDevices() * cups.Connection.getClasses() * cups.Connection.setPrinterInfo() * cups.Connection.setPrinterLocation() * cups.Connection.setPrinterPublished()