[svn] commit: r2896 - in /branches/trac232/src/lib/datasrc: data_source.cc python/libdata_source_python.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Sep 9 15:13:51 UTC 2010
Author: jelte
Date: Thu Sep 9 15:13:51 2010
New Revision: 2896
Log:
more cleanup
Modified:
branches/trac232/src/lib/datasrc/data_source.cc
branches/trac232/src/lib/datasrc/python/libdata_source_python.cc
Modified: branches/trac232/src/lib/datasrc/data_source.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.cc (original)
+++ branches/trac232/src/lib/datasrc/data_source.cc Thu Sep 9 15:13:51 2010
@@ -1473,7 +1473,6 @@
rrsets++;
if (first_soa->getType() == RRType::SOA()) {
if (!haveRRset(transaction, first_soa)) {
- std::cout << "[XX] Start SOA does not match mine: " << first_soa->toText() << std::endl;
return (DataSrc::ERROR);
}
} else {
@@ -1490,11 +1489,9 @@
}
bool deleting = true;
- std::cout << "[XX] final soa: " << final_soa->toText() << std::endl;
RRsetPtr cur_rrset;
while (rrsets != end) {
cur_rrset = *rrsets;
- std::cout << "[XX] cur rrset: " << cur_rrset->toText() << std::endl;
// If we see a SOA, it means we are switching operations (either
// we start deleting or adding depending on what we were doing
@@ -1507,14 +1504,11 @@
if (deleting) {
// check if rrset exists, if not, something is very wrong, abort
if (haveRRset(transaction, cur_rrset)) {
- std::cout << "[XX] delete: " << cur_rrset->toText() << std::endl;
delRRset(transaction, cur_rrset);
} else {
- std::cout << "[XX] rrset for delete not found: " << cur_rrset->toText() << std::endl;
return (DataSrc::ERROR);
}
} else {
- std::cout << "[XX] add: " << cur_rrset->toText() << std::endl;
addRRset(transaction, cur_rrset);
}
}
@@ -1526,7 +1520,6 @@
addRRset(transaction, final_soa);
return (DataSrc::SUCCESS);
} else {
- std::cout << "[XX] something went wrong" << std::endl;
return (DataSrc::ERROR);
}
return (NOT_IMPLEMENTED);
Modified: branches/trac232/src/lib/datasrc/python/libdata_source_python.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/python/libdata_source_python.cc (original)
+++ branches/trac232/src/lib/datasrc/python/libdata_source_python.cc Thu Sep 9 15:13:51 2010
@@ -458,9 +458,13 @@
isc::dns::RdataIteratorPtr it = rrset.getRdataIterator();
for (it->first(); !it->isLast(); it->next()) {
- PyObject* rdata_obj = PyRRTTL_CreateRdata(rrset.getType(), rrset.getClass(), it->getCurrent());
- PyObject_CallMethod(rrset_obj, const_cast<char*>("add_rdata"),
- const_cast<char*>("O"), rdata_obj);
+ PyObject* rdata_obj = PyRRTTL_CreateRdata(rrset.getType(),
+ rrset.getClass(), it->getCurrent());
+ PyObject* result = PyObject_CallMethod(rrset_obj,
+ const_cast<char*>("add_rdata"),
+ const_cast<char*>("O"),
+ rdata_obj);
+ Py_DECREF(result);
Py_DECREF(rdata_obj);
}
return (rrset_obj);
@@ -491,10 +495,23 @@
PyObject* rdata_list_obj = PyObject_CallMethod(rrset_obj,
const_cast<char*>("get_rdata"),
NULL);
- for (int i = 0; i < PyList_Size(rdata_list_obj); ++i) {
- isc::dns::rdata::ConstRdataPtr rdata = PyRdata_AsRdataPtr(rrtype, rrclass, PyList_GET_ITEM(rdata_list_obj, i));
- rrset_ptr->addRdata(*rdata);
- }
+ try {
+ for (int i = 0; i < PyList_Size(rdata_list_obj); ++i) {
+ isc::dns::rdata::ConstRdataPtr rdata =
+ PyRdata_AsRdataPtr(rrtype, rrclass,
+ PyList_GET_ITEM(rdata_list_obj, i));
+ rrset_ptr->addRdata(*rdata);
+ }
+ } catch (isc::Exception exc) {
+ // Should we specialize on exceptions here?
+ Py_DECREF(name_obj);
+ Py_DECREF(rrclass_obj);
+ Py_DECREF(rrtype_obj);
+ Py_DECREF(rrttl_obj);
+
+ PyErr_SetString(PyExc_Exception, exc.what());
+ }
+
Py_DECREF(name_obj);
Py_DECREF(rrclass_obj);
Py_DECREF(rrtype_obj);
@@ -526,6 +543,7 @@
isc::data::ConstElementPtr config = isc::data::Element::fromJSON(str_arg);
return (Py_BuildValue("I", self->datasrc->init(config)));
} else {
+ PyErr_Clear();
return (Py_BuildValue("I", self->datasrc->init()));
}
} catch (isc::data::JSONError jse) {
@@ -793,17 +811,7 @@
static PyObject*
DataSrc_getClass(s_DataSrc* self) {
- // Find the (python) type for the data we are asking for
- PyObject* type = PyObject_GetAttrString(po_DNS_module, "RRClass");
-
- // Currently, the python version can be initialized only with
- // a string or with wire data. Use string for now
- std::string class_txt = self->datasrc->getClass().toText();
-
- // Instantiate a new object and return it.
- PyObject *ret = PyObject_CallObject(type, Py_BuildValue("(s)",
- class_txt.c_str()));
- return (ret);
+ return PyRRClass_FromRRClass(self->datasrc->getClass());
}
static PyObject*
@@ -1035,15 +1043,23 @@
if (PyArg_ParseTuple(args, "O!O!O!", &datasrc_type, &data_source,
nameType, &po_name,
rrclassType, &po_rrclass)) {
- isc::dns::Name rrname(PyBytes_AS_STRING(PyUnicode_AsEncodedString(
- PyObject_CallMethod(po_name,
- const_cast<char*>("to_text"),
- NULL),
- "utf-8", "Error")));
- isc::dns::RRClass rrclass(PyLong_AsLong(
- PyObject_CallMethod(po_rrclass,
- const_cast<char*>("get_code"),
- NULL)));
+ Py_DECREF(nameType);
+ Py_DECREF(rrclassType);
+ PyObject *str_obj = PyObject_CallMethod(po_name,
+ const_cast<char*>("to_text"),
+ NULL);
+ PyObject *str_enc = PyUnicode_AsEncodedString(str_obj,
+ "utf-8",
+ "Error");
+ isc::dns::Name rrname(PyBytes_AS_STRING(str_enc));
+ Py_DECREF(str_obj);
+ Py_DECREF(str_enc);
+
+ PyObject *code_obj = PyObject_CallMethod(po_rrclass,
+ const_cast<char*>("get_code"),
+ NULL);
+ isc::dns::RRClass rrclass(PyLong_AsLong(code_obj));
+ Py_DECREF(code_obj);
self->datasrc_transaction = new DataSrcTransaction(data_source->datasrc,
rrname,
rrclass);
@@ -1051,7 +1067,8 @@
return (0);
}
- //self->datasrc_transaction = new DataSrcTransaction();
+ Py_DECREF(nameType);
+ Py_DECREF(rrclassType);
return (-1);
}
More information about the bind10-changes
mailing list