[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Re: Class attributes / methods..... full Python script

MRAB

3/1/2010 10:31:00 PM

Gabor Urban wrote:
> Hi guys,
>
> thanks for the ideas. Here you are the code. Not transcoded from Java
> for I do not know Java enough..
>
> I am scanning an XML file, and have a large ammount of logging.
>
> Any ideas are wellcome as before....
>
> Thnx
>
> Code:>
>
> #---------------------------------------------
> ## Generate CSV from OEP History XML
> #---------------------------------------------
>
> import sys
> import os
> from xml.dom.minidom import parse, parseString
> import xml.dom
> import logging
>
> versionStr = '0.01'
>
> class Item:
> def __init__(self, pId, pChange, pComment):
> self.ID = pId
> self.Delta = pChange
> self.Comment = pComment
>
> def PrintItem(self):
> str = '%s,%s,%s'%(self.ID,self.Delta,self.comment)
> return str
>
> class Package:
> def __init__(self, pSerial, pDate, pOwner, pSchema):
> self.serial = pSerial
> self.date = pDate
> self.owner = pOwner
> self.schema = pSchema
> self.items = []
>
> def insertItem(self, pItem):
> self.items.append(pItem)
>
> def printPackage(self):
> lines = []
> str = '%s,%s,%s,%s'%(self.serial,self.date,self.owner,self.schema)
> number = self.items.length

If this is meant to get the length of self.items, then it won't work. It
should be:

number = len(self.items)

> for idx in xrange(number):
> line = ''

What's the purpose of this line? You're not using 'line' before you
assign to it again.

> istr = self.items[idx].PrintItem()
> line = str + ',' + istr
> lines.append(line)
> return lines
>
> def getItem(tracer, pkgItem, itemName):
> retval = -1
> name = ""
> found = 0
> str = ""
> tracer.info('Function getItem entry, name = %s',itemName)
> nItem = pkgItem.getElementsByTagName(itemName).item(0)
> for node in pkgItem.childNodes:
> if node.nodeType != xml.dom.Node.TEXT_NODE:
> tracer.debug('Scanning node name = %s',node.nodeName)
> if node.nodeName == itemName:
> tracer.debug('Pkg %s found',itemName)
> else:
> tracer.warning('Pkg %s is not found',itemName)
> continue
> for entity in node.childNodes:
> if entity.nodeType == xml.dom.Node.TEXT_NODE:
> retval = entity.nodeValue
> tracer.debug("Node value found %s",retval)
> found = 1
> break
> if found == 1:
> break
> tracer.debug('Function getItem returns %s',retval)
> return retval
>
> logger = logging.getLogger('XmlHistory')
> handler = logging.FileHandler("Xmlhistory.trc",'a')
> ## handler = logging.StreamHandler(sys.stderr)
> logger.addHandler(handler)
> formatter = logging.Formatter("%(name)s %(asctime)s %(filename)s
> %(lineno)d %(levelname)s %(message)s")
> handler.setFormatter(formatter)
> logger.setLevel(2)
>
> fileName = "history.xml"
> output = 'history.csv'
> logger.info('Xml history generator version %s',versionStr)
> logger.info('Starting history generation on file:%s',fileName)
>
> packages = []
> data = []
>
> ## Start XML processing
>
> dataSource = parse(fileName)
> print dataSource.documentElement.tagName
> listCsomag = dataSource.getElementsByTagName("csomag")
> size = listCsomag.length
> logger.debug('Number of packages = %d',size)
> for idx in xrange(size):
> attrib = ""
> package = None
> serial = 0
> date = ""
> owner = ""
> schema = ""
> flag = False
> logger.info('Parsing package id=%d',idx)
> attrib = getItem(logger, listCsomag.item(idx),'sorszam')
> if attrib <> "NUM" and attrib <> -1:
> serial = int(attrib)
> flag = True
> logger.debug('Package serial set to %d',serial)
> else:
> logger.debug("Template package found.")
> break
> attrib = ""

What's the purpose of this line? You're not using 'attrib' before you
assign to it again. You're doing this repeatedly in the code.

> attrib = getItem(logger,listCsomag.item(idx),"datum")
> if attrib <> -1:
> date = attrib
> flag = flag and True

Whether 'flag' is False or True, this line won't change it. You're also
doing this repeatedly in the code.

> logger.debug('Package date set to %s',date)
> attrib = ""
> attrib = getItem(logger,listCsomag.item(idx),"ki")
> if attrib <> -1:
> owner = attrib
> flag = flag and True
> logger.debug('Package owner set to %s',owner)
> attrib = ""
> attrib = getItem(logger,listCsomag.item(idx),"sema")
> if attrib <> -1:
> schema = attrib
> flag = flag and True
> logger.debug('Package schema set to %s',schema)
>
> if flag <> True:

Clearer as:

if not flag:

or even clearer if you picked a better name than 'flag'.

> logger.error('Package id=%d is inconsistent',idx)
> break
> else:
> logger.info('Package id=%d is ok',idx)
>
> package = Package(serial,date,owner,schema)
>
> listItem = listCsomag.item(idx).getElementsByTagName("item")
> itemSize = listItem.length
> logger.debug('Number of items = %d',itemSize)
> for num in xrange(itemSize):
> flag = False
> value = -1
> listId = 0
> change = ""
> comment = ""
> item = None
> logger.info('Parsing item id = %d',num)
> value = getItem(logger,listItem.item(num),"item_id")
> if value <> -1:
> listId = int(value)
> flag = True
> logger.debug('List id set to %d',listId)
> value = ""
> value = getItem(logger,listItem.item(num),"valtozas")
> if value <> -1:
> change = value
> flag = flag and True
> logger.debug('List change desc. set to "%s"',change)
> value = ""
> value = getItem(logger,listItem.item(num),"komment")
> if value <> -1:
> comment = value
> flag = flag and True
> logger.debug('List comment desc. set to "%s"',comment)
>
> if flag <> True:
> logger.error('Item id = %d inconsistent',num)
> break
> else:
> logger.info('Item id = %d is ok',num)
>
> item = Item(listId,change,comment)
> package.insertItem(item)
>
> packages.append(Package)
>
The instance is 'package', the class is 'Package'. You're using the
wrong one.

> logger.info('Processing Xml file %s is done',fileName)
> logger.info('Generating file %s is started',output)
>
> size = len(packages)
> package = None
> for index in xrange(size):
> logger.info('PrettyPrinting package id=%d',index)
> oplines = []
> oplines = packages[index].printPackage()
> for i in xrange(oplines.length):

The length of a list, string, etc, is given by 'len', eg. len(oplines).

> data.append(oplines[i])
>
> print data
>