change sources list format and add editor base + sources overlays
This commit is contained in:
parent
0d3187558e
commit
b79f84f0b6
10 changed files with 127 additions and 45 deletions
|
@ -12,6 +12,7 @@ class MapManager:
|
|||
self.main_pkg = None
|
||||
self.pkgs = OrderedDict()
|
||||
self.levels = []
|
||||
self.sources_by_filename = OrderedDict()
|
||||
|
||||
def add_map_dir(self, path):
|
||||
pkg = MapDataPackage(path)
|
||||
|
@ -24,17 +25,17 @@ class MapManager:
|
|||
'but '+self.main_pkg.name+' was there first.')
|
||||
self.main_pkg = pkg
|
||||
self.levels = pkg.levels
|
||||
self.size = pkg.size
|
||||
self.width = pkg.width
|
||||
self.height = pkg.height
|
||||
else:
|
||||
if pkg.extends not in self.pkgs:
|
||||
raise MapInitError('map package'+pkg.name+' extends '+pkg.exends+', which was not imported '
|
||||
'beforehand.')
|
||||
|
||||
self.pkgs[pkg.name] = pkg
|
||||
for source in pkg.sources:
|
||||
self.sources_by_filename[source.filename] = source
|
||||
|
||||
@property
|
||||
def all_sources(self):
|
||||
return sum((pkg.sources for pkg in self.pkgs), [])
|
||||
self.pkgs[pkg.name] = pkg
|
||||
|
||||
|
||||
class MapDataPackage:
|
||||
|
@ -55,16 +56,21 @@ class MapDataPackage:
|
|||
|
||||
self.extends = data.get('extends')
|
||||
|
||||
self.size = data.get('size')
|
||||
self.width = data.get('width')
|
||||
self.height = data.get('height')
|
||||
|
||||
self.sources = tuple(MapSource(self, name, source)
|
||||
for name, source in data.get('sources', {}).items())
|
||||
self.sources = tuple(MapSource(self, source) for source in data.get('sources', []))
|
||||
|
||||
self.levels = data.get('levels')
|
||||
|
||||
|
||||
class MapSource:
|
||||
def __init__(self, pkg, name, data):
|
||||
self.name = name
|
||||
def __init__(self, pkg, data):
|
||||
self.name = data['name']
|
||||
self.filename = self.name+'.'+data['src'].split('.')[-1]
|
||||
self.src = os.path.join(pkg.path, data['src'])
|
||||
self.bounds = data['bounds']
|
||||
|
||||
@property
|
||||
def jsbounds(self):
|
||||
return json.dumps(self.bounds)
|
||||
|
|
7
src/c3nav/mapdata/urls.py
Normal file
7
src/c3nav/mapdata/urls.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^sources/(?P<filename>[^/]+)$', views.source, name='map.source'),
|
||||
]
|
|
@ -1,3 +1,19 @@
|
|||
import mimetypes
|
||||
|
||||
from django.contrib.admin.views.decorators import staff_member_required
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
from ..mapdata import mapmanager
|
||||
|
||||
|
||||
@staff_member_required
|
||||
def source(request, filename):
|
||||
source = mapmanager.sources_by_filename.get(filename)
|
||||
if source is None:
|
||||
raise Http404('Source does not exist')
|
||||
|
||||
response = HttpResponse(content_type=mimetypes.guess_type(source.src)[0])
|
||||
with open(source.src, 'rb') as f:
|
||||
response.write(f.read())
|
||||
return response
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue