- Specify requested attributes in getJobs if possible (bug #584806).
- Added optional requested_attributes argument to Connection.getJobs (bug #584806).
This commit is contained in:
parent
699813d7cf
commit
1b26791b0f
198
pycups-add-getJobs-requested-attrs.patch
Normal file
198
pycups-add-getJobs-requested-attrs.patch
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
diff -U0 pycups-1.9.49/ChangeLog.add-getJobs-requested-attrs pycups-1.9.49/ChangeLog
|
||||||
|
diff -up pycups-1.9.49/cupsconnection.c.add-getJobs-requested-attrs pycups-1.9.49/cupsconnection.c
|
||||||
|
--- pycups-1.9.49/cupsconnection.c.add-getJobs-requested-attrs 2010-02-24 15:07:28.000000000 +0000
|
||||||
|
+++ pycups-1.9.49/cupsconnection.c 2010-04-22 16:02:33.425457367 +0100
|
||||||
|
@@ -1382,6 +1382,52 @@ Connection_getDevices (Connection *self,
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+get_requested_attrs (PyObject *requested_attrs, size_t *n_attrs, char ***attrs)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+ size_t n;
|
||||||
|
+ char **as;
|
||||||
|
+
|
||||||
|
+ if (!PyList_Check (requested_attrs)) {
|
||||||
|
+ PyErr_SetString (PyExc_TypeError, "List required");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ n = PyList_Size (requested_attrs);
|
||||||
|
+ as = malloc ((n + 1) * sizeof (char *));
|
||||||
|
+ for (i = 0; i < n; i++) {
|
||||||
|
+ PyObject *val = PyList_GetItem (requested_attrs, i); // borrowed ref
|
||||||
|
+ if (!PyString_Check (val)) {
|
||||||
|
+ PyErr_SetString (PyExc_TypeError, "String required");
|
||||||
|
+ while (--i >= 0)
|
||||||
|
+ free (as[i]);
|
||||||
|
+ free (as);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ as[i] = strdup (PyString_AsString (val));
|
||||||
|
+ }
|
||||||
|
+ as[n] = NULL;
|
||||||
|
+
|
||||||
|
+ debugprintf ("Requested attributes:\n");
|
||||||
|
+ for (i = 0; as[i] != NULL; i++)
|
||||||
|
+ debugprintf (" %s\n", as[i]);
|
||||||
|
+
|
||||||
|
+ *n_attrs = n;
|
||||||
|
+ *attrs = as;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+free_requested_attrs (size_t n_attrs, char **attrs)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+ for (i = 0; i < n_attrs; i++)
|
||||||
|
+ free (attrs[i]);
|
||||||
|
+ free (attrs);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static PyObject *
|
||||||
|
Connection_getJobs (Connection *self, PyObject *args, PyObject *kwds)
|
||||||
|
{
|
||||||
|
@@ -1392,10 +1438,14 @@ Connection_getJobs (Connection *self, Py
|
||||||
|
int my_jobs = 0;
|
||||||
|
int limit = -1;
|
||||||
|
int first_job_id = -1;
|
||||||
|
+ PyObject *requested_attrs = NULL;
|
||||||
|
+ char **attrs = NULL; /* initialised to calm compiler */
|
||||||
|
+ size_t n_attrs = 0; /* initialised to calm compiler */
|
||||||
|
static char *kwlist[] = { "which_jobs", "my_jobs", "limit", "first_job_id",
|
||||||
|
- NULL };
|
||||||
|
- if (!PyArg_ParseTupleAndKeywords (args, kwds, "|siii", kwlist,
|
||||||
|
- &which, &my_jobs, &limit, &first_job_id))
|
||||||
|
+ "requested_attributes", NULL };
|
||||||
|
+ if (!PyArg_ParseTupleAndKeywords (args, kwds, "|siiiO", kwlist,
|
||||||
|
+ &which, &my_jobs, &limit, &first_job_id,
|
||||||
|
+ &requested_attrs))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
debugprintf ("-> Connection_getJobs(%s,%d)\n",
|
||||||
|
@@ -1419,6 +1469,18 @@ Connection_getJobs (Connection *self, Py
|
||||||
|
ippAddInteger (request, IPP_TAG_OPERATION, IPP_TAG_INTEGER,
|
||||||
|
"first-job-id", first_job_id);
|
||||||
|
|
||||||
|
+ if (requested_attrs) {
|
||||||
|
+ if (get_requested_attrs (requested_attrs, &n_attrs, &attrs) == -1) {
|
||||||
|
+ ippDelete (request);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||||
|
+ "requested-attributes", n_attrs, NULL,
|
||||||
|
+ (const char **) attrs);
|
||||||
|
+ free_requested_attrs (n_attrs, attrs);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
debugprintf ("cupsDoRequest(\"/\")\n");
|
||||||
|
Connection_begin_allow_threads (self);
|
||||||
|
answer = cupsDoRequest (self->http, request, "/");
|
||||||
|
@@ -1474,6 +1536,18 @@ Connection_getJobs (Connection *self, Py
|
||||||
|
else if (!strcmp (attr->name, "job-preserved") &&
|
||||||
|
attr->value_tag == IPP_TAG_BOOLEAN)
|
||||||
|
val = PyBool_FromLong (attr->values[0].integer);
|
||||||
|
+ else {
|
||||||
|
+ if (attr->num_values > 1) {
|
||||||
|
+ int i;
|
||||||
|
+ val = PyList_New (0);
|
||||||
|
+ for (i = 0; i < attr->num_values; i++) {
|
||||||
|
+ PyObject *item = PyObject_from_attr_value (attr, i);
|
||||||
|
+ if (item)
|
||||||
|
+ PyList_Append (val, item);
|
||||||
|
+ }
|
||||||
|
+ } else
|
||||||
|
+ val = PyObject_from_attr_value (attr, 0);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (val) {
|
||||||
|
debugprintf ("Adding %s to job dict\n", attr->name);
|
||||||
|
@@ -1500,52 +1574,6 @@ Connection_getJobs (Connection *self, Py
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int
|
||||||
|
-get_requested_attrs (PyObject *requested_attrs, size_t *n_attrs, char ***attrs)
|
||||||
|
-{
|
||||||
|
- int i;
|
||||||
|
- size_t n;
|
||||||
|
- char **as;
|
||||||
|
-
|
||||||
|
- if (!PyList_Check (requested_attrs)) {
|
||||||
|
- PyErr_SetString (PyExc_TypeError, "List required");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- n = PyList_Size (requested_attrs);
|
||||||
|
- as = malloc ((n + 1) * sizeof (char *));
|
||||||
|
- for (i = 0; i < n; i++) {
|
||||||
|
- PyObject *val = PyList_GetItem (requested_attrs, i); // borrowed ref
|
||||||
|
- if (!PyString_Check (val)) {
|
||||||
|
- PyErr_SetString (PyExc_TypeError, "String required");
|
||||||
|
- while (--i >= 0)
|
||||||
|
- free (as[i]);
|
||||||
|
- free (as);
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- as[i] = strdup (PyString_AsString (val));
|
||||||
|
- }
|
||||||
|
- as[n] = NULL;
|
||||||
|
-
|
||||||
|
- debugprintf ("Requested attributes:\n");
|
||||||
|
- for (i = 0; as[i] != NULL; i++)
|
||||||
|
- debugprintf (" %s\n", as[i]);
|
||||||
|
-
|
||||||
|
- *n_attrs = n;
|
||||||
|
- *attrs = as;
|
||||||
|
- return 0;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-free_requested_attrs (size_t n_attrs, char **attrs)
|
||||||
|
-{
|
||||||
|
- int i;
|
||||||
|
- for (i = 0; i < n_attrs; i++)
|
||||||
|
- free (attrs[i]);
|
||||||
|
- free (attrs);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static PyObject *
|
||||||
|
Connection_getJobAttributes (Connection *self, PyObject *args, PyObject *kwds)
|
||||||
|
{
|
||||||
|
@@ -4439,7 +4467,7 @@ PyMethodDef Connection_methods[] =
|
||||||
|
|
||||||
|
{ "getJobs",
|
||||||
|
(PyCFunction) Connection_getJobs, METH_VARARGS | METH_KEYWORDS,
|
||||||
|
- "getJobs(which_jobs='not-completed', my_jobs=False, limit=-1, first_job_id=-1) -> dict\n"
|
||||||
|
+ "getJobs(which_jobs='not-completed', my_jobs=False, limit=-1, first_job_id=-1, requested_attributes=None) -> dict\n"
|
||||||
|
"Fetch a list of jobs.\n"
|
||||||
|
"@type which_jobs: string\n"
|
||||||
|
"@param which_jobs: which jobs to fetch; possible values: \n"
|
||||||
|
@@ -4453,6 +4481,8 @@ PyMethodDef Connection_methods[] =
|
||||||
|
"@param limit: maximum number of jobs to return\n"
|
||||||
|
"@type first_job_id: integer\n"
|
||||||
|
"@param first_job_id: lowest job ID to return\n"
|
||||||
|
+ "@type requested_attributes: string list\n"
|
||||||
|
+ "@param requested_attributes: list of requested attribute names\n"
|
||||||
|
"@raise IPPError: IPP problem" },
|
||||||
|
|
||||||
|
{ "getJobAttributes",
|
||||||
|
diff -up pycups-1.9.49/NEWS.add-getJobs-requested-attrs pycups-1.9.49/NEWS
|
||||||
|
--- pycups-1.9.49/NEWS.add-getJobs-requested-attrs 2010-01-19 12:33:26.000000000 +0000
|
||||||
|
+++ pycups-1.9.49/NEWS 2010-04-22 16:01:37.816457416 +0100
|
||||||
|
@@ -1,6 +1,10 @@
|
||||||
|
NEWS
|
||||||
|
----
|
||||||
|
|
||||||
|
+New in 1.9.50:
|
||||||
|
+
|
||||||
|
+* cups.getJobs() now takes optional requested_attributes argument.
|
||||||
|
+
|
||||||
|
New in 1.9.48:
|
||||||
|
|
||||||
|
* cups.cancelJob()'s optional second argument is now a keyword.
|
34
system-config-printer-use-getJobs-requested-attrs.patch
Normal file
34
system-config-printer-use-getJobs-requested-attrs.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
diff -up system-config-printer-1.2.1/monitor.py.use-getJobs-requested-attrs system-config-printer-1.2.1/monitor.py
|
||||||
|
--- system-config-printer-1.2.1/monitor.py.use-getJobs-requested-attrs 2010-04-15 00:11:33.000000000 +0100
|
||||||
|
+++ system-config-printer-1.2.1/monitor.py 2010-04-22 16:05:28.493458040 +0100
|
||||||
|
@@ -608,11 +608,26 @@ class Monitor:
|
||||||
|
return False
|
||||||
|
|
||||||
|
limit = 1
|
||||||
|
+ r = ["job-id",
|
||||||
|
+ "job-printer-uri",
|
||||||
|
+ "job-state",
|
||||||
|
+ "job-originating-user-name",
|
||||||
|
+ "job-k-octets",
|
||||||
|
+ "job-name",
|
||||||
|
+ "time-at-creation"]
|
||||||
|
try:
|
||||||
|
- fetched = c.getJobs (which_jobs=self.which_jobs,
|
||||||
|
- my_jobs=self.my_jobs,
|
||||||
|
- first_job_id=self.fetch_first_job_id,
|
||||||
|
- limit=limit)
|
||||||
|
+ try:
|
||||||
|
+ fetched = c.getJobs (which_jobs=self.which_jobs,
|
||||||
|
+ my_jobs=self.my_jobs,
|
||||||
|
+ first_job_id=self.fetch_first_job_id,
|
||||||
|
+ limit=limit,
|
||||||
|
+ requested_attributes=r)
|
||||||
|
+ except TypeError:
|
||||||
|
+ # requested_attributes requires pycups 1.9.50
|
||||||
|
+ fetched = c.getJobs (which_jobs=self.which_jobs,
|
||||||
|
+ my_jobs=self.my_jobs,
|
||||||
|
+ first_job_id=self.fetch_first_job_id,
|
||||||
|
+ limit=limit)
|
||||||
|
except cups.IPPError, (e, m):
|
||||||
|
self.watcher.cups_ipp_error (self, e, m)
|
||||||
|
self.fetch_jobs_timer = None
|
@ -7,7 +7,7 @@
|
|||||||
Summary: A printer administration tool
|
Summary: A printer administration tool
|
||||||
Name: system-config-printer
|
Name: system-config-printer
|
||||||
Version: 1.2.1
|
Version: 1.2.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: http://cyberelk.net/tim/software/system-config-printer/
|
URL: http://cyberelk.net/tim/software/system-config-printer/
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
@ -18,8 +18,10 @@ Source1: http://cyberelk.net/tim/data/pycups/pycups-%{pycups_version}.tar.bz2
|
|||||||
Source2: http://cyberelk.net/tim/data/pysmbc/pysmbc-%{pysmbc_version}.tar.bz2
|
Source2: http://cyberelk.net/tim/data/pysmbc/pysmbc-%{pysmbc_version}.tar.bz2
|
||||||
|
|
||||||
Patch1: system-config-printer-no-epydoc.patch
|
Patch1: system-config-printer-no-epydoc.patch
|
||||||
|
Patch2: system-config-printer-use-getJobs-requested-attrs.patch
|
||||||
|
|
||||||
Patch100: system-config-printer-pycups-build.patch
|
Patch100: system-config-printer-pycups-build.patch
|
||||||
|
Patch101: pycups-add-getJobs-requested-attrs.patch
|
||||||
|
|
||||||
BuildRequires: cups-devel >= 1.2
|
BuildRequires: cups-devel >= 1.2
|
||||||
BuildRequires: python-devel >= 2.4
|
BuildRequires: python-devel >= 2.4
|
||||||
@ -81,11 +83,18 @@ printers.
|
|||||||
# Don't require epydoc.
|
# Don't require epydoc.
|
||||||
%patch1 -p1 -b .no-epydoc
|
%patch1 -p1 -b .no-epydoc
|
||||||
|
|
||||||
|
# Specify requested attributes in getJobs if possible (bug #584806).
|
||||||
|
%patch2 -p1 -b .use-getJobs-requested-attrs.patch
|
||||||
|
|
||||||
pushd pycups-%{pycups_version}
|
pushd pycups-%{pycups_version}
|
||||||
|
|
||||||
# Fixed pycups build with new distutils.
|
# Fixed pycups build with new distutils.
|
||||||
%patch100 -p1 -b .pycups-build
|
%patch100 -p1 -b .pycups-build
|
||||||
|
|
||||||
|
# Added optional requested_attributes argument to Connection.getJobs
|
||||||
|
# (bug #584806).
|
||||||
|
%patch101 -p1 -b .add-getJobs-requested-attrs
|
||||||
|
|
||||||
popd
|
popd
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -203,6 +212,11 @@ rm -rf %buildroot
|
|||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Apr 22 2010 Tim Waugh <twaugh@redhat.com> - 1.2.1-2
|
||||||
|
- Specify requested attributes in getJobs if possible (bug #584806).
|
||||||
|
- Added optional requested_attributes argument to Connection.getJobs
|
||||||
|
(bug #584806).
|
||||||
|
|
||||||
* Thu Apr 15 2010 Tim Waugh <twaugh@redhat.com> - 1.2.1-1
|
* Thu Apr 15 2010 Tim Waugh <twaugh@redhat.com> - 1.2.1-1
|
||||||
- Updated to 1.2.1:
|
- Updated to 1.2.1:
|
||||||
- Fixed missing translations (bug #580442).
|
- Fixed missing translations (bug #580442).
|
||||||
|
Loading…
Reference in New Issue
Block a user