]> git.ipfire.org Git - pakfire.git/blob - python/src/step.c
50e5ec060fb28d3fba6b89cd04c83792b9e762a0
[pakfire.git] / python / src / step.c
1 /*#############################################################################
2 # #
3 # Pakfire - The IPFire package management system #
4 # Copyright (C) 2011 Pakfire development team #
5 # #
6 # This program is free software: you can redistribute it and/or modify #
7 # it under the terms of the GNU General Public License as published by #
8 # the Free Software Foundation, either version 3 of the License, or #
9 # (at your option) any later version. #
10 # #
11 # This program is distributed in the hope that it will be useful, #
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14 # GNU General Public License for more details. #
15 # #
16 # You should have received a copy of the GNU General Public License #
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
18 # #
19 #############################################################################*/
20
21 #include "solvable.h"
22 #include "step.h"
23 #include "transaction.h"
24
25 PyTypeObject StepType = {
26 PyObject_HEAD_INIT(NULL)
27 tp_name: "_pakfire.Step",
28 tp_basicsize: sizeof(StepObject),
29 tp_flags: Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
30 tp_new : Step_new,
31 tp_dealloc: (destructor) Step_dealloc,
32 tp_doc: "Sat Step objects",
33 };
34
35 PyObject* Step_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
36 StepObject *self;
37 TransactionObject *transaction;
38 int num;
39
40 if (!PyArg_ParseTuple(args, "Oi", &transaction, &num)) {
41 /* XXX raise exception */
42 }
43
44 self = (StepObject *)type->tp_alloc(type, 0);
45 if (self != NULL) {
46 self->_transaction = transaction->_transaction;
47
48 if (num >= transaction->_transaction->steps.count) {
49 Py_DECREF(self);
50 return NULL;
51 }
52
53 self->_id = transaction->_transaction->steps.elements[num];
54 }
55
56 return (PyObject *)self;
57 }
58
59 PyObject *Step_dealloc(StepObject *self) {
60 self->ob_type->tp_free((PyObject *)self);
61
62 Py_RETURN_NONE;
63 }
64
65 PyObject *Step_get_solvable(StepObject *self, PyObject *args) {
66 SolvableObject *solvable;
67
68 solvable = PyObject_New(SolvableObject, &SolvableType);
69 if (solvable == NULL)
70 return NULL;
71
72 solvable->_pool = self->_transaction->pool;
73 solvable->_id = self->_id;
74
75 return (PyObject *)solvable;
76 }
77
78 PyObject *Step_get_type(StepObject *self, PyObject *args) {
79 const char *type = "unknown";
80
81 int trans_type = transaction_type(self->_transaction, self->_id,
82 SOLVER_TRANSACTION_SHOW_ACTIVE|SOLVER_TRANSACTION_CHANGE_IS_REINSTALL);
83
84 switch(trans_type) {
85 case SOLVER_TRANSACTION_IGNORE:
86 type = "ignore";
87 break;
88
89 case SOLVER_TRANSACTION_ERASE:
90 type = "erase";
91 break;
92
93 case SOLVER_TRANSACTION_REINSTALLED:
94 type = "reinstalled";
95 break;
96
97 case SOLVER_TRANSACTION_DOWNGRADED:
98 type = "downgraded";
99 break;
100
101 case SOLVER_TRANSACTION_CHANGED:
102 type = "changed";
103 break;
104
105 case SOLVER_TRANSACTION_UPGRADED:
106 type = "upgraded";
107 break;
108
109 case SOLVER_TRANSACTION_OBSOLETED:
110 type = "obsoleted";
111 break;
112
113 case SOLVER_TRANSACTION_INSTALL:
114 type = "install";
115 break;
116
117 case SOLVER_TRANSACTION_REINSTALL:
118 type = "reinstall";
119 break;
120
121 case SOLVER_TRANSACTION_DOWNGRADE:
122 type = "downgrade";
123 break;
124
125 case SOLVER_TRANSACTION_CHANGE:
126 type = "change";
127 break;
128
129 case SOLVER_TRANSACTION_UPGRADE:
130 type = "upgrade";
131 break;
132
133 case SOLVER_TRANSACTION_OBSOLETES:
134 type = "obsoletes";
135 break;
136
137 case SOLVER_TRANSACTION_MULTIINSTALL:
138 type = "multiinstall";
139 break;
140
141 case SOLVER_TRANSACTION_MULTIREINSTALL:
142 type = "multireinstall";
143 break;
144
145 default:
146 break;
147 }
148
149 return Py_BuildValue("s", type);
150 }