1
1
#!/usr/bin/env python -tt
5
from cStringIO import StringIO
4
7
from django import forms
6
class UploadMapForm(forms.Form):
7
mapfile = forms.FileField()
8
comment = forms.CharField(required=False)
8
from django.forms import ModelForm, ValidationError
10
from settings import WIDELANDS_SVN_DIR, MEDIA_ROOT
12
from wlmaps.models import Map
13
from widelandslib.map import WidelandsMap, WlMapLibraryException
16
class UploadMapForm(ModelForm):
19
fields = ['file', 'uploader_comment']
23
cleaned_data = super(UploadMapForm, self).clean()
25
file = cleaned_data.get('file')
27
# no clean file => abort
31
wlmap = WidelandsMap()
33
wlmap.load(StringIO(mapdata))
34
except WlMapLibraryException:
35
raise forms.ValidationError("The map file is invalid.")
37
if Map.objects.filter(name = wlmap.name):
38
raise forms.ValidationError("Map with the same name already exists.")
40
cleaned_data['file'].name = "%s/wlmaps/maps/%s.wmf" % (MEDIA_ROOT, wlmap.name)
43
minimap = wlmap.make_minimap(WIDELANDS_SVN_DIR)
44
minimap_path = "%s/wlmaps/minimaps/%s.png" % (MEDIA_ROOT, wlmap.name)
45
minimap_url = "/wlmaps/minimaps/%s.png" % wlmap.name
46
minimap_image = Image.fromarray(minimap)
47
minimap_image.save(minimap_path)
48
# TODO: handle filesystem errors
50
# Add information to the map
51
self.instance.name = wlmap.name
52
self.instance.author = wlmap.author
53
self.instance.w = wlmap.w
54
self.instance.h = wlmap.h
55
self.instance.nr_players = wlmap.nr_players
56
self.instance.descr = wlmap.descr
57
self.instance.minimap = minimap_url
58
self.instance.world_name = wlmap.world_name
63
def save(self, *args, **kwargs):
64
map = super(UploadMapForm, self).save(*args, **kwargs)
65
if not kwargs['commit'] == False: