[PATCH] Checa se o elemento existe

Thadeu Lima de Souza Cascardo cascardo en cascardo.info
Mar Jul 16 12:01:29 UTC 2013


On Sun, Jul 07, 2013 at 10:26:52AM -0300, camponez en gmail.com wrote:
> From: Eduardo Elias Camponez <camponez en gmail.com>
> 
> Signed-off-by: Eduardo Elias Camponez <camponez en gmail.com>
> ---
>  src/contribuinte.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/contribuinte.py b/src/contribuinte.py
> index 80c17c0..46d2a7b 100644
> --- a/src/contribuinte.py
> +++ b/src/contribuinte.py
> @@ -45,7 +45,7 @@ class Contribuinte:
>          cpf = self._normalize_cpf(self.cpf)
>          self.declaracoes = xml.dom.minidom.parse(self.iddecl_file)
>          for i in self.declaracoes.childNodes[0].childNodes:
> -            if "cpf" in i.attributes.keys():
> +            if i.attributes and "cpf" in i.attributes.keys():
>                  if i.attributes["cpf"].nodeValue == cpf:
>                      return i
>          return None
> -- 
> 1.8.1.2
> 
> _______________________________________________
> Softwares-impostos mailing list
> Softwares-impostos en fsfla.org
> http://www.fsfla.org/cgi-bin/mailman/listinfo/softwares-impostos

O problema real é que alguns nós filhos podem não ser elementos, mas
texto, como espaço. Avaliando o seu problema real, este patch não o
resolve, fazendo a função retornar None.

Dá uma olhada no commit abaixo. Aplico com o seu Ack.


---
From: Thadeu Lima de Souza Cascardo <cascardo en cascardo.info>
Date: Tue, 16 Jul 2013 08:55:08 -0300
Subject: [PATCH] =?UTF-8?q?Obt=C3=A9m=20elementos=20pelo=20nome=20da=20tag?=
 =?UTF-8?q?.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Ao invés de assumir que os nós são apenas elementos, e não podem ser
texto, busca por elementos com a tag. O teste do contribuinte passa a
funcionar após esse patch.
---
 src/contribuinte.py | 2 +-
 src/municipios.py   | 2 +-
 src/ocupacoes.py    | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/contribuinte.py b/src/contribuinte.py
index a9e055b..f477d0a 100644
--- a/src/contribuinte.py
+++ b/src/contribuinte.py
@@ -44,7 +44,7 @@ class Contribuinte:
     def _find_id(self):
         cpf = self._normalize_cpf(self.cpf)
         self.declaracoes = xml.dom.minidom.parse(self.iddecl_file)
-        for i in self.declaracoes.childNodes[0].childNodes:
+        for i in self.declaracoes.getElementsByTagName("item"):
             if "cpf" in i.attributes.keys():
                 if i.attributes["cpf"].nodeValue == cpf:
                     return i
diff --git a/src/municipios.py b/src/municipios.py
index 733b8fe..c9cd47a 100644
--- a/src/municipios.py
+++ b/src/municipios.py
@@ -23,7 +23,7 @@ class Municipios:
         self.l = []
 
     def _list(self):
-        for i in self.xml.childNodes[0].childNodes:
+        for i in self.xml.getElementsByTagName("ITEM"):
             if "COL3" in i.attributes.keys():
                 self.l.append((i.attributes["COL1"].nodeValue, \
                         i.attributes["COL2"].nodeValue, \
diff --git a/src/ocupacoes.py b/src/ocupacoes.py
index 87b9f32..755d070 100644
--- a/src/ocupacoes.py
+++ b/src/ocupacoes.py
@@ -28,7 +28,7 @@ class Ocupacoes:
         self._group()
 
     def _list(self):
-        for i in self.xml.childNodes[0].childNodes:
+        for i in self.xml.getElementsByTagName("ITEM"):
             if "COL4" in i.attributes.keys():
                 self.l.append((i.attributes["COL1"].nodeValue, \
                         i.attributes["COL2"].nodeValue, \
-- 
1.8.1.4



Más información sobre la lista de distribución Softwares-impostos