Exemplo n.º 1
0
PyObject *
PyObject_FromRepoMdRecord(LrYumRepoMdRecord *rec)
{
    PyObject *dict;

    if (!rec)
        Py_RETURN_NONE;

    if ((dict = PyDict_New()) == NULL)
        return NULL;

    PyDict_SetItemString(dict, "location_href",
            PyStringOrNone_FromString(rec->location_href));
    PyDict_SetItemString(dict, "checksum",
            PyStringOrNone_FromString(rec->checksum));
    PyDict_SetItemString(dict, "checksum_type",
            PyStringOrNone_FromString(rec->checksum_type));
    PyDict_SetItemString(dict, "checksum_open",
            PyStringOrNone_FromString(rec->checksum_open));
    PyDict_SetItemString(dict, "checksum_open_type",
            PyStringOrNone_FromString(rec->checksum_open_type));
    PyDict_SetItemString(dict, "timestamp",
            PyLong_FromLongLong((PY_LONG_LONG) rec->timestamp));
    PyDict_SetItemString(dict, "size",
            PyLong_FromLongLong((PY_LONG_LONG) rec->size));
    PyDict_SetItemString(dict, "size_open",
            PyLong_FromLongLong((PY_LONG_LONG) rec->size_open));
    PyDict_SetItemString(dict, "db_version",
            PyLong_FromLong((long) rec->db_version));

    return dict;
}
Exemplo n.º 2
0
void
py_debug_cb(G_GNUC_UNUSED const gchar *log_domain,
            G_GNUC_UNUSED GLogLevelFlags log_level,
            const gchar *message,
            G_GNUC_UNUSED gpointer user_data)
{
    PyObject *arglist, *data, *result, *py_message;

    if (!debug_cb)
        return;

    // XXX: GIL Hack
    if (global_state)
        EndAllowThreads((PyThreadState **) global_state);
    // XXX: End of GIL Hack

    py_message = PyStringOrNone_FromString(message);
    data = (debug_cb_data) ? debug_cb_data : Py_None;
    arglist = Py_BuildValue("(OO)", py_message, data);
    result = PyObject_CallObject(debug_cb, arglist);
    Py_DECREF(arglist);
    Py_XDECREF(result);
    Py_DECREF(py_message);

    // XXX: GIL Hack
    if (global_state)
        BeginAllowThreads((PyThreadState **) global_state);
    // XXX: End of GIL Hack
}
Exemplo n.º 3
0
PyObject *
PyObject_FromYumRepo(LrYumRepo *repo)
{
    PyObject *dict;

    if (!repo)
        Py_RETURN_NONE;

    if ((dict = PyDict_New()) == NULL)
        return NULL;

    PyDict_SetItemString(dict, "repomd",
            PyStringOrNone_FromString(repo->repomd));
    PyDict_SetItemString(dict, "url",
            PyStringOrNone_FromString(repo->url));
    PyDict_SetItemString(dict, "destdir",
            PyStringOrNone_FromString(repo->destdir));
    PyDict_SetItemString(dict, "signature",
            PyStringOrNone_FromString(repo->signature));
    PyDict_SetItemString(dict, "mirrorlist",
            PyStringOrNone_FromString(repo->mirrorlist));
    PyDict_SetItemString(dict, "metalink",
            PyStringOrNone_FromString(repo->metalink));

    for (GSList *elem = repo->paths; elem; elem = g_slist_next(elem)) {
        LrYumRepoPath *yumrepopath = elem->data;
        if (!yumrepopath || !yumrepopath->type) continue;
        PyDict_SetItemString(dict,
                             yumrepopath->type,
                             PyStringOrNone_FromString(yumrepopath->path));
    }

    return dict;
}
Exemplo n.º 4
0
PyObject *
py_xml_from_rpm(PyObject *self, PyObject *args)
{
    CR_UNUSED(self);

    PyObject *tuple;
    int checksum_type, changelog_limit;
    char *filename, *location_href, *location_base;
    struct cr_XmlStruct xml_res;
    GError *tmp_err = NULL;

    if (!PyArg_ParseTuple(args, "sizzi:py_xml_from_rpm",
                                         &filename,
                                         &checksum_type,
                                         &location_href,
                                         &location_base,
                                         &changelog_limit)) {
        return NULL;
    }

    xml_res = cr_xml_from_rpm(filename, checksum_type, location_href,
                              location_base, changelog_limit, NULL, &tmp_err);
    if (tmp_err) {
        nice_exception(&tmp_err, "Cannot load %s: ", filename);
        return NULL;
    }

    if ((tuple = PyTuple_New(3)) == NULL)
        goto py_xml_from_rpm_end; // Free xml_res and return NULL

    PyTuple_SetItem(tuple, 0, PyStringOrNone_FromString(xml_res.primary));
    PyTuple_SetItem(tuple, 1, PyStringOrNone_FromString(xml_res.filelists));
    PyTuple_SetItem(tuple, 2, PyStringOrNone_FromString(xml_res.other));

py_xml_from_rpm_end:
    free(xml_res.primary);
    free(xml_res.filelists);
    free(xml_res.other);

    return tuple;
}
Exemplo n.º 5
0
static PyObject *
nevra(_PackageObject *self, void *nothing)
{
    CR_UNUSED(nothing);
    PyObject *pystr;
    if (check_PackageStatus(self))
        return NULL;
    char *nevra = cr_package_nevra(self->package);
    pystr = PyStringOrNone_FromString(nevra);
    free(nevra);
    return pystr;
}
Exemplo n.º 6
0
PyObject *
py_checksum_name_str(PyObject *self, PyObject *args)
{
    int type;

    CR_UNUSED(self);

    if (!PyArg_ParseTuple(args, "i:py_checksum_name_Str", &type))
        return NULL;

    return PyStringOrNone_FromString(cr_checksum_name_str(type));
}
Exemplo n.º 7
0
PyObject *
PyObject_FromYumRepoMd(LrYumRepoMd *repomd)
{
    PyObject *dict, *list;

    if (!repomd)
        Py_RETURN_NONE;

    if ((dict = PyDict_New()) == NULL)
        return NULL;

    PyDict_SetItemString(dict,
                         "revision",
                         PyStringOrNone_FromString(repomd->revision));

    list = PyList_New(0);
    for (GSList *elem = repomd->repo_tags; elem; elem = g_slist_next(elem)) {
        char *tag = elem->data;
        if (tag)
            PyList_Append(list, PyStringOrNone_FromString(tag));
    }
    PyDict_SetItemString(dict, "repo_tags", list);

    list = PyList_New(0);
    for (GSList *elem = repomd->distro_tags; elem; elem = g_slist_next(elem)) {
        LrYumDistroTag *distrotag = elem->data;

        if (!elem->data)
            continue;

        char *cpeid = distrotag->cpeid;
        char *value = distrotag->tag;

        if (value) {
            PyList_Append(list, Py_BuildValue("(NN)",
                                    PyStringOrNone_FromString(cpeid),
                                    PyStringOrNone_FromString(value)));
        }
    }
    PyDict_SetItemString(dict, "distro_tags", list);

    list = PyList_New(0);
    for (GSList *elem = repomd->content_tags; elem; elem = g_slist_next(elem)) {
        char *tag = elem->data;
        if (tag)
            PyList_Append(list, PyStringOrNone_FromString(tag));
    }
    PyDict_SetItemString(dict, "content_tags", list);

    for (GSList *elem = repomd->records; elem; elem = g_slist_next(elem)) {
        LrYumRepoMdRecord *record = elem->data;

        if (!record)
            continue;

        PyDict_SetItemString(dict,
                            record->type,
                            PyObject_FromRepoMdRecord(record));
    }

    return dict;
}
Exemplo n.º 8
0
PyObject *
PyObject_FromMetalink(LrMetalink *metalink)
{
    PyObject *dict, *sub_list;

    if (!metalink)
        Py_RETURN_NONE;

    if ((dict = PyDict_New()) == NULL)
        return NULL;

    PyDict_SetItemString(dict, "filename",
            PyStringOrNone_FromString(metalink->filename));
    PyDict_SetItemString(dict, "timestamp",
            PyLong_FromLongLong((PY_LONG_LONG)metalink->timestamp));
    PyDict_SetItemString(dict, "size",
            PyLong_FromLongLong((PY_LONG_LONG)metalink->size));

    // Hashes
    if ((sub_list = PyList_New(0)) == NULL) {
        PyDict_Clear(dict);
        return NULL;
    }
    PyDict_SetItemString(dict, "hashes", sub_list);

    for (GSList *elem = metalink->hashes; elem; elem = g_slist_next(elem)) {
        LrMetalinkHash *metalinkhash = elem->data;
        PyObject *tuple;
        if ((tuple = PyTuple_New(2)) == NULL) {
            PyDict_Clear(dict);
            return NULL;
        }
        PyTuple_SetItem(tuple, 0,
                PyStringOrNone_FromString(metalinkhash->type));
        PyTuple_SetItem(tuple, 1,
                PyStringOrNone_FromString(metalinkhash->value));
        PyList_Append(sub_list, tuple);
    }

    // Urls
    if ((sub_list = PyList_New(0)) == NULL) {
        PyDict_Clear(dict);
        return NULL;
    }
    PyDict_SetItemString(dict, "urls", sub_list);

    for (GSList *elem = metalink->urls; elem; elem = g_slist_next(elem)) {
        LrMetalinkUrl *metalinkurl = elem->data;
        PyObject *udict;
        if ((udict = PyDict_New()) == NULL) {
            PyDict_Clear(dict);
            return NULL;
        }
        PyDict_SetItemString(udict, "protocol",
                PyStringOrNone_FromString(metalinkurl->protocol));
        PyDict_SetItemString(udict, "type",
                PyStringOrNone_FromString(metalinkurl->type));
        PyDict_SetItemString(udict, "location",
                PyStringOrNone_FromString(metalinkurl->location));
        PyDict_SetItemString(udict, "preference",
                PyLong_FromLong((long) metalinkurl->preference));
        PyDict_SetItemString(udict, "url",
                PyStringOrNone_FromString(metalinkurl->url));
        PyList_Append(sub_list, udict);
    }

    // Alternates

    if (metalink->alternates) {

        if ((sub_list = PyList_New(0)) == NULL) {
            PyDict_Clear(dict);
            return NULL;
        }
        PyDict_SetItemString(dict, "alternates", sub_list);

        for (GSList *elem = metalink->alternates; elem; elem = g_slist_next(elem)) {
            LrMetalinkAlternate *ma = elem->data;
            PyObject *udict;
            if ((udict = PyDict_New()) == NULL) {
                PyDict_Clear(dict);
                return NULL;
            }
            PyDict_SetItemString(udict, "timestamp",
                PyLong_FromLongLong((PY_LONG_LONG)ma->timestamp));
            PyDict_SetItemString(udict, "size",
                PyLong_FromLongLong((PY_LONG_LONG)ma->size));

            PyObject *usub_list;
            if ((usub_list = PyList_New(0)) == NULL) {
                PyDict_Clear(dict);
                return NULL;
            }
            PyDict_SetItemString(udict, "hashes", usub_list);

            for (GSList *subelem = ma->hashes; subelem; subelem = g_slist_next(subelem)) {
                LrMetalinkHash *metalinkhash = subelem->data;
                PyObject *tuple;
                if ((tuple = PyTuple_New(2)) == NULL) {
                    PyDict_Clear(dict);
                    return NULL;
                }
                PyTuple_SetItem(tuple, 0,
                        PyStringOrNone_FromString(metalinkhash->type));
                PyTuple_SetItem(tuple, 1,
                        PyStringOrNone_FromString(metalinkhash->value));
                PyList_Append(usub_list, tuple);
            }

            PyList_Append(sub_list, udict);
        }
    }

    return dict;
}