]> git.ipfire.org Git - people/ms/pakfire.git/blame - src/_pakfire/package.c
filelist: Change type from PakfireFilelist to struct pakfire_filelist
[people/ms/pakfire.git] / src / _pakfire / package.c
CommitLineData
b8a51cb6
MT
1/*#############################################################################
2# #
3# Pakfire - The IPFire package management system #
233c5276 4# Copyright (C) 2011 Pakfire development team #
b8a51cb6
MT
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 <Python.h>
22
233c5276 23#include <pakfire/file.h>
5e9463ec 24#include <pakfire/filelist.h>
233c5276 25#include <pakfire/package.h>
843fcc66 26#include <pakfire/repo.h>
233c5276
MT
27#include <pakfire/util.h>
28
b8a51cb6 29#include "package.h"
cbed1552 30#include "pakfire.h"
233c5276 31#include "repo.h"
e1d77c57 32#include "util.h"
b8a51cb6 33
31480bee 34PyObject* new_package(PyTypeObject* type, struct pakfire_package* pkg) {
6029ca33
MT
35 PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
36 if (self) {
37 self->package = pakfire_package_ref(pkg);
38 }
233c5276 39
6029ca33 40 return (PyObject *)self;
233c5276
MT
41}
42
43static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
44 PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
45 if (self) {
233c5276
MT
46 self->package = NULL;
47 }
48
49 return (PyObject *)self;
50}
51
52static void Package_dealloc(PackageObject* self) {
cbed1552 53 pakfire_package_unref(self->package);
233c5276
MT
54
55 Py_TYPE(self)->tp_free((PyObject *)self);
56}
57
58static int Package_init(PackageObject* self, PyObject* args, PyObject* kwds) {
cbed1552 59 PakfireObject* pakfire;
0e7800fb
MT
60 RepoObject* repo;
61 const char* name = NULL;
62 const char* evr = NULL;
63 const char* arch = NULL;
233c5276 64
0e7800fb
MT
65 if (!PyArg_ParseTuple(args, "O!O!sss", &PakfireType, &pakfire, &RepoType, &repo,
66 &name, &evr, &arch))
233c5276
MT
67 return -1;
68
0e7800fb
MT
69 self->package = pakfire_package_create(pakfire->pakfire, repo->repo, name, evr, arch);
70 if (!self->package) {
71 PyErr_SetFromErrno(PyExc_OSError);
72 return -1;
73 }
233c5276
MT
74
75 return 0;
76}
77
233c5276 78static PyObject* Package_repr(PackageObject* self) {
4a9cbd3c 79 const char* nevra = pakfire_package_get_nevra(self->package);
233c5276 80
4a9cbd3c 81 return PyUnicode_FromFormat("<_pakfire.Package %s>", nevra);
233c5276
MT
82}
83
84static PyObject* Package_str(PackageObject* self) {
4a9cbd3c 85 const char* nevra = pakfire_package_get_nevra(self->package);
233c5276 86
4a9cbd3c 87 return PyUnicode_FromString(nevra);
233c5276
MT
88}
89
90static PyObject* Package_richcompare(PackageObject* self, PyObject* _other, int op) {
91 if (!PyType_IsSubtype(_other->ob_type, &PackageType)) {
92 PyErr_SetString(PyExc_TypeError, "Expected a Package object");
93 return NULL;
94 }
95
96 PackageObject* other = (PackageObject *)_other;
97
98 long result = pakfire_package_cmp(self->package, other->package);
99
100 switch (op) {
101 case Py_EQ:
102 if (result == 0)
103 Py_RETURN_TRUE;
104 break;
105
106 case Py_NE:
107 if (result != 0)
108 Py_RETURN_TRUE;
109 break;
110
111 case Py_LE:
112 if (result <= 0)
113 Py_RETURN_TRUE;
114 break;
115
116 case Py_GE:
117 if (result >= 0)
118 Py_RETURN_TRUE;
119 break;
120
121 case Py_LT:
122 if (result < 0)
123 Py_RETURN_TRUE;
124 break;
125
126 case Py_GT:
127 if (result > 0)
128 Py_RETURN_TRUE;
129 break;
130
131 default:
132 PyErr_BadArgument();
133 return NULL;
134 }
135
136 Py_RETURN_FALSE;
137}
138
139static const char* PyUnicode_FromValue(PyObject* value) {
140 if (value == Py_None)
141 return NULL;
142
143 return PyUnicode_AsUTF8(value);
144}
145
146static PyObject* Package_get_name(PackageObject* self) {
147 const char* name = pakfire_package_get_name(self->package);
148 if (!name)
149 Py_RETURN_NONE;
150
151 return PyUnicode_FromString(name);
152}
153
154static void Package_set_name(PackageObject* self, PyObject* value) {
155 const char* name = PyUnicode_FromValue(value);
156
157 pakfire_package_set_name(self->package, name);
158}
159
233c5276
MT
160static PyObject* Package_get_evr(PackageObject* self) {
161 const char* evr = pakfire_package_get_evr(self->package);
162 if (!evr)
163 Py_RETURN_NONE;
164
165 return PyUnicode_FromString(evr);
166}
167
168static PyObject* Package_get_arch(PackageObject* self) {
169 const char* arch = pakfire_package_get_arch(self->package);
170 if (!arch)
171 Py_RETURN_NONE;
172
173 return PyUnicode_FromString(arch);
174}
175
176static void Package_set_arch(PackageObject* self, PyObject* value) {
177 const char* arch = PyUnicode_FromValue(value);
178
179 pakfire_package_set_arch(self->package, arch);
180}
181
182static PyObject* Package_get_uuid(PackageObject* self) {
183 const char* uuid = pakfire_package_get_uuid(self->package);
184 if (!uuid)
185 Py_RETURN_NONE;
186
187 return PyUnicode_FromString(uuid);
188}
189
190static void Package_set_uuid(PackageObject* self, PyObject* value) {
191 const char* uuid = PyUnicode_FromValue(value);
192
193 pakfire_package_set_uuid(self->package, uuid);
194}
195
196static PyObject* Package_get_checksum(PackageObject* self) {
197 const char* checksum = pakfire_package_get_checksum(self->package);
198 if (!checksum)
199 Py_RETURN_NONE;
200
201 return PyUnicode_FromString(checksum);
202}
203
204static void Package_set_checksum(PackageObject* self, PyObject* value) {
205 const char* checksum = PyUnicode_FromValue(value);
206
207 pakfire_package_set_checksum(self->package, checksum);
208}
209
210static PyObject* Package_get_summary(PackageObject* self) {
211 const char* summary = pakfire_package_get_summary(self->package);
212 if (!summary)
213 Py_RETURN_NONE;
214
215 return PyUnicode_FromString(summary);
216}
217
218static void Package_set_summary(PackageObject* self, PyObject* value) {
219 const char* summary = PyUnicode_FromValue(value);
220
221 pakfire_package_set_summary(self->package, summary);
222}
223
224static PyObject* Package_get_description(PackageObject* self) {
225 const char* description = pakfire_package_get_description(self->package);
226 if (!description)
227 Py_RETURN_NONE;
228
229 return PyUnicode_FromString(description);
230}
231
232static void Package_set_description(PackageObject* self, PyObject* value) {
233 const char* description = PyUnicode_FromValue(value);
234
235 pakfire_package_set_description(self->package, description);
236}
237
238static PyObject* Package_get_license(PackageObject* self) {
239 const char* license = pakfire_package_get_license(self->package);
240 if (!license)
241 Py_RETURN_NONE;
242
243 return PyUnicode_FromString(license);
244}
245
246static void Package_set_license(PackageObject* self, PyObject* value) {
247 const char* license = PyUnicode_FromValue(value);
248
249 pakfire_package_set_summary(self->package, license);
250}
251
252static PyObject* Package_get_url(PackageObject* self) {
253 const char* url = pakfire_package_get_url(self->package);
254 if (!url)
255 Py_RETURN_NONE;
256
257 return PyUnicode_FromString(url);
258}
259
260static void Package_set_url(PackageObject* self, PyObject* value) {
261 const char* url = PyUnicode_FromValue(value);
262
263 pakfire_package_set_url(self->package, url);
264}
265
266static PyObject* Package_get_groups(PackageObject* self) {
7ccc9d74 267 const char* s = pakfire_package_get_groups(self->package);
233c5276 268
603ca1e0 269 return PyUnicode_FromString(s);
233c5276
MT
270}
271
272static int Package_set_groups(PackageObject* self, PyObject* value) {
7ccc9d74 273 const char* groups = PyUnicode_AsUTF8(value);
233c5276 274
7ccc9d74
MT
275 if (groups)
276 pakfire_package_set_groups(self->package, groups);
233c5276
MT
277
278 return 0;
279}
280
281static PyObject* Package_get_vendor(PackageObject* self) {
282 const char* vendor = pakfire_package_get_vendor(self->package);
283 if (!vendor)
284 Py_RETURN_NONE;
285
286 return PyUnicode_FromString(vendor);
287}
288
289static void Package_set_vendor(PackageObject* self, PyObject* value) {
290 const char* vendor = PyUnicode_FromValue(value);
291
292 pakfire_package_set_vendor(self->package, vendor);
293}
294
295static PyObject* Package_get_maintainer(PackageObject* self) {
296 const char* maintainer = pakfire_package_get_maintainer(self->package);
297 if (!maintainer)
298 Py_RETURN_NONE;
299
300 return PyUnicode_FromString(maintainer);
301}
302
303static void Package_set_maintainer(PackageObject* self, PyObject* value) {
304 const char* maintainer = PyUnicode_FromValue(value);
305
306 pakfire_package_set_maintainer(self->package, maintainer);
307}
308
309static PyObject* Package_get_filename(PackageObject* self) {
310 const char* filename = pakfire_package_get_filename(self->package);
311 if (!filename)
312 Py_RETURN_NONE;
313
314 return PyUnicode_FromString(filename);
315}
316
317static void Package_set_filename(PackageObject* self, PyObject* value) {
318 const char* filename = PyUnicode_FromValue(value);
319
320 pakfire_package_set_filename(self->package, filename);
321}
322
323static PyObject* Package_get_installed(PackageObject* self) {
324 int installed = pakfire_package_is_installed(self->package);
325
326 return PyBool_FromLong(installed);
327}
328
329static PyObject* Package_get_downloadsize(PackageObject* self) {
330 unsigned long long size = pakfire_package_get_downloadsize(self->package);
331
332 return PyLong_FromUnsignedLongLong(size);
333}
334
335static void Package_set_downloadsize(PackageObject* self, PyObject* value) {
336 unsigned long downloadsize = PyLong_AsUnsignedLong(value);
337
338 pakfire_package_set_downloadsize(self->package, downloadsize);
339}
340
341static PyObject* Package_get_installsize(PackageObject* self) {
342 unsigned long long size = pakfire_package_get_installsize(self->package);
343
344 return PyLong_FromUnsignedLongLong(size);
345}
346
347static void Package_set_installsize(PackageObject* self, PyObject* value) {
348 unsigned long installsize = PyLong_AsUnsignedLong(value);
349
350 pakfire_package_set_installsize(self->package, installsize);
351}
352
353static PyObject* Package_get_size(PackageObject* self) {
354 unsigned long long size = pakfire_package_get_size(self->package);
355
356 return PyLong_FromUnsignedLongLong(size);
357}
358
359static PyObject* Package_get_buildhost(PackageObject* self) {
2ffc704d
MT
360 const char* build_host = pakfire_package_get_build_host(self->package);
361 if (!build_host)
233c5276
MT
362 Py_RETURN_NONE;
363
2ffc704d 364 return PyUnicode_FromString(build_host);
233c5276
MT
365}
366
367static void Package_set_buildhost(PackageObject* self, PyObject* value) {
2ffc704d 368 const char* build_host = PyUnicode_FromValue(value);
233c5276 369
2ffc704d 370 pakfire_package_set_build_host(self->package, build_host);
b8a51cb6 371}
233c5276
MT
372
373static PyObject* Package_get_buildtime(PackageObject* self) {
2ffc704d 374 time_t build_time = pakfire_package_get_build_time(self->package);
233c5276 375
2ffc704d 376 return PyLong_FromUnsignedLongLong(build_time);
233c5276
MT
377}
378
379static void Package_set_buildtime(PackageObject* self, PyObject* value) {
2ffc704d 380 time_t build_time = PyLong_AsUnsignedLongLong(value);
233c5276 381
2ffc704d 382 pakfire_package_set_build_time(self->package, build_time);
233c5276
MT
383}
384
233c5276 385static PyObject* Package_get_repo(PackageObject* self) {
4651122b 386 struct pakfire_repo* repo = pakfire_package_get_repo(self->package);
233c5276 387 if (!repo)
8ef6c388 388 Py_RETURN_NONE;
233c5276 389
8ef6c388 390 PyObject* obj = new_repo(&RepoType, repo);
3ff6aee6 391 pakfire_repo_unref(repo);
233c5276 392
8ef6c388 393 return obj;
233c5276
MT
394}
395
b12a5d7d
MT
396static PyObject* Package_get_path(PackageObject* self) {
397 const char* path = pakfire_package_get_path(self->package);
398 if (!path) {
399 PyErr_SetFromErrno(PyExc_OSError);
400 return NULL;
401 }
233c5276 402
b12a5d7d 403 return PyUnicode_FromString(path);
233c5276
MT
404}
405
452d3833 406static PyObject* PyList_FromRelationList(char** deps) {
233c5276
MT
407 PyObject* list = PyList_New(0);
408 if (list == NULL)
409 return NULL;
410
452d3833
MT
411 // Empty list?
412 if (!deps)
413 return list;
233c5276 414
452d3833
MT
415 for (char** dep = deps; *dep; dep++) {
416 PyObject* obj = PyUnicode_FromString(*dep);
417 if (!obj)
418 break;
233c5276 419
452d3833
MT
420 PyList_Append(list, obj);
421 Py_DECREF(obj);
233c5276
MT
422 }
423
424 return list;
233c5276
MT
425}
426
452d3833
MT
427static PyObject* Package_get_provides(PackageObject* self) {
428 char** deps = pakfire_package_get_provides(self->package);
233c5276 429
452d3833 430 PyObject* list = PyList_FromRelationList(deps);
233c5276 431
452d3833
MT
432 if (deps) {
433 for (char** dep = deps; *dep; dep++)
434 free(*dep);
435 free(deps);
233c5276
MT
436 }
437
233c5276
MT
438 return list;
439}
440
233c5276 441static PyObject* Package_get_requires(PackageObject* self) {
452d3833 442 char** deps = pakfire_package_get_requires(self->package);
233c5276 443
452d3833 444 PyObject* list = PyList_FromRelationList(deps);
233c5276 445
452d3833
MT
446 if (deps) {
447 for (char** dep = deps; *dep; dep++)
448 free(*dep);
449 free(deps);
450 }
233c5276
MT
451
452 return list;
453}
454
452d3833
MT
455static PyObject* Package_get_obsoletes(PackageObject* self) {
456 char** deps = pakfire_package_get_obsoletes(self->package);
233c5276 457
452d3833 458 PyObject* list = PyList_FromRelationList(deps);
233c5276 459
452d3833
MT
460 if (deps) {
461 for (char** dep = deps; *dep; dep++)
462 free(*dep);
463 free(deps);
464 }
233c5276
MT
465
466 return list;
467}
468
452d3833
MT
469static PyObject* Package_get_conflicts(PackageObject* self) {
470 char** deps = pakfire_package_get_conflicts(self->package);
233c5276 471
452d3833 472 PyObject* list = PyList_FromRelationList(deps);
233c5276 473
452d3833
MT
474 if (deps) {
475 for (char** dep = deps; *dep; dep++)
476 free(*dep);
477 free(deps);
478 }
233c5276
MT
479
480 return list;
481}
482
452d3833
MT
483static PyObject* Package_get_recommends(PackageObject* self) {
484 char** deps = pakfire_package_get_recommends(self->package);
233c5276 485
452d3833 486 PyObject* list = PyList_FromRelationList(deps);
233c5276 487
452d3833
MT
488 if (deps) {
489 for (char** dep = deps; *dep; dep++)
490 free(*dep);
491 free(deps);
492 }
233c5276
MT
493
494 return list;
495}
496
452d3833
MT
497static PyObject* Package_get_suggests(PackageObject* self) {
498 char** deps = pakfire_package_get_suggests(self->package);
233c5276 499
452d3833 500 PyObject* list = PyList_FromRelationList(deps);
233c5276 501
452d3833
MT
502 if (deps) {
503 for (char** dep = deps; *dep; dep++)
504 free(*dep);
505 free(deps);
506 }
233c5276 507
452d3833 508 return list;
233c5276
MT
509}
510
e1d77c57
MT
511static PyObject* Package_get_reverse_requires(PackageObject* self) {
512 struct pakfire_packagelist* list = NULL;
513
514 int r = pakfire_package_get_reverse_requires(self->package, &list);
515 if (r) {
516 PyErr_SetFromErrno(PyExc_OSError);
517 return NULL;
518 }
519
520 PyObject* object = PyList_FromPackageList(list);
521 pakfire_packagelist_unref(list);
522
523 return object;
524}
525
233c5276
MT
526static PyObject* Package_get_filelist(PackageObject* self, PyObject* args) {
527 PyObject* list = PyList_New(0);
528 if (list == NULL)
529 return NULL;
530
1bbbfb9e 531 struct pakfire_filelist* filelist = pakfire_package_get_filelist(self->package);
5e9463ec 532 for (unsigned int i = 0; i < pakfire_filelist_size(filelist); i++) {
5803b5f6 533 struct pakfire_file* file = pakfire_filelist_get(filelist, i);
32485f6c 534 const char* path = pakfire_file_get_path(file);
5e9463ec 535 pakfire_file_unref(file);
233c5276 536
32485f6c 537 PyObject* obj = PyUnicode_FromString(path);
233c5276
MT
538
539 int ret = PyList_Append(list, obj);
540 Py_DECREF(obj);
541
5e9463ec
MT
542 if (ret) {
543 pakfire_filelist_unref(filelist);
544 Py_DECREF(list);
233c5276 545
5e9463ec
MT
546 return NULL;
547 }
233c5276
MT
548 }
549
5e9463ec 550 pakfire_filelist_unref(filelist);
233c5276 551
5e9463ec 552 return list;
233c5276
MT
553}
554
555static int Package_set_filelist(PackageObject* self, PyObject* value) {
556 if (!PySequence_Check(value)) {
557 PyErr_SetString(PyExc_AttributeError, "Expected a sequence.");
558 return -1;
559 }
560
883b3be9
MT
561 Pakfire pakfire = pakfire_package_get_pakfire(self->package);
562
5e9463ec 563 // Create a new filelist
1bbbfb9e 564 struct pakfire_filelist* filelist;
5e9463ec 565
883b3be9 566 int r = pakfire_filelist_create(&filelist, pakfire);
5e9463ec 567 if (r) {
883b3be9 568 pakfire_unref(pakfire);
5e9463ec
MT
569 errno = -r;
570 PyErr_SetFromErrno(PyExc_OSError);
571
572 return -1;
573 }
233c5276
MT
574
575 const int length = PySequence_Length(value);
576 for (int i = 0; i < length; i++) {
577 PyObject* item = PySequence_GetItem(value, i);
578
579 if (!PyUnicode_Check(item)) {
580 Py_DECREF(item);
5e9463ec 581 pakfire_filelist_unref(filelist);
883b3be9 582 pakfire_unref(pakfire);
233c5276
MT
583
584 PyErr_SetString(PyExc_AttributeError, "Expected a string");
585 return -1;
586 }
587
32485f6c 588 const char* path = PyUnicode_AsUTF8(item);
5e9463ec
MT
589 Py_DECREF(item);
590
591 // Create a new file
5803b5f6 592 struct pakfire_file* file;
233c5276 593
883b3be9 594 r = pakfire_file_create(&file, pakfire);
5e9463ec
MT
595 if (r) {
596 errno = -r;
597 PyErr_SetFromErrno(PyExc_OSError);
598 pakfire_filelist_unref(filelist);
883b3be9 599 pakfire_unref(pakfire);
5e9463ec
MT
600 return -1;
601 }
233c5276 602
32485f6c
MT
603 // Set the path
604 pakfire_file_set_path(file, path);
233c5276 605
5e9463ec
MT
606 // Append the file to the filelist
607 pakfire_filelist_append(filelist, file);
608 pakfire_file_unref(file);
609 }
610
611 // Set filelist
612 r = pakfire_package_set_filelist(self->package, filelist);
613 pakfire_filelist_unref(filelist);
614
615 if (r) {
883b3be9
MT
616 pakfire_unref(pakfire);
617
5e9463ec
MT
618 errno = -r;
619 PyErr_SetFromErrno(PyExc_OSError);
620
621 return -1;
233c5276
MT
622 }
623
883b3be9
MT
624 pakfire_unref(pakfire);
625
233c5276
MT
626 return 0;
627}
628
629static PyObject* Package_dump(PackageObject* self, PyObject *args, PyObject* kwds) {
630 static char* kwlist[] = {"long", "filelist", NULL};
631
632 int long_format = 0;
633 int filelist = 0;
634
635 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|ii", kwlist, &long_format, &filelist))
636 return NULL;
637
638 int flags = 0;
639 if (long_format)
640 flags |= PAKFIRE_PKG_DUMP_LONG;
641
642 if (filelist)
643 flags |= PAKFIRE_PKG_DUMP_FILELIST;
644
645 char* package_dump = pakfire_package_dump(self->package, flags);
646
647 if (!package_dump)
648 Py_RETURN_NONE;
649
650 return PyUnicode_FromString(package_dump);
651}
652
653static struct PyMethodDef Package_methods[] = {
233c5276
MT
654 {
655 "dump",
656 (PyCFunction)Package_dump,
657 METH_VARARGS|METH_KEYWORDS,
658 NULL
659 },
660 { NULL },
661};
662
663static struct PyGetSetDef Package_getsetters[] = {
664 {
665 "name",
666 (getter)Package_get_name,
667 (setter)Package_set_name,
668 NULL,
669 NULL
670 },
233c5276
MT
671 {
672 "evr",
673 (getter)Package_get_evr,
674 NULL,
675 NULL,
676 NULL
677 },
678 {
679 "arch",
680 (getter)Package_get_arch,
681 (setter)Package_set_arch,
682 NULL,
683 NULL
684 },
685 {
686 "uuid",
687 (getter)Package_get_uuid,
688 (setter)Package_set_uuid,
689 NULL,
690 NULL
691 },
692 {
693 "checksum",
694 (getter)Package_get_checksum,
695 (setter)Package_set_checksum,
696 NULL,
697 NULL
698 },
699 {
700 "summary",
701 (getter)Package_get_summary,
702 (setter)Package_set_summary,
703 NULL,
704 NULL
705 },
706 {
707 "description",
708 (getter)Package_get_description,
709 (setter)Package_set_description,
710 NULL,
711 NULL
712 },
713 {
714 "license",
715 (getter)Package_get_license,
716 (setter)Package_set_license,
717 NULL,
718 NULL
719 },
720 {
721 "url",
722 (getter)Package_get_url,
723 (setter)Package_set_url,
724 NULL,
725 NULL
726 },
727 {
728 "groups",
729 (getter)Package_get_groups,
730 (setter)Package_set_groups,
731 NULL,
732 NULL
733 },
734 {
735 "vendor",
736 (getter)Package_get_vendor,
737 (setter)Package_set_vendor,
738 NULL,
739 NULL
740 },
741 {
742 "maintainer",
743 (getter)Package_get_maintainer,
744 (setter)Package_set_maintainer,
745 NULL,
746 NULL
747 },
748 {
749 "filename",
750 (getter)Package_get_filename,
751 (setter)Package_set_filename,
752 NULL,
753 NULL
754 },
755 {
756 "installed",
757 (getter)Package_get_installed,
758 NULL,
759 NULL,
760 NULL
761 },
762 {
763 "downloadsize",
764 (getter)Package_get_downloadsize,
765 (setter)Package_set_downloadsize,
766 NULL,
767 NULL
768 },
769 {
770 "installsize",
771 (getter)Package_get_installsize,
772 (setter)Package_set_installsize,
773 NULL,
774 NULL
775 },
776 {
777 "size",
778 (getter)Package_get_size,
779 NULL,
780 NULL,
781 NULL
782 },
783 {
784 "buildhost",
785 (getter)Package_get_buildhost,
786 (setter)Package_set_buildhost,
787 NULL,
788 NULL
789 },
790 {
791 "buildtime",
792 (getter)Package_get_buildtime,
793 (setter)Package_set_buildtime,
794 NULL,
795 NULL
796 },
233c5276
MT
797
798 // Dependencies
799 {
800 "provides",
801 (getter)Package_get_provides,
452d3833 802 NULL,
233c5276
MT
803 NULL,
804 NULL
805 },
806 {
807 "requires",
808 (getter)Package_get_requires,
452d3833 809 NULL,
233c5276
MT
810 NULL,
811 NULL
812 },
813 {
814 "obsoletes",
815 (getter)Package_get_obsoletes,
452d3833 816 NULL,
233c5276
MT
817 NULL,
818 NULL
819 },
820 {
821 "conflicts",
822 (getter)Package_get_conflicts,
452d3833 823 NULL,
233c5276
MT
824 NULL,
825 NULL
826 },
827 {
828 "recommends",
829 (getter)Package_get_recommends,
452d3833 830 NULL,
233c5276
MT
831 NULL,
832 NULL
833 },
834 {
835 "suggests",
836 (getter)Package_get_suggests,
452d3833 837 NULL,
233c5276
MT
838 NULL,
839 NULL
840 },
e1d77c57
MT
841 {
842 "reverse_requires",
843 (getter)Package_get_reverse_requires,
844 NULL,
845 NULL,
846 NULL
847 },
233c5276
MT
848
849 // Repository
850 {
851 "repo",
852 (getter)Package_get_repo,
1b551e42 853 NULL,
233c5276
MT
854 NULL,
855 NULL
856 },
857 {
b12a5d7d
MT
858 "path",
859 (getter)Package_get_path,
233c5276
MT
860 NULL,
861 NULL,
862 NULL
863 },
864
865 // Filelist
866 {
867 "filelist",
868 (getter)Package_get_filelist,
869 (setter)Package_set_filelist,
870 NULL,
871 NULL
872 },
873
874 { NULL }
875};
876
877PyTypeObject PackageType = {
878 PyVarObject_HEAD_INIT(NULL, 0)
879 tp_name: "_pakfire.Package",
880 tp_basicsize: sizeof(PackageObject),
881 tp_flags: Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
882 tp_new: Package_new,
883 tp_dealloc: (destructor)Package_dealloc,
884 tp_init: (initproc)Package_init,
885 tp_doc: "Package object",
886 tp_methods: Package_methods,
887 tp_getset: Package_getsetters,
233c5276
MT
888 tp_repr: (reprfunc)Package_repr,
889 tp_str: (reprfunc)Package_str,
890 tp_richcompare: (richcmpfunc)Package_richcompare,
891};