예제 #1
0
파일: parser.py 프로젝트: Dlizzz/qifparse
    def parseMemorizedTransaction(cls_,
                                  chunk,
                                  date_format=DEFAULT_DATETIME_FORMAT):
        """
        """

        curItem = MemorizedTransaction()
        if date_format:
            curItem.date_format = DATETIME_FORMAT[date_format]
        lines = chunk.split('\n')
        for line in lines:
            if not len(line) or line[0] == '\n' or \
                    line.startswith('!Type:Memorized'):
                continue
            elif line[0] == 'T':
                curItem.amount = Decimal(line[1:])
            elif line[0] == 'C':
                curItem.cleared = line[1:]
            elif line[0] == 'P':
                curItem.payee = line[1:]
            elif line[0] == 'M':
                curItem.memo = line[1:]
            elif line[0] == 'K':
                curItem.mtype = line[1:]
            elif line[0] == 'A':
                if not curItem.address:
                    curItem.address = []
                curItem.address.append(line[1:])
            elif line[0] == 'L':
                cat = line[1:]
                if cat.startswith('['):
                    curItem.to_account = cat[1:-1]
                else:
                    curItem.category = cat
            elif line[0] == 'S':
                curItem.splits.append(AmountSplit())
                split = curItem.splits[-1]
                cat = line[1:]
                if cat.startswith('['):
                    split.to_account = cat[1:-1]
                else:
                    split.category = cat
            elif line[0] == 'E':
                split = curItem.splits[-1]
                split.memo = line[1:-1]
            elif line[0] == 'A':
                split = curItem.splits[-1]
                if not split.address:
                    split.address = []
                split.address.append(line[1:])
            elif line[0] == '$':
                split = curItem.splits[-1]
                split.amount = Decimal(line[1:])
            else:
                # don't recognise this line; ignore it
                print("Skipping unknown line:\n" + str(line))
        return curItem
예제 #2
0
    def parseMemorizedTransaction(cls_,
                                  chunk,
                                  date_format=DEFAULT_DATE_FORMAT,
                                  decimal_sep=DEFAULT_DECIMAL_SEP,
                                  thousands_sep=DEFAULT_THOUSANDS_SEP):
        """
        """

        curItem = MemorizedTransaction()
        lines = chunk.split('\n')
        for line in lines:
            if not len(line) or line[0] == '\n' or \
                    line.startswith('!Type:Memorized'):
                continue
            elif line[0] == 'T':
                curItem.amount = cls_.parseQifNumber(
                    line[1:],
                    decimal_sep=decimal_sep,
                    thousands_sep=thousands_sep)
            elif line[0] == 'C':
                curItem.cleared = line[1:]
            elif line[0] == 'P':
                curItem.payee = line[1:]
            elif line[0] == 'M':
                curItem.memo = line[1:]
            elif line[0] == 'K':
                curItem.mtype = line[1:]
            elif line[0] == 'A':
                if not curItem.address:
                    curItem.address = []
                curItem.address.append(line[1:])
            elif line[0] == 'L':
                cat = line[1:]
                if cat.startswith('['):
                    curItem.to_account = cat[1:-1]
                else:
                    curItem.category = cat
            elif line[0] == 'S':
                curItem.splits.append(AmountSplit())
                split = curItem.splits[-1]
                cat = line[1:]
                if cat.startswith('['):
                    split.to_account = cat[1:-1]
                else:
                    split.category = cat
            elif line[0] == 'E':
                split = curItem.splits[-1]
                split.memo = line[1:-1]
            elif line[0] == 'A':
                split = curItem.splits[-1]
                if not split.address:
                    split.address = []
                split.address.append(line[1:])
            elif line[0] == '$':
                split = curItem.splits[-1]
                split.amount = cls_.parseQifNumber(line[1:-1],
                                                   decimal_sep=decimal_sep,
                                                   thousands_sep=thousands_sep)
            else:
                # don't recognise this line; ignore it
                logger.warn("Skipping unknown line:\n" + str(line))
        return curItem