### -*-pyrex-*- ### ### Form-urlencoding functions ### ### (c) 2006 Straylight/Edgeware ### ###----- Licensing notice --------------------------------------------------- ### ### This file is part of the Python interface to mLib. ### ### mLib/Python is free software; you can redistribute it and/or modify ### it under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2 of the License, or ### (at your option) any later version. ### ### mLib/Python is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with mLib/Python; if not, write to the Free Software Foundation, ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. cdef class URLEncode: cdef url_ectx ctx cdef dstr d def __cinit__(me, *hunoz, **hukairz): url_initenc(&me.ctx) DCREATE(&me.d) def __init__(me, strictp = False, laxp = False, semip = False): cdef unsigned f f = 0 if strictp: f = f | URLF_STRICT if laxp: f = f | URLF_LAX if semip: f = f | URLF_SEMI me.ctx.f = f def encode(me, char *name, char *value): url_enc(&me.ctx, &me.d, name, value) return me property result: def __get__(me): return PyString_FromStringAndSize(me.d.buf, me.d.len) property strictp: def __get__(me): return _tobool(me.ctx.f & URLF_STRICT) def __set__(me, val): if val: me.ctx.f = me.ctx.f | URLF_STRICT else: me.ctx.f = me.ctx.f & ~URLF_STRICT property laxp: def __get__(me): return _tobool(me.ctx.f & URLF_LAX) def __set__(me, val): if val: me.ctx.f = me.ctx.f | URLF_LAX else: me.ctx.f = me.ctx.f & ~URLF_LAX property semip: def __get__(me): return _tobool(me.ctx.f & URLF_SEMI) def __set__(me, val): if val: me.ctx.f = me.ctx.f | URLF_SEMI else: me.ctx.f = me.ctx.f & ~URLF_SEMI def __del__(me): dstr_destroy(&me.d) cdef class URLDecode: cdef url_dctx ctx cdef char *p def __cinit__(me, *hunoz, **hukairz): me.p = xstrdup('') url_initdec(&me.ctx, me.p) def __init__(me, char *string, semip = False): cdef unsigned f f = 0 if semip: f = f | URLF_SEMI xfree(me.p) me.p = xstrdup(string) me.ctx.p = me.p me.ctx.f = f def __iter__(me): return me def __next__(me): cdef dstr n cdef dstr v cdef object nn cdef object vv cdef int anyp DCREATE(&n) DCREATE(&v) anyp = url_dec(&me.ctx, &n, &v) if anyp: nn = PyString_FromStringAndSize(n.buf, n.len) vv = PyString_FromStringAndSize(v.buf, v.len) dstr_destroy(&n) dstr_destroy(&v) if not anyp: raise StopIteration return nn, vv property semip: def __get__(me): return _tobool(me.ctx.f & URLF_SEMI) def __set__(me, val): if val: me.ctx.f = me.ctx.f | URLF_SEMI else: me.ctx.f = me.ctx.f & ~URLF_SEMI def __del__(me): xfree(me.p) ###----- That's all, folks --------------------------------------------------