use pathlib in more places, thereby fixing some bugs

This commit is contained in:
Laura Klünder 2023-11-11 12:06:46 +01:00
parent f5c33724dc
commit 2ad9f4a099
14 changed files with 24 additions and 36 deletions

View file

@ -1,5 +1,4 @@
import mimetypes
import os
import typing
from contextlib import suppress
@ -739,7 +738,7 @@ def sourceimage(request, filename):
return PermissionDenied
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])
except FileNotFoundError:
raise Http404

View file

@ -33,7 +33,7 @@ class Command(BaseCommand):
for filename in os.listdir(settings.CACHE_ROOT):
if filename.startswith('history_base_'):
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.')
if not settings.HAS_CELERY and not options['no_process']:

View file

@ -1,5 +1,4 @@
import argparse
import os
from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
@ -109,8 +108,7 @@ class Command(BaseCommand):
min_width=options['min_width'])
name = options['name'] or ('level_%s' % level.short_label)
filename = os.path.join(settings.RENDER_ROOT,
'%s.%s' % (name, options['filetype']))
filename = settings.RENDER_ROOT / ('%s.%s' % (name, options['filetype']))
render = renderer.render(get_engine(options['filetype']), center=not options['no_center'])
data = render.render(filename)

View file

@ -1,5 +1,4 @@
import json
import os
from django.conf import settings
from django.core.management.base import BaseCommand
@ -20,10 +19,9 @@ class Command(BaseCommand):
def handle(self, *args, **options):
result = stats_snapshot(reset=options['reset'])
if options['save']:
filename = os.path.join(
settings.STATS_ROOT,
'stats__%s__%s.json' % (result['start_date'], result['end_date'])
).replace(' ', '_').replace(':', '-')
filename = settings.STATS_ROOT / (
('stats__%s__%s.json' % (result['start_date'], result['end_date'])).replace(' ', '_').replace(':', '-')
)
json.dump(result, open(filename, 'w'), indent=4)
print('saved to %s' % filename)
else:

View file

@ -11,7 +11,7 @@ from django.db import migrations
def move_sources(apps, schema_editor):
Source = apps.get_model('mapdata', 'Source')
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)

View file

@ -1,5 +1,3 @@
import os
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _
@ -21,7 +19,7 @@ class Source(BoundsMixin, AccessRestrictionMixin, models.Model):
@property
def filepath(self):
return os.path.join(settings.SOURCES_ROOT, self.name)
return settings.SOURCES_ROOT / self.name
@property
def title(self):

View file

@ -104,7 +104,7 @@ class MapUpdate(models.Model):
yield cls.objects.select_for_update().get(pk=earliest.pk)
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):
pass

View file

@ -1,5 +1,4 @@
import operator
import os
import pickle
import threading
from collections import deque
@ -297,7 +296,7 @@ class LevelRenderData:
@staticmethod
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
def get(cls, level):

View file

@ -1,5 +1,4 @@
import math
import os
import struct
import threading
@ -197,7 +196,7 @@ class LevelGeometryIndexed(GeometryIndexed):
@classmethod
def level_filename(cls, level_id, mode):
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
def open_level(cls, level_id, mode, **kwargs):

View file

@ -21,7 +21,7 @@ class CachePackage:
def save(self, filename=None, compression=None):
if filename is None:
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:
filename += '.' + compression
@ -75,7 +75,7 @@ class CachePackage:
def open(cls, filename=None):
if filename is None:
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'))
cached = None

View file

@ -99,9 +99,9 @@ def tile(request, level, zoom, x, y, access_permissions=None):
# get tile cache last update
if settings.CACHE_TILES:
tile_dirname = os.path.sep.join((settings.TILES_ROOT, str(level), str(zoom), str(x), str(y)))
last_update_filename = os.path.join(tile_dirname, 'last_update')
tile_filename = os.path.join(tile_dirname, access_cache_key+'.png')
tile_dirname = settings.TILES_ROOT / str(level) / str(zoom) / str(x) / str(y)
last_update_filename = tile_dirname / 'last_update'
tile_filename = tile_dirname / (access_cache_key+'.png')
# get tile cache last update
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
if tile_cache_update != base_cache_key:
os.system('rm -rf '+os.path.join(tile_dirname, '*'))
os.system('rm -rf '+(tile_dirname / '*'))
else:
try:
with open(tile_filename, 'rb') as f:
@ -171,7 +171,7 @@ def map_history(request, level, mode, filetype):
def get_cache_package(request, filetype):
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.seek(0, os.SEEK_END)

View file

@ -1,5 +1,4 @@
import operator
import os
import pickle
import re
import threading
@ -17,7 +16,7 @@ from c3nav.routing.router import Router
class Locator:
filename = os.path.join(settings.CACHE_ROOT, 'locator')
filename = settings.CACHE_ROOT / 'locator'
def __init__(self, stations, spaces):
self.stations = stations
@ -42,7 +41,7 @@ class Locator:
@classmethod
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
def load_nocache(cls, update):

View file

@ -1,4 +1,3 @@
import os
import pickle
import threading
from dataclasses import dataclass
@ -21,7 +20,7 @@ class RangeLocatorBeacon:
@dataclass
class RangeLocator:
filename = os.path.join(settings.CACHE_ROOT, 'rangelocator')
filename = settings.CACHE_ROOT / 'rangelocator'
beacons: dict[str, RangeLocatorBeacon]
@ -45,7 +44,7 @@ class RangeLocator:
@classmethod
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
def load_nocache(cls, update):

View file

@ -1,6 +1,5 @@
import logging
import operator
import os
import pickle
import threading
from collections import deque, namedtuple
@ -29,7 +28,7 @@ logger = logging.getLogger('c3nav')
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):
self.levels = levels
@ -273,7 +272,7 @@ class Router:
@classmethod
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
def load_nocache(cls, update):