Source code for gpxity.backends.server_directory
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2019 Wolfgang Rohdewald <wolfgang@rohdewald.de>
# See LICENSE for details.
"""This implements :class:`gpxity.server_directory.ServerDirectory`."""
from .directory import Directory, Backup
__all__ = ['ServerDirectory']
[docs]class ServerDirectory(Directory):
"""Like :class:`Directory` but the track ids are different: Just a number.
A new id is generated by adding 1 to the highest existing id.
The symbolic links per YYYY/MM use the title of the track as link name.
"""
# pylint: disable=abstract-method
def _new_ident(self, _) ->str:
"""Build a unique id for track.
Returns:
A new unique id
"""
try:
return str(max(int(x) for x in self._list_gpx()) + 1)
except ValueError:
return '1'
def _write_all(self, track) ->str:
"""save full gpx track. If id_in_backend is defined, keep it.
Returns:
The new id_in_backend
"""
new_ident = track.id_in_backend or self._new_ident(track)
with Backup(track):
track.id_in_backend = new_ident
with open(self.gpx_path(new_ident), 'w', encoding='utf-8') as out_file:
out_file.write(track.to_xml())
self._set_filetime(track)
return new_ident