Changeset 5320:7d6ab01ea0b5 in livinglogic.python.xist

Show
Ignore:
Timestamp:
02/06/13 20:13:00 (6 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

If an UL4 function/method doesn't have to be an generator, don't make it one.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/ll/ul4c.py

    r5319 r5320  
    362362 
    363363    def _str(self, indent, keepws): 
    364         yield _repr_(self.value) 
     364        yield _repr(self.value) 
    365365 
    366366    def eval(self, keepws, vars): 
     
    13091309 
    13101310    def eval(self, keepws, vars): 
    1311         yield _str_((yield from self.obj.eval(keepws, vars))) 
     1311        yield _str((yield from self.obj.eval(keepws, vars))) 
    13121312 
    13131313 
     
    13251325 
    13261326    def eval(self, keepws, vars): 
    1327         yield _xmlescape_((yield from self.obj.eval(keepws, vars))) 
     1327        yield _xmlescape((yield from self.obj.eval(keepws, vars))) 
    13281328 
    13291329 
     
    25232523        if i: 
    25242524            yield " " 
    2525         yield _str_(value) 
     2525        yield _str(value) 
    25262526 
    25272527 
     
    25312531        if i: 
    25322532            yield " " 
    2533         yield _xmlescape_(value) 
     2533        yield _xmlescape(value) 
    25342534 
    25352535 
    25362536@AST.makefunction 
    25372537def _str(obj=""): 
    2538     yield from () 
    2539     return _str_(obj) 
     2538    if obj is None: 
     2539        return "" 
     2540    elif isinstance(obj, Undefined): 
     2541        return "" 
     2542    else: 
     2543        return str(obj) 
    25402544 
    25412545 
    25422546@AST.makefunction 
    25432547def _repr(obj): 
    2544     yield from () 
    2545     return _repr_(obj) 
     2548    if isinstance(obj, str): 
     2549        return repr(obj) 
     2550    elif isinstance(obj, datetime.datetime): 
     2551        s = str(obj.isoformat()) 
     2552        if s.endswith("T00:00:00"): 
     2553            s = s[:-9] 
     2554        return "@({})".format(s) 
     2555    elif isinstance(obj, datetime.date): 
     2556        return "@({})".format(obj.isoformat()) 
     2557    elif isinstance(obj, datetime.timedelta): 
     2558        return repr(obj).partition(".")[-1] 
     2559    elif isinstance(obj, color.Color): 
     2560        if obj[3] == 0xff: 
     2561            s = "#{:02x}{:02x}{:02x}".format(obj[0], obj[1], obj[2]) 
     2562            if s[1]==s[2] and s[3]==s[4] and s[5]==s[6]: 
     2563                return "#{}{}{}".format(s[1], s[3], s[5]) 
     2564            return s 
     2565        else: 
     2566            s = "#{:02x}{:02x}{:02x}{:02x}".format(*obj) 
     2567            if s[1]==s[2] and s[3]==s[4] and s[5]==s[6] and s[7]==s[8]: 
     2568                return "#{}{}{}{}".format(s[1], s[3], s[5], s[7]) 
     2569            return s 
     2570    elif isinstance(obj, collections.Sequence): 
     2571        return "[{}]".format(", ".join(_repr(item) for item in obj)) 
     2572    elif isinstance(obj, collections.Mapping): 
     2573        return "{{{}}}".format(", ".join("{}: {}".format(_repr(key), _repr(value)) for (key, value) in obj.items())) 
     2574    else: 
     2575        return repr(obj) 
    25462576 
    25472577 
    25482578@AST.makefunction 
    25492579def _now(): 
    2550     yield from () 
    25512580    return datetime.datetime.now() 
    25522581 
     
    25542583@AST.makefunction 
    25552584def _utcnow(): 
    2556     yield from () 
    25572585    return datetime.datetime.utcnow() 
    25582586 
     
    25602588@AST.makefunction 
    25612589def _date(year, month, day, hour=0, minute=0, second=0, microsecond=0): 
    2562     yield from () 
    25632590    return datetime.datetime(year, month, day, hour, minute, second, microsecond) 
    25642591 
     
    25662593@AST.makefunction 
    25672594def _timedelta(days=0, seconds=0, microseconds=0): 
    2568     yield from () 
    25692595    return datetime.timedelta(days, seconds, microseconds) 
    25702596 
     
    25722598@AST.makefunction 
    25732599def _monthdelta(months=0): 
    2574     yield from () 
    25752600    return misc.monthdelta(months) 
    25762601 
     
    25782603@AST.makefunction 
    25792604def _random(): 
    2580     yield from () 
    25812605    return random.random() 
    25822606 
     
    25842608@AST.makefunction 
    25852609def _xmlescape(obj): 
    2586     yield from () 
    2587     return _xmlescape_(obj) 
     2610    if obj is None: 
     2611        return "" 
     2612    elif isinstance(obj, Undefined): 
     2613        return "" 
     2614    else: 
     2615        return misc.xmlescape(str(obj)) 
    25882616 
    25892617 
    25902618@AST.makefunction 
    25912619def _csv(obj): 
    2592     yield from () 
    25932620    if obj is None: 
    25942621        return "" 
     
    25962623        return "" 
    25972624    elif not isinstance(obj, str): 
    2598         obj = _repr_(obj) 
     2625        obj = _repr(obj) 
    25992626    if any(c in obj for c in ',"\n'): 
    26002627        return '"{}"'.format(obj.replace('"', '""')) 
     
    26042631@AST.makefunction 
    26052632def _asjson(obj): 
    2606     yield from () 
    2607     return _asjson_(obj) 
     2633    if obj is None: 
     2634        return "null" 
     2635    elif isinstance(obj, Undefined): 
     2636        return "{}.undefined" 
     2637    if isinstance(obj, (bool, int, float, str)): 
     2638        return json.dumps(obj) 
     2639    elif isinstance(obj, datetime.datetime): 
     2640        return "new Date({}, {}, {}, {}, {}, {}, {})".format(obj.year, obj.month-1, obj.day, obj.hour, obj.minute, obj.second, obj.microsecond//1000) 
     2641    elif isinstance(obj, datetime.date): 
     2642        return "new Date({}, {}, {})".format(obj.year, obj.month-1, obj.day) 
     2643    elif isinstance(obj, datetime.timedelta): 
     2644        return "ul4.TimeDelta.create({}, {}, {})".format(obj.days, obj.seconds, obj.microseconds) 
     2645    elif isinstance(obj, misc.monthdelta): 
     2646        return "ul4.MonthDelta.create({})".format(obj.months) 
     2647    elif isinstance(obj, color.Color): 
     2648        return "ul4.Color.create({}, {}, {}, {})".format(*obj) 
     2649    elif isinstance(obj, collections.Mapping): 
     2650        return "{{{}}}".format(", ".join("{}: {}".format(_asjson(key), _asjson(value)) for (key, value) in obj.items())) 
     2651    elif isinstance(obj, collections.Sequence): 
     2652        return "[{}]".format(", ".join(_asjson(item) for item in obj)) 
     2653    elif isinstance(obj, Template): 
     2654        return obj.jssource() 
     2655    else: 
     2656        raise TypeError("can't handle object of type {}".format(type(obj))) 
    26082657 
    26092658 
     
    26112660def _fromjson(string): 
    26122661    from ll import ul4on 
    2613     yield from () 
    26142662    return json.loads(string) 
    26152663 
     
    26182666def _asul4on(obj): 
    26192667    from ll import ul4on 
    2620     yield from () 
    26212668    return ul4on.dumps(obj) 
    26222669 
     
    26252672def _fromul4on(string): 
    26262673    from ll import ul4on 
    2627     yield from () 
    26282674    return ul4on.loads(string) 
    26292675 
     
    26312677@AST.makefunction 
    26322678def _int(obj=0, base=None): 
    2633     yield from () 
    26342679    if base is None: 
    26352680        return int(obj) 
     
    26402685@AST.makefunction 
    26412686def _float(obj=0.0): 
    2642     yield from () 
    26432687    return float(obj) 
    26442688 
     
    26462690@AST.makefunction 
    26472691def _bool(obj=False): 
    2648     yield from () 
    26492692    return bool(obj) 
    26502693 
     
    26522695@AST.makefunction 
    26532696def _len(sequence): 
    2654     yield from () 
    26552697    return len(sequence) 
    26562698 
     
    26582700@AST.makefunction 
    26592701def _abs(number): 
    2660     yield from () 
    26612702    return abs(number) 
    26622703 
     
    26642705@AST.makefunction 
    26652706def _any(iterable): 
    2666     yield from () 
    26672707    return any(iterable) 
    26682708 
     
    26702710@AST.makefunction 
    26712711def _all(iterable): 
    2672     yield from () 
    26732712    return all(iterable) 
    26742713 
     
    27622801@AST.makefunction 
    27632802def _isundefined(obj): 
    2764     yield from () 
    27652803    return isinstance(obj, Undefined) 
    27662804 
     
    27682806@AST.makefunction 
    27692807def _isdefined(obj): 
    2770     yield from () 
    27712808    return not isinstance(obj, Undefined) 
    27722809 
     
    27742811@AST.makefunction 
    27752812def _isnone(obj): 
    2776     yield from () 
    27772813    return obj is None 
    27782814 
     
    27802816@AST.makefunction 
    27812817def _isstr(obj): 
    2782     yield from () 
    27832818    return isinstance(obj, str) 
    27842819 
     
    27862821@AST.makefunction 
    27872822def _isint(obj): 
    2788     yield from () 
    27892823    return isinstance(obj, int) and not isinstance(obj, bool) 
    27902824 
     
    27922826@AST.makefunction 
    27932827def _isfloat(obj): 
    2794     yield from () 
    27952828    return isinstance(obj, float) 
    27962829 
     
    27982831@AST.makefunction 
    27992832def _isbool(obj): 
    2800     yield from () 
    28012833    return isinstance(obj, bool) 
    28022834 
     
    28042836@AST.makefunction 
    28052837def _isdate(obj): 
    2806     yield from () 
    28072838    return isinstance(obj, (datetime.datetime, datetime.date)) 
    28082839 
     
    28102841@AST.makefunction 
    28112842def _istimedelta(obj): 
    2812     yield from () 
    28132843    return isinstance(obj, datetime.timedelta) 
    28142844 
     
    28162846@AST.makefunction 
    28172847def _ismonthdelta(obj): 
    2818     yield from () 
    28192848    return isinstance(obj, misc.monthdelta) 
    28202849 
     
    28222851@AST.makefunction 
    28232852def _islist(obj): 
    2824     yield from () 
    28252853    return isinstance(obj, collections.Sequence) and not isinstance(obj, str) and not isinstance(obj, color.Color) 
    28262854 
     
    28282856@AST.makefunction 
    28292857def _isdict(obj): 
    2830     yield from () 
    28312858    return isinstance(obj, collections.Mapping) and not isinstance(obj, Template) 
    28322859 
     
    28342861@AST.makefunction 
    28352862def _iscolor(obj): 
    2836     yield from () 
    28372863    return isinstance(obj, color.Color) 
    28382864 
     
    28402866@AST.makefunction 
    28412867def _istemplate(obj): 
    2842     yield from () 
    28432868    return isinstance(obj, (Template, TemplateClosure)) 
    28442869 
     
    28462871@AST.makefunction 
    28472872def _isfunction(obj): 
    2848     yield from () 
    28492873    return callable(obj) 
    28502874 
     
    28522876@AST.makefunction 
    28532877def _chr(i): 
    2854     yield from () 
    28552878    return chr(i) 
    28562879 
     
    28582881@AST.makefunction 
    28592882def _ord(c): 
    2860     yield from () 
    28612883    return ord(c) 
    28622884 
     
    28642886@AST.makefunction 
    28652887def _hex(number): 
    2866     yield from () 
    28672888    return hex(number) 
    28682889 
     
    28702891@AST.makefunction 
    28712892def _oct(number): 
    2872     yield from () 
    28732893    return oct(number) 
    28742894 
     
    28762896@AST.makefunction 
    28772897def _bin(number): 
    2878     yield from () 
    28792898    return bin(number) 
    28802899 
     
    28822901@AST.makefunction 
    28832902def _min(*args): 
    2884     yield from () 
    28852903    return min(*args) 
    28862904 
     
    28882906@AST.makefunction 
    28892907def _max(*args): 
    2890     yield from () 
    28912908    return max(*args) 
    28922909 
     
    28942911@AST.makefunction 
    28952912def _sorted(iterable): 
    2896     yield from () 
    28972913    return sorted(iterable) 
    28982914 
     
    29002916@AST.makefunction 
    29012917def _range(*args): 
    2902     yield from () 
    29032918    return range(*args) 
    29042919 
     
    29062921@AST.makefunction 
    29072922def _type(obj): 
    2908     yield from () 
    29092923    if obj is None: 
    29102924        return "none" 
     
    29482962@AST.makefunction 
    29492963def _randrange(*args): 
    2950     yield from () 
    29512964    return random.randrange(*args) 
    29522965 
     
    29542967@AST.makefunction 
    29552968def _randchoice(sequence): 
    2956     yield from () 
    29572969    return random.choice(sequence) 
    29582970 
     
    29602972@AST.makefunction 
    29612973def _format(obj, fmt, lang=None): 
    2962     yield from () 
    29632974    if isinstance(obj, (datetime.date, datetime.time, datetime.timedelta)): 
    29642975        if lang is None: 
     
    29842995@AST.makefunction 
    29852996def _zip(*iterables): 
    2986     yield from () 
    29872997    return zip(*iterables) 
    29882998 
     
    29903000@AST.makefunction 
    29913001def _urlquote(string): 
    2992     yield from () 
    29933002    return urlparse.quote_plus(string) 
    29943003 
     
    29963005@AST.makefunction 
    29973006def _urlunquote(string): 
    2998     yield from () 
    29993007    return urlparse.unquote_plus(string) 
    30003008 
     
    30023010@AST.makefunction 
    30033011def _rgb(r, g, b, a=1.0): 
    3004     yield from () 
    30053012    return color.Color.fromrgb(r, g, b, a) 
    30063013 
     
    30083015@AST.makefunction 
    30093016def _hls(h, l, s, a=1.0): 
    3010     yield from () 
    30113017    return color.Color.fromhls(h, l, s, a) 
    30123018 
     
    30143020@AST.makefunction 
    30153021def _hsv(h, s, v, a=1.0): 
    3016     yield from () 
    30173022    return color.Color.fromhsv(h, s, v, a) 
    30183023 
     
    30203025@AST.makemethod 
    30213026def _split(obj, sep=None, count=None): 
    3022     yield from () 
    30233027    return obj.split(sep, count if count is not None else -1) 
    30243028 
     
    30263030@AST.makemethod 
    30273031def _rsplit(obj, sep=None, count=None): 
    3028     yield from () 
    30293032    return obj.rsplit(sep, count if count is not None else -1) 
    30303033 
     
    30323035@AST.makemethod 
    30333036def _strip(obj, chars=None): 
    3034     yield from () 
    30353037    return obj.strip(chars) 
    30363038 
     
    30383040@AST.makemethod 
    30393041def _lstrip(obj, chars=None): 
    3040     yield from () 
    30413042    return obj.lstrip(chars) 
    30423043 
     
    30443045@AST.makemethod 
    30453046def _rstrip(obj, chars=None): 
    3046     yield from () 
    30473047    return obj.rstrip(chars) 
    30483048 
     
    30503050@AST.makemethod 
    30513051def _find(obj, sub, start=None, end=None): 
    3052     yield from () 
    30533052    if isinstance(obj, str): 
    30543053        return obj.find(sub, start, end) 
     
    30663065@AST.makemethod 
    30673066def _rfind(obj, sub, start=None, end=None): 
    3068     yield from () 
    30693067    if isinstance(obj, str): 
    30703068        return obj.rfind(sub, start, end) 
     
    30783076@AST.makemethod 
    30793077def _startswith(obj, prefix): 
    3080     yield from () 
    30813078    return obj.startswith(prefix) 
    30823079 
     
    30843081@AST.makemethod 
    30853082def _endswith(obj, suffix): 
    3086     yield from () 
    30873083    return obj.endswith(suffix) 
    30883084 
     
    30903086@AST.makemethod 
    30913087def _upper(obj): 
    3092     yield from () 
    30933088    return obj.upper() 
    30943089 
     
    30963091@AST.makemethod 
    30973092def _lower(obj): 
    3098     yield from () 
    30993093    return obj.lower() 
    31003094 
     
    31023096@AST.makemethod 
    31033097def _capitalize(obj): 
    3104     yield from () 
    31053098    return obj.capitalize() 
    31063099 
     
    31083101@AST.makemethod 
    31093102def _replace(obj, old, new, count=None): 
    3110     yield from () 
    31113103    if count is None: 
    31123104        return obj.replace(old, new) 
     
    31173109@AST.makemethod 
    31183110def _r(obj): 
    3119     yield from () 
    31203111    return obj.r() 
    31213112 
     
    31233114@AST.makemethod 
    31243115def _g(obj): 
    3125     yield from () 
    31263116    return obj.g() 
    31273117 
     
    31293119@AST.makemethod 
    31303120def _b(obj): 
    3131     yield from () 
    31323121    return obj.b() 
    31333122 
     
    31353124@AST.makemethod 
    31363125def _a(obj): 
    3137     yield from () 
    31383126    return obj.a() 
    31393127 
     
    31413129@AST.makemethod 
    31423130def _hls(obj): 
    3143     yield from () 
    31443131    return obj.hls() 
    31453132 
     
    31473134@AST.makemethod 
    31483135def _hlsa(obj): 
    3149     yield from () 
    31503136    return obj.hlsa() 
    31513137 
     
    31533139@AST.makemethod 
    31543140def _hsv(obj): 
    3155     yield from () 
    31563141    return obj.hsv() 
    31573142 
     
    31593144@AST.makemethod 
    31603145def _hsva(obj): 
    3161     yield from () 
    31623146    return obj.hsva() 
    31633147 
     
    31653149@AST.makemethod 
    31663150def _lum(obj): 
    3167     yield from () 
    31683151    return obj.lum() 
    31693152 
     
    31713154@AST.makemethod 
    31723155def _weekday(obj): 
    3173     yield from () 
    31743156    return obj.weekday() 
    31753157 
     
    31773159@AST.makemethod 
    31783160def _week(obj, firstweekday=None): 
    3179     yield from () 
    31803161    if firstweekday is None: 
    31813162        firstweekday = 0 
     
    32073188@AST.makemethod 
    32083189def _join(obj, iterable): 
    3209     yield from () 
    32103190    return obj.join(iterable) 
    32113191 
     
    32183198@AST.makemethod 
    32193199def _renders(obj, **vars): 
    3220     yield from () 
    32213200    return obj.renders(**vars) 
    32223201 
     
    32243203@AST.makemethod 
    32253204def _mimeformat(obj): 
    3226     yield from () 
    32273205    weekdayname = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") 
    32283206    monthname = (None, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") 
     
    32323210@AST.makemethod 
    32333211def _isoformat(obj): 
    3234     yield from () 
    32353212    result = obj.isoformat() 
    32363213    suffix = "T00:00:00" 
     
    32423219@AST.makemethod 
    32433220def _yearday(obj): 
    3244     yield from () 
    32453221    return (obj - obj.__class__(obj.year, 1, 1)).days+1 
    32463222 
     
    32483224@AST.makemethod 
    32493225def _get(obj, key, default=None): 
    3250     yield from () 
    32513226    return obj.get(key, default) 
    32523227 
     
    32543229@AST.makemethod 
    32553230def _withlum(obj, lum): 
    3256     yield from () 
    32573231    return obj.withlum(lum) 
    32583232 
     
    32603234@AST.makemethod 
    32613235def _witha(obj, a): 
    3262     yield from () 
    32633236    return obj.witha(a) 
    32643237 
     
    32663239@AST.makemethod 
    32673240def _day(obj): 
    3268     yield from () 
    32693241    return obj.day 
    32703242 
     
    32723244@AST.makemethod 
    32733245def _month(obj): 
    3274     yield from () 
    32753246    return obj.month 
    32763247 
     
    32783249@AST.makemethod 
    32793250def _year(obj): 
    3280     yield from () 
    32813251    return obj.year 
    32823252 
     
    32843254@AST.makemethod 
    32853255def _hour(obj): 
    3286     yield from () 
    32873256    return obj.hour 
    32883257 
     
    32903259@AST.makemethod 
    32913260def _minute(obj): 
    3292     yield from () 
    32933261    return obj.minute 
    32943262 
     
    32963264@AST.makemethod 
    32973265def _second(obj): 
    3298     yield from () 
    32993266    return obj.second 
    33003267 
     
    33023269@AST.makemethod 
    33033270def _microsecond(obj): 
    3304     yield from () 
    33053271    return obj.microsecond 
    33063272 
     
    33663332### 
    33673333 
    3368 def _str_(obj=""): 
    3369     if obj is None: 
    3370         return "" 
    3371     elif isinstance(obj, Undefined): 
    3372         return "" 
    3373     else: 
    3374         return str(obj) 
    3375  
    3376 def _repr_(obj): 
    3377     if isinstance(obj, str): 
    3378         return repr(obj) 
    3379     elif isinstance(obj, datetime.datetime): 
    3380         s = str(obj.isoformat()) 
    3381         if s.endswith("T00:00:00"): 
    3382             s = s[:-9] 
    3383         return "@({})".format(s) 
    3384     elif isinstance(obj, datetime.date): 
    3385         return "@({})".format(obj.isoformat()) 
    3386     elif isinstance(obj, datetime.timedelta): 
    3387         return repr(obj).partition(".")[-1] 
    3388     elif isinstance(obj, color.Color): 
    3389         if obj[3] == 0xff: 
    3390             s = "#{:02x}{:02x}{:02x}".format(obj[0], obj[1], obj[2]) 
    3391             if s[1]==s[2] and s[3]==s[4] and s[5]==s[6]: 
    3392                 return "#{}{}{}".format(s[1], s[3], s[5]) 
    3393             return s 
    3394         else: 
    3395             s = "#{:02x}{:02x}{:02x}{:02x}".format(*obj) 
    3396             if s[1]==s[2] and s[3]==s[4] and s[5]==s[6] and s[7]==s[8]: 
    3397                 return "#{}{}{}{}".format(s[1], s[3], s[5], s[7]) 
    3398             return s 
    3399     elif isinstance(obj, collections.Sequence): 
    3400         return "[{}]".format(", ".join(_repr_(item) for item in obj)) 
    3401     elif isinstance(obj, collections.Mapping): 
    3402         return "{{{}}}".format(", ".join("{}: {}".format(_repr_(key), _repr_(value)) for (key, value) in obj.items())) 
    3403     else: 
    3404         return repr(obj) 
    3405  
    3406  
    3407 def _xmlescape_(obj): 
    3408     if obj is None: 
    3409         return "" 
    3410     elif isinstance(obj, Undefined): 
    3411         return "" 
    3412     else: 
    3413         return misc.xmlescape(str(obj)) 
    3414  
    3415  
    3416 def _asjson_(obj): 
    3417     if obj is None: 
    3418         return "null" 
    3419     elif isinstance(obj, Undefined): 
    3420         return "{}.undefined" 
    3421     if isinstance(obj, (bool, int, float, str)): 
    3422         return json.dumps(obj) 
    3423     elif isinstance(obj, datetime.datetime): 
    3424         return "new Date({}, {}, {}, {}, {}, {}, {})".format(obj.year, obj.month-1, obj.day, obj.hour, obj.minute, obj.second, obj.microsecond//1000) 
    3425     elif isinstance(obj, datetime.date): 
    3426         return "new Date({}, {}, {})".format(obj.year, obj.month-1, obj.day) 
    3427     elif isinstance(obj, datetime.timedelta): 
    3428         return "ul4.TimeDelta.create({}, {}, {})".format(obj.days, obj.seconds, obj.microseconds) 
    3429     elif isinstance(obj, misc.monthdelta): 
    3430         return "ul4.MonthDelta.create({})".format(obj.months) 
    3431     elif isinstance(obj, color.Color): 
    3432         return "ul4.Color.create({}, {}, {}, {})".format(*obj) 
    3433     elif isinstance(obj, collections.Mapping): 
    3434         return "{{{}}}".format(", ".join("{}: {}".format(_asjson_(key), _asjson_(value)) for (key, value) in obj.items())) 
    3435     elif isinstance(obj, collections.Sequence): 
    3436         return "[{}]".format(", ".join(_asjson_(item) for item in obj)) 
    3437     elif isinstance(obj, Template): 
    3438         return obj.jssource() 
    3439     else: 
    3440         raise TypeError("can't handle object of type {}".format(type(obj))) 
    3441  
    3442  
    34433334def _makedict(*items): 
    34443335    result = {}