From ea6725f833b45da20b81794ad86b1660f3478318 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Sun, 8 Feb 2026 12:58:36 +0900 Subject: [PATCH] Move to uv project type --- README.md | 10 +++++----- pyproject.toml | 8 ++++++++ {bin/utils => src/reverse_geolocate}/__init__.py | 0 {bin => src/reverse_geolocate}/reverse_geolocate.py | 9 +++++---- src/reverse_geolocate/utils/__init__.py | 0 {bin => src/reverse_geolocate}/utils/long_lat.py | 4 ++-- .../reverse_geolocate}/utils/reverse_geolocate.py | 4 ++-- {bin => src/reverse_geolocate}/utils/string_helpers.py | 0 uv.lock | 2 +- 9 files changed, 23 insertions(+), 14 deletions(-) rename {bin/utils => src/reverse_geolocate}/__init__.py (100%) rename {bin => src/reverse_geolocate}/reverse_geolocate.py (99%) create mode 100644 src/reverse_geolocate/utils/__init__.py rename {bin => src/reverse_geolocate}/utils/long_lat.py (97%) rename {bin => src/reverse_geolocate}/utils/reverse_geolocate.py (98%) rename {bin => src/reverse_geolocate}/utils/string_helpers.py (100%) diff --git a/README.md b/README.md index 5d14f01..42d10f1 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ See more information for [Python XMP Tool kit](http://python-xmp-toolkit.readthe ## Command line arguments ```sh -uv run bin/reverse_geolocate.py [-h] -i +uv run reverse-geolocate [-h] -i [XMP SOURCE FOLDER [XMP SOURCE FOLDER ...]] [-x [EXCLUDE XMP SOURCE FOLDER [EXCLUDE XMP SOURCE FOLDER ...]]] [-l LIGHTROOM FOLDER] [-s] @@ -29,7 +29,7 @@ uv run bin/reverse_geolocate.py [-h] -i to run it from a differnt path ```sh -uv run --project run /reverse-geolocate.py +uv run --project reverse-geolocate ``` ### Arguments @@ -62,19 +62,19 @@ If the Lightroom lookup is used without the --strict argument and several files #### Example ```sh -reverse_geolocate.py -i Photos/2017/01 -i Photos/2017/02 -l LightRoom/MyCatalogue -f overwrite -g +uv run reverse-geolocate -i Photos/2017/01 -i Photos/2017/02 -l LightRoom/MyCatalogue -f overwrite -g ``` Will find all XMP sidecar files in both folders *Photos/2017/01* and *Photos/2017/02* and all folder below it. Uses the Lightroom database at *LightRoom/MyCatalogue*. The script will overwrite all data, even if it is already set ```sh -reverse_geolocate.py -i Photos/2017/01 -i Photos/2017/02 -x Photos/2017/02/Folder\ A -x Photos/2017/01/Folder\ B/some_file.xmp -l LightRoom/MyCatalogue +uv run reverse-geolocate -i Photos/2017/01 -i Photos/2017/02 -x Photos/2017/02/Folder\ A -x Photos/2017/01/Folder\ B/some_file.xmp -l LightRoom/MyCatalogue ``` Will exlucde "Photos/2017/02/Folder A" from processing. For -x also a file (including the .xmp extension) can be given. ```sh -reverse_geolocate.py -i Photos/2017/01/Event-01/some_photo.xmp -f location +uv run reverse-geolocate -i Photos/2017/01/Event-01/some_photo.xmp -f location ``` Only works on *some_photo.xmp* file and will only set the *location* field if it is not yet set. diff --git a/pyproject.toml b/pyproject.toml index 3d06649..34cda5a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,14 @@ dependencies = [ "requests>=2.32.5", ] +[project.scripts] +reverse-geolocate = "reverse_geolocate.reverse_geolocate:main" + +[build-system] +requires = ["uv_build>=0.9.7,<0.10.0"] +build-backend = "uv_build" + + # MARK: Python linting [tool.pyright] typeCheckingMode = "strict" diff --git a/bin/utils/__init__.py b/src/reverse_geolocate/__init__.py similarity index 100% rename from bin/utils/__init__.py rename to src/reverse_geolocate/__init__.py diff --git a/bin/reverse_geolocate.py b/src/reverse_geolocate/reverse_geolocate.py similarity index 99% rename from bin/reverse_geolocate.py rename to src/reverse_geolocate/reverse_geolocate.py index 7d0f21d..1e834ed 100755 --- a/bin/reverse_geolocate.py +++ b/src/reverse_geolocate/reverse_geolocate.py @@ -29,15 +29,15 @@ from math import ceil from libxmp import XMPMeta, consts # user modules below -from utils.long_lat import ( +from reverse_geolocate.utils.long_lat import ( convert_dms_to_lat, convert_dms_to_long, convert_lat_to_dms, convert_long_to_dms, get_distance, ) -from utils.reverse_geolocate import reverse_geolocate -from utils.string_helpers import string_len_cjk, shorten_string, format_len +from reverse_geolocate.utils.reverse_geolocate import reverse_geolocate +from reverse_geolocate.utils.string_helpers import string_len_cjk, shorten_string, format_len ############################################################## # FUNCTIONS @@ -1357,6 +1357,7 @@ def main(): # MAIN RUN ############################################################## -main() +if __name__ == "__main__": + main() # __END__ diff --git a/src/reverse_geolocate/utils/__init__.py b/src/reverse_geolocate/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bin/utils/long_lat.py b/src/reverse_geolocate/utils/long_lat.py similarity index 97% rename from bin/utils/long_lat.py rename to src/reverse_geolocate/utils/long_lat.py index 40f5c37..55a59d7 100644 --- a/bin/utils/long_lat.py +++ b/src/reverse_geolocate/utils/long_lat.py @@ -61,7 +61,7 @@ def convert_long_to_dms(lat_long: float) -> str: return convert_lat_long_to_dms(lat_long, is_longitude=True) -def long_lat_reg(longitude: str, latitude: str) -> dict[str, float] : +def long_lat_reg(longitude: str, latitude: str) -> dict[str, float]: """ converts the XMP/EXIF formatted GPS Long/Lat coordinates from the , to the normal float @@ -77,7 +77,7 @@ def long_lat_reg(longitude: str, latitude: str) -> dict[str, float] : # regex latlong_re = re.compile(r"^(\d+),(\d+\.\d+)([NESW]{1})$") # dict for loop - lat_long = {"longitude": longitude, "latitude": latitude} + lat_long: dict[str, str | float] = {"longitude": longitude, "latitude": latitude} # for element in lat_long: for index, element in lat_long.items(): # match if it is exif GPS format diff --git a/bin/utils/reverse_geolocate.py b/src/reverse_geolocate/utils/reverse_geolocate.py similarity index 98% rename from bin/utils/reverse_geolocate.py rename to src/reverse_geolocate/utils/reverse_geolocate.py index 1f0e3cf..c312e44 100644 --- a/bin/utils/reverse_geolocate.py +++ b/src/reverse_geolocate/utils/reverse_geolocate.py @@ -4,8 +4,8 @@ reverse geolacte functions import re import requests -from utils.long_lat import long_lat_reg -from utils.string_helpers import only_latin_chars +from reverse_geolocate.utils.long_lat import long_lat_reg +from reverse_geolocate.utils.string_helpers import only_latin_chars def reverse_geolocate(longitude, latitude, map_type, args): diff --git a/bin/utils/string_helpers.py b/src/reverse_geolocate/utils/string_helpers.py similarity index 100% rename from bin/utils/string_helpers.py rename to src/reverse_geolocate/utils/string_helpers.py diff --git a/uv.lock b/uv.lock index 1990e76..edc5500 100644 --- a/uv.lock +++ b/uv.lock @@ -84,7 +84,7 @@ wheels = [ [[package]] name = "reverse-geolocate" version = "0.1.0" -source = { virtual = "." } +source = { editable = "." } dependencies = [ { name = "python-xmp-toolkit" }, { name = "requests" },