Package restkit :: Module util
[hide private]
[frames] | no frames]

Source Code for Module restkit.util

  1  # -*- coding: utf-8 - 
  2  # 
  3  # This file is part of restkit released under the MIT license.  
  4  # See the NOTICE for more information. 
  5   
  6  import time 
  7  import urllib 
  8  import warnings 
  9   
 10  weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] 
 11  monthname = [None, 
 12               'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
 13               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
 14                
15 -def normalize_name(name):
16 return "-".join([w.lower().capitalize() for w in name.split("-")])
17
18 -def http_date(timestamp=None):
19 """Return the current date and time formatted for a message header.""" 20 if timestamp is None: 21 timestamp = time.time() 22 year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp) 23 s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( 24 weekdayname[wd], 25 day, monthname[month], year, 26 hh, mm, ss) 27 return s
28
29 -def to_bytestring(s):
30 if not isinstance(s, basestring): 31 raise TypeError("value should be a str or unicode") 32 33 if isinstance(s, unicode): 34 return s.encode('utf-8') 35 return s
36
37 -def url_quote(s, charset='utf-8', safe='/:'):
38 """URL encode a single string with a given encoding.""" 39 if isinstance(s, unicode): 40 s = s.encode(charset) 41 elif not isinstance(s, str): 42 s = str(s) 43 return urllib.quote(s, safe=safe)
44 45
46 -def url_encode(obj, charset="utf8", encode_keys=False):
47 items = [] 48 if isinstance(obj, dict): 49 for k, v in list(obj.items()): 50 items.append((k, v)) 51 else: 52 items = list(items) 53 54 tmp = [] 55 for k, v in items: 56 if encode_keys: 57 k = encode(k, charset) 58 59 if not isinstance(v, (tuple, list)): 60 v = [v] 61 62 for v1 in v: 63 if v1 is None: 64 v1 = '' 65 elif callable(v1): 66 v1 = encode(v1(), charset) 67 else: 68 v1 = encode(v1, charset) 69 tmp.append('%s=%s' % (urllib.quote(k), urllib.quote_plus(v1))) 70 return '&'.join(tmp)
71
72 -def encode(v, charset="utf8"):
73 if isinstance(v, unicode): 74 v = v.encode(charset) 75 else: 76 v = str(v) 77 return v
78
79 -class deprecated_property(object):
80 """ 81 Wraps a decorator, with a deprecation warning or error 82 """
83 - def __init__(self, decorator, attr, message, warning=True):
84 self.decorator = decorator 85 self.attr = attr 86 self.message = message 87 self.warning = warning
88
89 - def __get__(self, obj, type=None):
90 if obj is None: 91 return self 92 self.warn() 93 return self.decorator.__get__(obj, type)
94
95 - def __set__(self, obj, value):
96 self.warn() 97 self.decorator.__set__(obj, value)
98
99 - def __delete__(self, obj):
100 self.warn() 101 self.decorator.__delete__(obj)
102
103 - def __repr__(self):
104 return '<Deprecated attribute %s: %r>' % ( 105 self.attr, 106 self.decorator)
107
108 - def warn(self):
109 if not self.warning: 110 raise DeprecationWarning( 111 'The attribute %s is deprecated: %s' % (self.attr, self.message)) 112 else: 113 warnings.warn( 114 'The attribute %s is deprecated: %s' % (self.attr, self.message), 115 DeprecationWarning, 116 stacklevel=3)
117