コード例 #1
0
ファイル: niceimap.py プロジェクト: dannymi/IMAPFS
def parse_attributes(text):
    stream = StringIO()
    stream.write(text)
    stream.seek(0)
    premonition_stream_1 = lisp.premonition_stream(stream)
    items = lisp.parse(premonition_stream_1)
    return items
コード例 #2
0
ファイル: niceimap.py プロジェクト: dannymi/IMAPFS
def decode_folders(folders):
    for folder_text in folders:
        # print "folder_text", folder_text
        stream = StringIO()
        stream.write(folder_text)
        # (\HasNoChildren) "/" "Gel&APY-schte Objekte" <type 'str'>
        stream.seek(0)
        premonition_stream_1 = lisp.premonition_stream(stream)
        assert premonition_stream_1.peek() == "("
        premonition_stream_1.consume()
        flags = lisp.parse(premonition_stream_1)

        assert premonition_stream_1.peek() == " "
        premonition_stream_1.consume()

        separator = lisp.parse_string_literal(premonition_stream_1)
        assert separator == "/"  # limitation

        assert premonition_stream_1.peek() == " "
        premonition_stream_1.consume()

        if premonition_stream_1.peek() == '"':
            name = lisp.parse_string_literal(premonition_stream_1)
        else:  # weird.
            name = premonition_stream_1.consume_rest()

        name = "".join(unescape_imap_name(name))

        # flags, separator, name = data
        yield flags, separator, name
コード例 #3
0
ファイル: test_lisp.py プロジェクト: TempleCloud/tutorials
 def test_eval_expr(self):
     """Test 'eval_sexpr' function happy path"""
     eval_sexpr(parse("(define r 10)"))
     actual = eval_sexpr(parse("(* pi (* r r))"))
     expected = 314.1592653589793
     self.assertEqual(actual, expected)
コード例 #4
0
ファイル: test_lisp.py プロジェクト: TempleCloud/tutorials
 def test_parse(self):
     """Test 'parse' function happy path"""
     actual = parse('(begin (define r 10) (* pi (* r r)))')
     expected = ['begin', ['define', 'r', 10], ['*', 'pi', ['*', 'r', 'r']]]
     self.assertEqual(actual, expected)
コード例 #5
0
ファイル: niceimap.py プロジェクト: dannymi/IMAPFS
def parse_items(all_items, just_one_item_p=False):
    # re_items = re.compile(r"^([0-9][0-9]*) (.*)$")
    # match = re_items.match(items)
    # assert(match)
    # print >>sys.stderr,"group(1)", match.group(1), uid, type(uid)
    # assert(int(match.group(1)) == int(uid))
    # items = match.group(2)

    stream = StringIO()

    # all_items arbitrary item, literal, ... parts
    for items in all_items:
        if isinstance(items, str) and items.startswith(
            "Some messages in the mailbox had previously been expunged and could not be returned"
        ):
            # Some messages in the mailbox had previously been expunged and could not be returned. <type 'str'>

            pass
            # raise ParseError()

        if items is None:  # ???
            # ('46 (ENVELOPE ("Wed, 11 Apr 2007 13:08:38 +0200" {35}', 'Neues "Local-Index-Service" Projekt') <type 'tuple'>

            print >> sys.stderr, "error: one item is None: all_items = ", all_items
            raise ParseError()

        if isinstance(items, tuple):  # has literal parts
            # print >>sys.stderr, "tuple", items
            coalesced_result = ""
            is_literal = False
            for tuple_item in items:
                if not is_literal:
                    i = tuple_item.rfind("{")
                    if i > -1:
                        tuple_item = tuple_item[:i]
                        is_literal = True
                else:
                    # is_literal
                    is_literal = False

                    tuple_item = lisp_escaped_quoted_string(tuple_item)

                stream.write(tuple_item)
        else:
            stream.write(items)

    stream.seek(0)

    # import pickle
    # pickle.dump(stream.getvalue(), open('/tmp/save.p','w')) # FIXME

    # print >>sys.stderr, ">>>", stream.getvalue(), "<<<"

    premonition_stream_1 = lisp.premonition_stream(stream)
    # assert(premonition_stream_1.peek() == "(")
    # premonition_stream_1.consume()

    items = lisp.parse(premonition_stream_1)
    # items = [1, [\UID, 0807, \FLAGS, [\Seen], ...], 2, [\UID, 0808, \FLAGS, [\Seen], ...]]

    items = pair(items)
    # items = [(1, [\UID, 0807, \FLAGS, [\Seen], ...]), (2, [\UID, 0808, \FLAGS, [\Seen], ...], ...)]
    """
		(ENVELOPE
			("Wed, 10 Jan 2007 18:16:22 +0200" "subject" (
				("Long, Name" NIL "Name.Long" "fabalabs.org")
			)
			(
				("Long, Name" NIL "Name.Long" "fabalabs.org")
			)
			(
				("Long, Name" NIL "Name.Long" "fabalabs.org")
			)
			(
				("Milosavljevic, Danny" NIL "Danny.Milosavljevic" "fabasoft.com")
				("Pesendorfer, Klaus" NIL "Klaus.Pesendorfer" "fabasoft.com")
				("Lechner, Jakob" NIL "Jakob.Lechner" "fabasoft.com")
			)
			NIL
			NIL
			NIL
			"<[email protected]asoft.com>"))
	"""

    # items [\UID, \10525, \ENVELOPE, ['Wed, 10 Jan 2007 18:16:22 +0200', 'subject' ..

    # print >>sys.stderr, "items", items # [0]
    # assert(items[0][0] in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"])
    # items.next()

    if not just_one_item_p:
        items = items[1:]

    for number, item in items:
        # print >>sys.stderr, "item", item
        # print >>sys.stderr, "yield", dict(pair(item)) # FIXME
        yield dict(pair(item))