Example #1
0
def p_add_stmt(p):
    '''add_stmt : ADD adjectives name description'''  # assignment_clause'''
    # eg   "add pphys hw 'ch3:1,2,8,9' due friday"
    n = len(p.slice)
    type = ''  # this has been subsumed in adjectives...
    adjectives = p[2]  # list of objects, or empty list
    name = p[3]  # string
    description = p[4]  # string or None
    #    assignments = p[5]  # list of Set cmds? or empty list
    #    cmd = Commands.Add(abby, type, name, description, adjectives, clauses)
    cmd = Commands.Add(abby, type, name, description, adjectives)
    p[0] = cmd
    log.debug('p_add_stmt: %s', p[0])
Example #2
0
    def Parse(self, stream):
        """
        Iterator that returns command objects that it builds from the tokens 
        returned by the given stream object.
        This is used by Import.
        """

        import csv  # python library

        print 'stream:', stream
        formattype = stream.formattype  # eg ascii, human, asciiNoCR
        #, this bombs with "TypeError: argument 1 must be an iterator"
        #        reader = csv.reader(stream)
        reader = csv.reader(stream.file, delimiter=stream.fielddelim)
        # first line should be field names
        # read first row and parse into fields (ie property names)
        #, note: this is different from self.propnames... consolidate somehow...
        propnames = reader.next()
        #, make sure they are lowercase
        # actually, want them to be capitalized
        ## for propname in propnames:
        ## propnames[ = propname.lower()
        #        propnames = [propname.lower() for propname in propnames]
        #        propnames = [Objects.GetInternalName(propname) for propname in propnames]
        propnames = [
            Objects.GetExternalName(propname) for propname in propnames
        ]
        print 'propnames:', propnames
        #, get propobjs and proptypes
        props = []
        for propname in propnames:
            #, this is liable to bomb if user gives bad propnames...
            prop = self.abby.Get(exactname=propname)
            props.append(prop)

        import Commands

        # get rows of property value lists from the stream, one by one
        for row in reader:
            # eg row=['neomem','project','']
            print 'row:', row
            # get a dict of propnames and propvalues
            # basically stitch the two lists together...
            ## obj = Objects.Obj()
            ## for propname, propvalue in zip(propnames, row):
            ## obj.SetValue(propname, propvalue)
            ## self.abby._AddToIndex(obj) # this may raise an exception
            #, easier way to do this?
            # build a composite Clause object
            #            clauses = Commands.Clauses()
            setcmds = Data.List()  #?
            #            for propname, propvalue in zip(propnames, row):
            for prop, propvalue in zip(props, row):
                # save name for later...
                #                if propname=='Name':
                if prop.name == 'Name':
                    name = propvalue  # string value
                #dict[propname] = propvalue
                # wrap the propvalue string in a Data object
#                data = Data.Wrap(propvalue, formattype)
#propvalue = Data.Factory(proptype, propvalue, formattype)
#                clause = Commands.Clause(propname, '=', data)
#                clause = Commands.Clause(prop, '=', data)

#. set commands are not so appropriate here because they require an Object
# to be applied to - clauses did not!
                setcmd = Commands.Set(obj, prop, propvalue)
                setcmds.append(setcmd)
            # must pass unique name here!
#            cmd = Commands.Add(self.abby, name=name, clauses=clauses)
            cmd = Commands.Add(self.abby, name=name, setcmds=setcmds)
            yield cmd

        # stop the ride...
        return