use pathlib in more places, thereby fixing some bugs
This commit is contained in:
parent
f5c33724dc
commit
2ad9f4a099
14 changed files with 24 additions and 36 deletions
|
@ -1,5 +1,4 @@
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
|
||||||
import typing
|
import typing
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
|
|
||||||
|
@ -739,7 +738,7 @@ def sourceimage(request, filename):
|
||||||
return PermissionDenied
|
return PermissionDenied
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return HttpResponse(open(os.path.join(settings.SOURCES_ROOT, filename), 'rb'),
|
return HttpResponse(open(settings.SOURCES_ROOT / filename, 'rb'),
|
||||||
content_type=mimetypes.guess_type(filename)[0])
|
content_type=mimetypes.guess_type(filename)[0])
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Command(BaseCommand):
|
||||||
for filename in os.listdir(settings.CACHE_ROOT):
|
for filename in os.listdir(settings.CACHE_ROOT):
|
||||||
if filename.startswith('history_base_'):
|
if filename.startswith('history_base_'):
|
||||||
logger.info('Deleting %s...' % filename)
|
logger.info('Deleting %s...' % filename)
|
||||||
os.remove(os.path.join(settings.CACHE_ROOT, filename))
|
os.remove(settings.CACHE_ROOT / filename)
|
||||||
logger.info('Base history deleted.')
|
logger.info('Base history deleted.')
|
||||||
|
|
||||||
if not settings.HAS_CELERY and not options['no_process']:
|
if not settings.HAS_CELERY and not options['no_process']:
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
@ -109,8 +108,7 @@ class Command(BaseCommand):
|
||||||
min_width=options['min_width'])
|
min_width=options['min_width'])
|
||||||
|
|
||||||
name = options['name'] or ('level_%s' % level.short_label)
|
name = options['name'] or ('level_%s' % level.short_label)
|
||||||
filename = os.path.join(settings.RENDER_ROOT,
|
filename = settings.RENDER_ROOT / ('%s.%s' % (name, options['filetype']))
|
||||||
'%s.%s' % (name, options['filetype']))
|
|
||||||
|
|
||||||
render = renderer.render(get_engine(options['filetype']), center=not options['no_center'])
|
render = renderer.render(get_engine(options['filetype']), center=not options['no_center'])
|
||||||
data = render.render(filename)
|
data = render.render(filename)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import json
|
import json
|
||||||
import os
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
@ -20,10 +19,9 @@ class Command(BaseCommand):
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
result = stats_snapshot(reset=options['reset'])
|
result = stats_snapshot(reset=options['reset'])
|
||||||
if options['save']:
|
if options['save']:
|
||||||
filename = os.path.join(
|
filename = settings.STATS_ROOT / (
|
||||||
settings.STATS_ROOT,
|
('stats__%s__%s.json' % (result['start_date'], result['end_date'])).replace(' ', '_').replace(':', '-')
|
||||||
'stats__%s__%s.json' % (result['start_date'], result['end_date'])
|
)
|
||||||
).replace(' ', '_').replace(':', '-')
|
|
||||||
json.dump(result, open(filename, 'w'), indent=4)
|
json.dump(result, open(filename, 'w'), indent=4)
|
||||||
print('saved to %s' % filename)
|
print('saved to %s' % filename)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -11,7 +11,7 @@ from django.db import migrations
|
||||||
def move_sources(apps, schema_editor):
|
def move_sources(apps, schema_editor):
|
||||||
Source = apps.get_model('mapdata', 'Source')
|
Source = apps.get_model('mapdata', 'Source')
|
||||||
for source in Source.objects.all():
|
for source in Source.objects.all():
|
||||||
with open(os.path.join(settings.SOURCES_ROOT, source.name), 'wb') as f:
|
with open(settings.SOURCES_ROOT / source.name), 'wb') as f:
|
||||||
f.write(source.image)
|
f.write(source.image)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import os
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
@ -21,7 +19,7 @@ class Source(BoundsMixin, AccessRestrictionMixin, models.Model):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def filepath(self):
|
def filepath(self):
|
||||||
return os.path.join(settings.SOURCES_ROOT, self.name)
|
return settings.SOURCES_ROOT / self.name
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def title(self):
|
def title(self):
|
||||||
|
|
|
@ -104,7 +104,7 @@ class MapUpdate(models.Model):
|
||||||
yield cls.objects.select_for_update().get(pk=earliest.pk)
|
yield cls.objects.select_for_update().get(pk=earliest.pk)
|
||||||
|
|
||||||
def _changed_geometries_filename(self):
|
def _changed_geometries_filename(self):
|
||||||
return os.path.join(settings.CACHE_ROOT, 'changed_geometries', 'update_%d.pickle' % self.pk)
|
return settings.CACHE_ROOT / 'changed_geometries' / ('update_%d.pickle' % self.pk)
|
||||||
|
|
||||||
class ProcessUpdatesAlreadyRunning(Exception):
|
class ProcessUpdatesAlreadyRunning(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import operator
|
import operator
|
||||||
import os
|
|
||||||
import pickle
|
import pickle
|
||||||
import threading
|
import threading
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
@ -297,7 +296,7 @@ class LevelRenderData:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _level_filename(pk):
|
def _level_filename(pk):
|
||||||
return os.path.join(settings.CACHE_ROOT, 'render_data_level_%d.pickle' % pk)
|
return settings.CACHE_ROOT / ('render_data_level_%d.pickle' % pk)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, level):
|
def get(cls, level):
|
||||||
|
|
3
src/c3nav/mapdata/utils/cache/indexed.py
vendored
3
src/c3nav/mapdata/utils/cache/indexed.py
vendored
|
@ -1,5 +1,4 @@
|
||||||
import math
|
import math
|
||||||
import os
|
|
||||||
import struct
|
import struct
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
@ -197,7 +196,7 @@ class LevelGeometryIndexed(GeometryIndexed):
|
||||||
@classmethod
|
@classmethod
|
||||||
def level_filename(cls, level_id, mode):
|
def level_filename(cls, level_id, mode):
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
return os.path.join(settings.CACHE_ROOT, '%s_%s_level_%d' % (cls.variant_name, mode, level_id))
|
return settings.CACHE_ROOT / ('%s_%s_level_%d' % (cls.variant_name, mode, level_id))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def open_level(cls, level_id, mode, **kwargs):
|
def open_level(cls, level_id, mode, **kwargs):
|
||||||
|
|
4
src/c3nav/mapdata/utils/cache/package.py
vendored
4
src/c3nav/mapdata/utils/cache/package.py
vendored
|
@ -21,7 +21,7 @@ class CachePackage:
|
||||||
def save(self, filename=None, compression=None):
|
def save(self, filename=None, compression=None):
|
||||||
if filename is None:
|
if filename is None:
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
filename = os.path.join(settings.CACHE_ROOT, 'package.tar')
|
filename = settings.CACHE_ROOT / 'package.tar'
|
||||||
if compression is not None:
|
if compression is not None:
|
||||||
filename += '.' + compression
|
filename += '.' + compression
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ class CachePackage:
|
||||||
def open(cls, filename=None):
|
def open(cls, filename=None):
|
||||||
if filename is None:
|
if filename is None:
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
filename = os.path.join(settings.CACHE_ROOT, 'package.tar')
|
filename = settings.CACHE_ROOT / 'package.tar'
|
||||||
return cls.read(open(filename, 'rb'))
|
return cls.read(open(filename, 'rb'))
|
||||||
|
|
||||||
cached = None
|
cached = None
|
||||||
|
|
|
@ -99,9 +99,9 @@ def tile(request, level, zoom, x, y, access_permissions=None):
|
||||||
|
|
||||||
# get tile cache last update
|
# get tile cache last update
|
||||||
if settings.CACHE_TILES:
|
if settings.CACHE_TILES:
|
||||||
tile_dirname = os.path.sep.join((settings.TILES_ROOT, str(level), str(zoom), str(x), str(y)))
|
tile_dirname = settings.TILES_ROOT / str(level) / str(zoom) / str(x) / str(y)
|
||||||
last_update_filename = os.path.join(tile_dirname, 'last_update')
|
last_update_filename = tile_dirname / 'last_update'
|
||||||
tile_filename = os.path.join(tile_dirname, access_cache_key+'.png')
|
tile_filename = tile_dirname / (access_cache_key+'.png')
|
||||||
|
|
||||||
# get tile cache last update
|
# get tile cache last update
|
||||||
tile_cache_update_cache_key = 'mapdata:tile-cache-update:%d-%d-%d-%d' % (level, zoom, x, y)
|
tile_cache_update_cache_key = 'mapdata:tile-cache-update:%d-%d-%d-%d' % (level, zoom, x, y)
|
||||||
|
@ -114,7 +114,7 @@ def tile(request, level, zoom, x, y, access_permissions=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if tile_cache_update != base_cache_key:
|
if tile_cache_update != base_cache_key:
|
||||||
os.system('rm -rf '+os.path.join(tile_dirname, '*'))
|
os.system('rm -rf '+(tile_dirname / '*'))
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
with open(tile_filename, 'rb') as f:
|
with open(tile_filename, 'rb') as f:
|
||||||
|
@ -171,7 +171,7 @@ def map_history(request, level, mode, filetype):
|
||||||
def get_cache_package(request, filetype):
|
def get_cache_package(request, filetype):
|
||||||
enforce_tile_secret_auth(request)
|
enforce_tile_secret_auth(request)
|
||||||
|
|
||||||
filename = os.path.join(settings.CACHE_ROOT, 'package.'+filetype)
|
filename = settings.CACHE_ROOT / ('package.'+filetype)
|
||||||
f = open(filename, 'rb')
|
f = open(filename, 'rb')
|
||||||
|
|
||||||
f.seek(0, os.SEEK_END)
|
f.seek(0, os.SEEK_END)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import operator
|
import operator
|
||||||
import os
|
|
||||||
import pickle
|
import pickle
|
||||||
import re
|
import re
|
||||||
import threading
|
import threading
|
||||||
|
@ -17,7 +16,7 @@ from c3nav.routing.router import Router
|
||||||
|
|
||||||
|
|
||||||
class Locator:
|
class Locator:
|
||||||
filename = os.path.join(settings.CACHE_ROOT, 'locator')
|
filename = settings.CACHE_ROOT / 'locator'
|
||||||
|
|
||||||
def __init__(self, stations, spaces):
|
def __init__(self, stations, spaces):
|
||||||
self.stations = stations
|
self.stations = stations
|
||||||
|
@ -42,7 +41,7 @@ class Locator:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def build_filename(cls, update):
|
def build_filename(cls, update):
|
||||||
return os.path.join(settings.CACHE_ROOT, 'locator_%s.pickle' % MapUpdate.build_cache_key(*update))
|
return settings.CACHE_ROOT / ('locator_%s.pickle' % MapUpdate.build_cache_key(*update))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_nocache(cls, update):
|
def load_nocache(cls, update):
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import os
|
|
||||||
import pickle
|
import pickle
|
||||||
import threading
|
import threading
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
@ -21,7 +20,7 @@ class RangeLocatorBeacon:
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class RangeLocator:
|
class RangeLocator:
|
||||||
filename = os.path.join(settings.CACHE_ROOT, 'rangelocator')
|
filename = settings.CACHE_ROOT / 'rangelocator'
|
||||||
|
|
||||||
beacons: dict[str, RangeLocatorBeacon]
|
beacons: dict[str, RangeLocatorBeacon]
|
||||||
|
|
||||||
|
@ -45,7 +44,7 @@ class RangeLocator:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def build_filename(cls, update):
|
def build_filename(cls, update):
|
||||||
return os.path.join(settings.CACHE_ROOT, 'rangelocator_%s.pickle' % MapUpdate.build_cache_key(*update))
|
return settings.CACHE_ROOT / ('rangelocator_%s.pickle' % MapUpdate.build_cache_key(*update))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_nocache(cls, update):
|
def load_nocache(cls, update):
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
import operator
|
import operator
|
||||||
import os
|
|
||||||
import pickle
|
import pickle
|
||||||
import threading
|
import threading
|
||||||
from collections import deque, namedtuple
|
from collections import deque, namedtuple
|
||||||
|
@ -29,7 +28,7 @@ logger = logging.getLogger('c3nav')
|
||||||
|
|
||||||
|
|
||||||
class Router:
|
class Router:
|
||||||
filename = os.path.join(settings.CACHE_ROOT, 'router')
|
filename = settings.CACHE_ROOT / 'router'
|
||||||
|
|
||||||
def __init__(self, levels, spaces, areas, pois, groups, restrictions, nodes, edges, waytypes, graph):
|
def __init__(self, levels, spaces, areas, pois, groups, restrictions, nodes, edges, waytypes, graph):
|
||||||
self.levels = levels
|
self.levels = levels
|
||||||
|
@ -273,7 +272,7 @@ class Router:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def build_filename(cls, update):
|
def build_filename(cls, update):
|
||||||
return os.path.join(settings.CACHE_ROOT, 'router_%s.pickle' % MapUpdate.build_cache_key(*update))
|
return settings.CACHE_ROOT / ('router_%s.pickle' % MapUpdate.build_cache_key(*update))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_nocache(cls, update):
|
def load_nocache(cls, update):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue