chiark / gitweb /
Overhaul formatting.
[mLib-python] / url.pyx
CommitLineData
5b1830f3
MW
1### -*-pyrex-*-
2###
3### Form-urlencoding functions
4###
5### (c) 2006 Straylight/Edgeware
6###
5ce5170c 7
5b1830f3
MW
8###----- Licensing notice ---------------------------------------------------
9###
10### This file is part of the Python interface to mLib.
11###
12### mLib/Python is free software; you can redistribute it and/or modify
13### it under the terms of the GNU General Public License as published by
14### the Free Software Foundation; either version 2 of the License, or
15### (at your option) any later version.
16###
17### mLib/Python is distributed in the hope that it will be useful,
18### but WITHOUT ANY WARRANTY; without even the implied warranty of
19### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20### GNU General Public License for more details.
21###
22### You should have received a copy of the GNU General Public License
23### along with mLib/Python; if not, write to the Free Software Foundation,
24### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
5ce5170c
MW
25
26cdef class URLEncode:
27 cdef url_ectx ctx
28 cdef dstr d
29
376ad06d 30 def __cinit__(me, *hunoz, **hukairz):
5ce5170c
MW
31 url_initenc(&me.ctx)
32 DCREATE(&me.d)
33 def __init__(me, strictp = False, laxp = False, semip = False):
34 cdef unsigned f
35 f = 0
36 if strictp:
37 f = f | URLF_STRICT
38 if laxp:
39 f = f | URLF_LAX
40 if semip:
41 f = f | URLF_SEMI
42 me.ctx.f = f
43 def encode(me, char *name, char *value):
44 url_enc(&me.ctx, &me.d, name, value)
45 return me
46 property result:
47 def __get__(me):
48 return PyString_FromStringAndSize(me.d.buf, me.d.len)
49 property strictp:
50 def __get__(me):
51 return _tobool(me.ctx.f & URLF_STRICT)
52 def __set__(me, val):
53 if val:
54 me.ctx.f = me.ctx.f | URLF_STRICT
55 else:
56 me.ctx.f = me.ctx.f & ~URLF_STRICT
57 property laxp:
58 def __get__(me):
59 return _tobool(me.ctx.f & URLF_LAX)
60 def __set__(me, val):
61 if val:
62 me.ctx.f = me.ctx.f | URLF_LAX
63 else:
64 me.ctx.f = me.ctx.f & ~URLF_LAX
65 property semip:
66 def __get__(me):
67 return _tobool(me.ctx.f & URLF_SEMI)
68 def __set__(me, val):
69 if val:
70 me.ctx.f = me.ctx.f | URLF_SEMI
71 else:
d8d81d1b 72 me.ctx.f = me.ctx.f & ~URLF_SEMI
5ce5170c
MW
73 def __del__(me):
74 dstr_destroy(&me.d)
75
76cdef class URLDecode:
77 cdef url_dctx ctx
78 cdef char *p
79
376ad06d 80 def __cinit__(me, *hunoz, **hukairz):
5ce5170c
MW
81 me.p = xstrdup('')
82 url_initdec(&me.ctx, me.p)
83 def __init__(me, char *string, semip = False):
84 cdef unsigned f
85 f = 0
86 if semip:
87 f = f | URLF_SEMI
88 xfree(me.p)
89 me.p = xstrdup(string)
90 me.ctx.p = me.p
91 me.ctx.f = f
92 def __iter__(me):
93 return me
94 def __next__(me):
95 cdef dstr n
96 cdef dstr v
97 cdef object nn
98 cdef object vv
99 cdef int anyp
100 DCREATE(&n)
101 DCREATE(&v)
102 anyp = url_dec(&me.ctx, &n, &v)
103 if anyp:
104 nn = PyString_FromStringAndSize(n.buf, n.len)
105 vv = PyString_FromStringAndSize(v.buf, v.len)
106 dstr_destroy(&n)
107 dstr_destroy(&v)
108 if not anyp:
109 raise StopIteration
110 return nn, vv
111 property semip:
112 def __get__(me):
113 return _tobool(me.ctx.f & URLF_SEMI)
114 def __set__(me, val):
115 if val:
116 me.ctx.f = me.ctx.f | URLF_SEMI
117 else:
118 me.ctx.f = me.ctx.f & ~URLF_SEMI
119 def __del__(me):
120 xfree(me.p)
121
5b1830f3 122###----- That's all, folks --------------------------------------------------