7c3e6c34c6e24161c91c7051cbc7226e729d8d60
mmaddren
  Tue May 10 14:06:29 2011 -0700
updated Cv suite with unittest
diff --git python/ucscgenomics/rafile/RaFile.py python/ucscgenomics/rafile/RaFile.py
index a3c53d2..7c27048 100644
--- python/ucscgenomics/rafile/RaFile.py
+++ python/ucscgenomics/rafile/RaFile.py
@@ -1,183 +1,183 @@
 import sys
 import re
 from OrderedDict import *
 
 class RaFile(OrderedDict):
     """
     Stores an Ra file in a set of entries, one for each stanza in the file.
     """
 
     def __init__(self, filePath=''):
         OrderedDict.__init__(self)
         if filePath != '':
             self.read(filePath) 
 
     def read(self, filePath):
         """
         Reads an rafile stanza by stanza, and internalizes it.
         """
 
         file = open(filePath, 'r')
 
-        #entry = self.__entryType()
+		#entry = None
         stanza = list()
         keyValue = ''
 
         for line in file:
  
             line = line.strip()
 
             if len(stanza) == 0 and (line.startswith('#') or line == ''):
                 OrderedDict.append(self, line)
                 continue
 
             if line != '':
                 stanza.append(line)
             elif len(stanza) > 0:
                if keyValue == '':
                    keyValue, name, entry = self.readStanza(stanza)
                else:
                    testKey, name, entry = self.readStanza(stanza)
-                   if keyValue != testKey:
+					if entry != None and keyValue != testKey:
                        raise KeyError('Inconsistent Key ' + testKey)
        
+				if entry != None:
                if name in self:
                    raise KeyError('Duplicate Key ' + name)
-
                self[name] = entry
-               #entry = self.__entryType()
+				
                stanza = list()
 
         if len(stanza) > 0:
             raise IOError('File is not newline terminated')
 
         file.close()
 
    
     def readStanza(self, stanza):
         entry = RaStanza()
         val1, val2 = entry.readStanza(stanza)
         return val1, val2, entry
 
 
     def iter(self):
         pass
 
 
     def iterkeys(self):
         for item in self._OrderedDict__ordering:
             if not(item.startswith('#') or item == ''):
                 yield item
 
 
     def itervalues(self):
         for item in self._OrderedDict__ordering:
             if not (item.startswith('#') or item == ''):
                 yield self[item]
 
 
     def iteritems(self):
         for item in self._OrderedDict__ordering:
             if not (item.startswith('#') or item == ''):
                 yield item, self[item]
             else:
                 yield [item]
 
 
     def __str__(self):
         str = ''
         for item in self.iteritems():
             if len(item) == 1:
                 str += item[0].__str__() + '\n'
             else:
                 str += item[1].__str__() + '\n'
         return str
 
 
 class RaStanza(OrderedDict):
     """
     Holds an individual entry in the RaFile.
     """
 
     def __init__(self):
         self._name = ''
         OrderedDict.__init__(self)
   
     @property 
     def name(self):
         return self._name
 
 
     def readStanza(self, stanza):
         """
         Populates this entry from a single stanza
         """
 
         for line in stanza:
             self.__readLine(line)
 
         return self.__readName(stanza[0])
 
 
     def __readName(self, line):
         """
         Extracts the Stanza's name from the value of the first line of the
         stanza.
         """
 
         if len(line.split(' ', 1)) != 2:
             raise ValueError()
 
         names = map(str.strip, line.split(' ', 1))
         self._name = names[1]
         return names
 
     def __readLine(self, line):
         """
         Reads a single line from the stanza, extracting the key-value pair
         """ 
 
         if line.startswith('#') or line == '':
             OrderedDict.append(self, line)
             #self._OrderedDict__ordering.append(line)
         else:
            raKey = line.split(' ', 1)[0]
            raVal = ''
            if (len(line.split(' ', 1)) == 2):
                raVal = line.split(' ', 1)[1]
            #raKey, raVal = map(str, line.split(' ', 1))
            self[raKey] = raVal
 
 
     def iter(self):
         pass
 
 
     def iterkeys(self):
         for item in self._OrderedDict__ordering:
             if not (item.startswith('#') or item == ''):
                 yield item
 
 
     def itervalues(self):
         for item in self._OrderedDict__ordering:
             if not (item.startswith('#') or item == ''):
                 yield self[item]
 
 
     def iteritems(self):
         for item in self._OrderedDict__ordering:
             if not (item.startswith('#') or item == ''):
                 yield item, self[item]
 
 
     def __str__(self):
         str = ''
         for key in self:
             if key.startswith('#'):
                 str += key + '\n'
             else:
                 str += key + ' ' + self[key] + '\n'
 
         return str