[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