aboutsummaryrefslogtreecommitdiff
path: root/djangopypi/utils.py
blob: ba2013ec5a075ca4111a43bec48ffa1afb46f886 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
import traceback

from django.core.files.uploadedfile import SimpleUploadedFile
from django.utils.datastructures import MultiValueDict


def transmute(f):
    if hasattr(f, "filename") and f.filename:
        v = SimpleUploadedFile(f.filename, f.value, f.type)
    else:
        v = f.value.decode("utf-8")
    return v


def decode_fs(fs):
    POST, FILES = {}, {}
    for k in fs.keys():
        v = transmute(fs[k])
        if isinstance(v, SimpleUploadedFile):
            FILES[k] = [v]
        else:
            # Distutils sends UNKNOWN for empty fields (e.g platform)
            # [russell.sim@gmail.com]
            if v == "UNKNOWN":
                v = None
            POST[k] = [v]
    return MultiValueDict(POST), MultiValueDict(FILES)


def debug(func):
    # @debug is handy when debugging distutils requests
    def _wrapped(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except:
            traceback.print_exception(*sys.exc_info())
    return _wrapped