ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ bNc@sIdZdZdZdZdZdZdZdZdS( sMIME-Type Parser This module provides basic functions for handling mime-types. It can handle matching mime-types against a list of media-ranges. See section 14.1 of the HTTP specification [RFC 2616] for a complete explanation. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1 Based on mimeparse 0.1.2 by Joe Gregorio: http://code.google.com/p/mimeparse/ Contents: - parse_mime_type(): Parses a mime-type into its component parts. - parse_media_range(): Media-ranges are mime-types with wild-cards and a 'q' quality parameter. - quality(): Determines the quality ('q') of a mime-type when compared against a list of media-ranges. - quality_parsed(): Just like quality() except the second parameter must be pre-parsed. - best_match(): Choose the mime-type with the highest quality ('q') from a list of candidates. - desired_matches(): Filter against a list of desired mime-types in the order the server prefers. cCs|jd}|d|d}}y|jdd\}}Wn*tk rl|jp_dd}}n%X|jp|d}|jpd}i}xo|D]g}|jdd}t|dkr|dj|dj}}|r|r|||>> quality('text/html','text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5') 0.7 t,(tmapRRR(RtrangesR((sE/opt/alt/python27/lib/python2.7/site-packages/paste/util/mimeparse.pytqualityoscCs~|s dStt|jd}tgt|D]"\}}t||| f^q2}|ddrz||d p}dS(sTakes a list of supported mime-types and finds the best match for all the media-ranges listed in header. In case of ambiguity, whatever comes first in the list will be chosen. The value of header must be a string that conforms to the format of the HTTP Accept: header. The value of 'supported' is a list of mime-types. >>> best_match(['application/xbel+xml', 'text/xml'], 'text/*;q=0.5,*/*; q=0.1') 'text/xml' tR ii(R!RRtmaxt enumerateR(t supportedtheadert parsed_headertnRt best_type((sE/opt/alt/python27/lib/python2.7/site-packages/paste/util/mimeparse.pyt best_matchzs 5cCs>tt|jd}g|D]}t||r|^qS(sTakes a list of desired mime-types in the order the server prefers to send them regardless of the browsers preference. Browsers (such as Firefox) technically want XML over HTML depending on how one reads the specification. This function is provided for a server to declare a set of desired mime-types it supports, and returns a subset of the desired list in the same order should each one be Accepted by the browser. >>> desired_matches(['text/html', 'application/xml'], ... 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png') ['text/html', 'application/xml'] >>> desired_matches(['text/html', 'application/xml'], 'application/xml,application/json') ['application/xml'] R (R!RRR(tdesiredR(Rtmimetype((sE/opt/alt/python27/lib/python2.7/site-packages/paste/util/mimeparse.pytdesired_matchess N(t__doc__RRRRR#R,R/(((sE/opt/alt/python27/lib/python2.7/site-packages/paste/util/mimeparse.pyts