Merge branch 'master' of stigma.nowoczesnapolska.org.pl:platforma
[redakcja.git] / apps / api / utils.py
index 0e0468a..19309ff 100644 (file)
@@ -11,15 +11,16 @@ from piston.utils import rc
 
 import api.response
 
-from wlrepo import MercurialLibrary
+import wlrepo
 import settings
 
 class TextEmitter(Emitter):
     def render(self, request):
         return unicode(self.construct())
 
-Emitter.register('text', TextEmitter, 'text/plain; charset=utf-8')
-Emitter.register('rawxml', TextEmitter, 'application/xml; charset=UTF-8')
+Emitter.register('raw', TextEmitter, 'text/plain; charset=utf-8')
+Emitter.register('rawhtml', TextEmitter, 'text/html; charset=utf-8')
+Emitter.register('rawxml', TextEmitter, 'application/xml; charset=utf-8')
 
 class DjangoAuth(object):
 
@@ -34,11 +35,11 @@ def validate_form(formclass, source='GET'):
   
     def decorator(func):
         @wraps(func)
-        def decorated(self, request, * args, ** kwargs):
+        def decorated(self, request, *args, **kwargs):
             form = formclass(getattr(request, source), request.FILES)
 
             if not form.is_valid():
-                errorlist = [{'field': k, 'errors': e} for k, e in form.errors.items()]
+                errorlist = [{'field': k, 'errors': str(e)} for k, e in form.errors.items()]
                 return api.response.BadRequest().django_response(errorlist)
 
             kwargs['form'] = form
@@ -49,11 +50,28 @@ def validate_form(formclass, source='GET'):
 def hglibrary(func):
     @wraps(func)
     def decorated(self, *args, **kwargs):
-        l = MercurialLibrary(settings.REPOSITORY_PATH)
+        l = wlrepo.open_library(settings.REPOSITORY_PATH, 'hg')
         kwargs['lib'] = l
         return func(self, *args, **kwargs)
     return decorated
-    
-            
+
+
+
+import re
+import locale
+
+NAT_EXPR = re.compile(r'(\d+)', re.LOCALE | re.UNICODE)
+def natural_order(get_key=lambda x: x):
+
+    def getter(key):
+        nkey = get_key(key)
+        if not isinstance(nkey, unicode):
+            ukey = nkey.decode('utf-8')
+        else:
+            ukey = nkey
+
+        parts = enumerate( NAT_EXPR.split(ukey))            
+        return [int(x) if n%2 else locale.strxfrm(x.encode('utf-8')) for (n,x) in parts ]
         
+    return getter