Age | Commit message (Collapse) | Author |
|
|
|
|
|
Note that those are not documented, but based on trial-and-error.
Terrain and Watercolor return 404 at the next zoom level, indicating
that this is the max that they support.
Toner does serve some tiles at level 18, but a lot of them return a 503.
|
|
Since we aliased the field layer_type to layer, we would need to use
type=... to set it. However, it is a bit confusing if we access it as
TileLayerConfig.layer_type, but set it with type=..., therefore let's
just turn on allow_population_by_field_name. This option lets us use
layer_type=... to set the field when initializing the object.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
We have so many nice docstrings, but they aren't really rendered
anywhere (expect locally in your IDE), as we did not include the API
docs anywhere.
This change uses sphinx-apidoc to generate autodoc stubs for Sphinx, so
that the docstrings are actually rendered to HTML. This is not perfect
yet (I'm not too happy about the default modules.rst simply listing one
package), but it is good enough for the start and makes it possible to
actually browse the docstrings in a browser.
|
|
|
|
|
|
This is code that needs to be repeated in possibly several places
(website, API, tests), so it makes sense to have those "high level
actions" a bit abstracted. edit.edit_images was already doing that to a
certain degree, but the code shouldn't have stayed in the view.
|
|
|
|
|
|
This is important if concurrent requests to edit the same track are
made, both for images and later for metadata embedding.
|
|
|
|
|
|
|
|
|
|
|
|
To add more playwright tests and to cut down on the duplicated code, the
helper methods have been put into a small class. This way, we don't have
to add 100 pytest fixtures.
|
|
|
|
|
|
|
|
This should be preferred over dealing with raw alembic now.
|
|
|
|
In case it might be caused by something else than SQLite's inability to
delete a column, it's good to have the actual error written out
somewhere.
|
|
This step would otherwise be done by alembic, which means that we'd
lose the first log messages before calling into alembic.
|
|
-1 is not always the right choice, e.g. when the previous update script
has the same alembic version. Therefore, we actually need to do the
effort to track the "previous alembic" version.
|
|
|
|
|
|
|
|
|
|
This does a lot of changes already. What is definitely not working yet
are the tests, as they still try to put the data into the database - but
that should be easy to fix.
The convenience methods Track.{length,uphill,...} were a bit stupid to
fix, as our template code assumed that those attributes can just be
accessed. As a fix, I've introduced a new class that "re-introduces"
those and can lazily load them from the disk in case the cache does not
exist. This works pretty well, but is not too nice - we end up with a
lot of "proxy" properties.
Other than that, I'm positively surprised how well this has worked so
far, the upgrade scripts seem to be doing good and serving the file
straight from the disk seems to work nicely as well. What isn't tested
yet however is "edge cases", in case a data directory goes missing, ...
|
|
Since we plan on moving the GPX data (and the original copy) into the
data directory, it makes more sense to have a per-track "handle" instead
of having all methods of DataManager take a track_id parameter.
|
|
|
|
|
|
|
|
|
|
This tuple was basically the same as TileLayerConfig, just without the
validation. You could see in the old _extract_user_layers that otherwise
they were 1:1 doing the same job. Therefore, it made sense to remove
TileSource and instead rewrite the code to use TileLayerConfig directly.
|
|
|