From c7eb6250f9a18e3a6e98951c1c7edf171838e28a Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sat, 27 Dec 2025 22:10:02 -0600 Subject: [PATCH 1/6] add new blog rss feed, better handle no newsletter --- .../overviews/sections/LatestBlogPosts.svelte | 22 +++--- ohmg/frontend/templates/index.html | 78 ++++++++++--------- 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/ohmg/frontend/svelte/src/components/overviews/sections/LatestBlogPosts.svelte b/ohmg/frontend/svelte/src/components/overviews/sections/LatestBlogPosts.svelte index ba838a0d..645e0846 100644 --- a/ohmg/frontend/svelte/src/components/overviews/sections/LatestBlogPosts.svelte +++ b/ohmg/frontend/svelte/src/components/overviews/sections/LatestBlogPosts.svelte @@ -3,21 +3,23 @@ $: blogItems = []; - fetch('https://blog.oldinsurancemaps.net/rss.xml') + fetch('https://blog.oldinsurancemaps.net/feed.xml') .then((response) => response.text()) .then((str) => new window.DOMParser().parseFromString(str, 'text/xml')) .then((data) => { const items = data.querySelectorAll('item'); items.forEach((el) => { - blogItems = [ - ...blogItems, - { - title: el.querySelector('title').innerHTML, - link: el.querySelector('link').innerHTML, - pubDate: el.querySelector('pubDate').innerHTML, - date: new Date(el.querySelector('pubDate').innerHTML).toDateString(), - }, - ]; + if (el.querySelector('title').innerHTML) { + blogItems = [ + ...blogItems, + { + title: el.querySelector('title').innerHTML, + link: el.querySelector('link').innerHTML, + pubDate: el.querySelector('pubDate').innerHTML, + date: new Date(el.querySelector('pubDate').innerHTML).toDateString(), + }, + ]; + } }); blogItems.sort(function (a, b) { return new Date(b.pubDate) - new Date(a.pubDate); diff --git a/ohmg/frontend/templates/index.html b/ohmg/frontend/templates/index.html index ec8dfc08..8a1ced76 100644 --- a/ohmg/frontend/templates/index.html +++ b/ohmg/frontend/templates/index.html @@ -45,39 +45,47 @@

OldInsuranceMaps.net

-
- {% include '_svelte_component.html' with component_name='LatestBlogPosts' no_css=True %} -
-
-
-
-

Newsletter

-
-
- -
-
- - - - {%if USER_SUBSCRIBED %} - manage your subscription - {% else %} - - {% endif %} -
+
+ {% include '_svelte_component.html' with component_name='LatestBlogPosts' no_css=True %} +
+ {% if NEWSLETTER_SLUG %} +
+
+
+

Newsletter

+
+
+ +
+
+ + + + {%if USER_SUBSCRIBED %} + manage your subscription + {% else %} + {% if PROSOPO_SITE_KEY %} + {% include '_captcha_submit.html' %} + {% else %} + + {% endif %} + {% endif %} +
+ {% endif %}
@@ -110,8 +118,8 @@

{{MAP_CT}} maps in {{PLACES_CT}} cities

-

Who uses this platform?

-

Here's how some organizations have used OldInsuranceMaps.net to support their research and community mapping efforts.

+

Who uses OldInsuranceMaps.net?

+

Here's how some organizations have used this platform to support their research and community mapping efforts.

{% for partner in PARTNERS %}
{% if partner.logo_url %} From 25a255db0439d06264a364d932a72198e17bc240 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sat, 27 Dec 2025 22:46:42 -0600 Subject: [PATCH 2/6] create pattern for custom redirects --- .gitignore | 2 +- ohmg/conf/http.py | 19 +++++++++++++++++++ ohmg/settings.py | 2 ++ ohmg/urls.py | 7 +++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4cfefb3f..2c165502 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ tests/root .ohmg_api_key - +_redirects.txt plugins static_root uploaded diff --git a/ohmg/conf/http.py b/ohmg/conf/http.py index ec86eb6b..801e31d7 100644 --- a/ohmg/conf/http.py +++ b/ohmg/conf/http.py @@ -1,6 +1,8 @@ import json import re from http import HTTPStatus +from pathlib import Path +from typing import List, Tuple from django.conf import settings from django.http import JsonResponse @@ -46,6 +48,23 @@ def user_info_from_request(request): return user_info +def load_custom_redirects() -> List[Tuple]: + redirects = [] + redirects_file = settings.OHMG_REDIRECTS_FILE + if Path(redirects_file).is_file(): + with open(redirects_file) as o: + for line in o.readlines(): + items = line.split(",") + if len(items) == 2: + redirects.append( + ( + items[0].lstrip().rstrip(), + items[1].lstrip().rstrip(), + ) + ) + return redirects + + def generate_ohmg_context(request) -> dict: """Returns a dictionary containing context that is generally needed on most pages, providing a standard approach to passing context to Svelte components.""" diff --git a/ohmg/settings.py b/ohmg/settings.py index 797bce4d..3f7e26fe 100644 --- a/ohmg/settings.py +++ b/ohmg/settings.py @@ -230,6 +230,8 @@ PROSOPO_SITE_KEY = os.getenv("PROSOPO_SITE_KEY") PROSOPO_SECRET_KEY = os.getenv("PROSOPO_SECRET_KEY") +OHMG_REDIRECTS_FILE = BASE_DIR / "_redirects.txt" + try: # try to parse python notation, default in dockerized env AVATAR_PROVIDERS = ast.literal_eval(os.getenv("AVATAR_PROVIDERS")) diff --git a/ohmg/urls.py b/ohmg/urls.py index 5b0acdb3..00be1557 100644 --- a/ohmg/urls.py +++ b/ohmg/urls.py @@ -4,8 +4,10 @@ from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.urls import include, path from django.views.defaults import page_not_found, server_error +from django.views.generic import RedirectView from ohmg.api.routes import beta2 +from ohmg.conf.http import load_custom_redirects def debug_page_not_found(request): @@ -33,6 +35,11 @@ def debug_server_error(request): path("markdownx/", include("markdownx.urls")), ] + +# r = load_custom_redirects() +# print(r) +urlpatterns += [path(s, RedirectView.as_view(url=d)) for s, d in load_custom_redirects()] + urlpatterns += staticfiles_urlpatterns() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.VRT_URL, document_root=settings.VRT_ROOT) From f1375619aa82efaad010445c4f19c65f121d3222 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 28 Dec 2025 05:06:16 +0000 Subject: [PATCH 3/6] match redirects before any other urls --- ohmg/urls.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ohmg/urls.py b/ohmg/urls.py index 00be1557..00693acf 100644 --- a/ohmg/urls.py +++ b/ohmg/urls.py @@ -18,8 +18,9 @@ def debug_page_not_found(request): def debug_server_error(request): return server_error(request) +urlpatterns = [path(s, RedirectView.as_view(url=d)) for s, d in load_custom_redirects()] -urlpatterns = [ +urlpatterns += [ ## OHMG app urls path("", include("ohmg.frontend.urls")), path("", include("ohmg.core.urls")), @@ -35,11 +36,6 @@ def debug_server_error(request): path("markdownx/", include("markdownx.urls")), ] - -# r = load_custom_redirects() -# print(r) -urlpatterns += [path(s, RedirectView.as_view(url=d)) for s, d in load_custom_redirects()] - urlpatterns += staticfiles_urlpatterns() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.VRT_URL, document_root=settings.VRT_ROOT) From e944b269e490f47753c6fe509a8fffe2c9efad21 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 28 Dec 2025 15:42:01 -0600 Subject: [PATCH 4/6] move redirect storage to db model --- .gitignore | 2 +- ohmg/conf/http.py | 19 ------------------- ohmg/frontend/admin.py | 9 ++++++++- ohmg/frontend/migrations/0003_redirect.py | 21 +++++++++++++++++++++ ohmg/frontend/models.py | 5 +++++ ohmg/frontend/urls.py | 5 ++++- ohmg/settings.py | 2 -- ohmg/urls.py | 5 +---- 8 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 ohmg/frontend/migrations/0003_redirect.py diff --git a/.gitignore b/.gitignore index 2c165502..4cfefb3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ tests/root .ohmg_api_key -_redirects.txt + plugins static_root uploaded diff --git a/ohmg/conf/http.py b/ohmg/conf/http.py index 801e31d7..ec86eb6b 100644 --- a/ohmg/conf/http.py +++ b/ohmg/conf/http.py @@ -1,8 +1,6 @@ import json import re from http import HTTPStatus -from pathlib import Path -from typing import List, Tuple from django.conf import settings from django.http import JsonResponse @@ -48,23 +46,6 @@ def user_info_from_request(request): return user_info -def load_custom_redirects() -> List[Tuple]: - redirects = [] - redirects_file = settings.OHMG_REDIRECTS_FILE - if Path(redirects_file).is_file(): - with open(redirects_file) as o: - for line in o.readlines(): - items = line.split(",") - if len(items) == 2: - redirects.append( - ( - items[0].lstrip().rstrip(), - items[1].lstrip().rstrip(), - ) - ) - return redirects - - def generate_ohmg_context(request) -> dict: """Returns a dictionary containing context that is generally needed on most pages, providing a standard approach to passing context to Svelte components.""" diff --git a/ohmg/frontend/admin.py b/ohmg/frontend/admin.py index 51a825d7..09fb3f9c 100644 --- a/ohmg/frontend/admin.py +++ b/ohmg/frontend/admin.py @@ -3,7 +3,7 @@ from django_json_widget.widgets import JSONEditorWidget from markdownx.admin import MarkdownxModelAdmin -from .models import Navbar, Page, Partner +from .models import Navbar, Page, Partner, Redirect class PageAdmin(MarkdownxModelAdmin): @@ -27,3 +27,10 @@ class PartnerAdmin(admin.ModelAdmin): admin.site.register(Partner, PartnerAdmin) + + +class RedirectAdmin(admin.ModelAdmin): + list_display = ("src", "dest") + + +admin.site.register(Redirect, RedirectAdmin) diff --git a/ohmg/frontend/migrations/0003_redirect.py b/ohmg/frontend/migrations/0003_redirect.py new file mode 100644 index 00000000..bfef414f --- /dev/null +++ b/ohmg/frontend/migrations/0003_redirect.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.18 on 2025-12-28 15:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('frontend', '0002_partner'), + ] + + operations = [ + migrations.CreateModel( + name='Redirect', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('src', models.CharField(max_length=255)), + ('dest', models.CharField(max_length=255)), + ], + ), + ] diff --git a/ohmg/frontend/models.py b/ohmg/frontend/models.py index 383b2af3..f7fc51ba 100644 --- a/ohmg/frontend/models.py +++ b/ohmg/frontend/models.py @@ -78,3 +78,8 @@ def save(self, *args, **kwargs): else: self.sortorder = self.pk return super(Partner, self).save(*args, **kwargs) + + +class Redirect(models.Model): + src = models.CharField(max_length=255) + dest = models.CharField(max_length=255) diff --git a/ohmg/frontend/urls.py b/ohmg/frontend/urls.py index 536c8996..e90bcec5 100644 --- a/ohmg/frontend/urls.py +++ b/ohmg/frontend/urls.py @@ -4,6 +4,7 @@ from django.views.generic import RedirectView, TemplateView from .converters import PageConverter +from .models import Redirect from .sitemap import sitemaps from .views import ( ActivityView, @@ -14,7 +15,9 @@ register_converter(PageConverter, "page-slug") -urlpatterns = [ +urlpatterns = [path(r.src, RedirectView.as_view(url=r.dest)) for r in Redirect.objects.all()] + +urlpatterns += [ ## app urls paths path("", HomePage.as_view(), name="home"), path("activity/", ActivityView.as_view(), name="activity"), diff --git a/ohmg/settings.py b/ohmg/settings.py index 3f7e26fe..797bce4d 100644 --- a/ohmg/settings.py +++ b/ohmg/settings.py @@ -230,8 +230,6 @@ PROSOPO_SITE_KEY = os.getenv("PROSOPO_SITE_KEY") PROSOPO_SECRET_KEY = os.getenv("PROSOPO_SECRET_KEY") -OHMG_REDIRECTS_FILE = BASE_DIR / "_redirects.txt" - try: # try to parse python notation, default in dockerized env AVATAR_PROVIDERS = ast.literal_eval(os.getenv("AVATAR_PROVIDERS")) diff --git a/ohmg/urls.py b/ohmg/urls.py index 00693acf..5b0acdb3 100644 --- a/ohmg/urls.py +++ b/ohmg/urls.py @@ -4,10 +4,8 @@ from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.urls import include, path from django.views.defaults import page_not_found, server_error -from django.views.generic import RedirectView from ohmg.api.routes import beta2 -from ohmg.conf.http import load_custom_redirects def debug_page_not_found(request): @@ -18,9 +16,8 @@ def debug_page_not_found(request): def debug_server_error(request): return server_error(request) -urlpatterns = [path(s, RedirectView.as_view(url=d)) for s, d in load_custom_redirects()] -urlpatterns += [ +urlpatterns = [ ## OHMG app urls path("", include("ohmg.frontend.urls")), path("", include("ohmg.core.urls")), From cb0d3b555a99a1bdf2346b275164410061f5483f Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 28 Dec 2025 17:30:01 -0600 Subject: [PATCH 5/6] replace redirect model with builtin django app --- ohmg/accounts/urls.py | 5 ----- ohmg/frontend/admin.py | 9 +-------- ohmg/frontend/migrations/0004_delete_redirect.py | 16 ++++++++++++++++ ohmg/frontend/models.py | 5 ----- ohmg/frontend/urls.py | 9 +++------ ohmg/settings.py | 2 ++ r.json | 1 + 7 files changed, 23 insertions(+), 24 deletions(-) create mode 100644 ohmg/frontend/migrations/0004_delete_redirect.py create mode 100644 r.json diff --git a/ohmg/accounts/urls.py b/ohmg/accounts/urls.py index 59a9fdeb..495935fe 100644 --- a/ohmg/accounts/urls.py +++ b/ohmg/accounts/urls.py @@ -1,5 +1,4 @@ from django.urls import include, path -from django.views.generic import RedirectView from .views import OHMGSignupView, ProfilesView, ProfileView @@ -9,8 +8,4 @@ path("account/", include("allauth.urls")), path("profile//", ProfileView.as_view(), name="profile_detail"), path("profiles/", ProfilesView.as_view(), name="profiles"), - ## these are all past versions of the profiles page - path("participants/", RedirectView.as_view(pattern_name="profiles", permanent=False)), - path("participation/", RedirectView.as_view(pattern_name="profiles", permanent=False)), - path("people/", RedirectView.as_view(pattern_name="profiles", permanent=False)), ] diff --git a/ohmg/frontend/admin.py b/ohmg/frontend/admin.py index 09fb3f9c..51a825d7 100644 --- a/ohmg/frontend/admin.py +++ b/ohmg/frontend/admin.py @@ -3,7 +3,7 @@ from django_json_widget.widgets import JSONEditorWidget from markdownx.admin import MarkdownxModelAdmin -from .models import Navbar, Page, Partner, Redirect +from .models import Navbar, Page, Partner class PageAdmin(MarkdownxModelAdmin): @@ -27,10 +27,3 @@ class PartnerAdmin(admin.ModelAdmin): admin.site.register(Partner, PartnerAdmin) - - -class RedirectAdmin(admin.ModelAdmin): - list_display = ("src", "dest") - - -admin.site.register(Redirect, RedirectAdmin) diff --git a/ohmg/frontend/migrations/0004_delete_redirect.py b/ohmg/frontend/migrations/0004_delete_redirect.py new file mode 100644 index 00000000..8f955b69 --- /dev/null +++ b/ohmg/frontend/migrations/0004_delete_redirect.py @@ -0,0 +1,16 @@ +# Generated by Django 3.2.18 on 2025-12-28 17:27 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('frontend', '0003_redirect'), + ] + + operations = [ + migrations.DeleteModel( + name='Redirect', + ), + ] diff --git a/ohmg/frontend/models.py b/ohmg/frontend/models.py index f7fc51ba..383b2af3 100644 --- a/ohmg/frontend/models.py +++ b/ohmg/frontend/models.py @@ -78,8 +78,3 @@ def save(self, *args, **kwargs): else: self.sortorder = self.pk return super(Partner, self).save(*args, **kwargs) - - -class Redirect(models.Model): - src = models.CharField(max_length=255) - dest = models.CharField(max_length=255) diff --git a/ohmg/frontend/urls.py b/ohmg/frontend/urls.py index e90bcec5..d911e8bd 100644 --- a/ohmg/frontend/urls.py +++ b/ohmg/frontend/urls.py @@ -4,7 +4,8 @@ from django.views.generic import RedirectView, TemplateView from .converters import PageConverter -from .models import Redirect + +# from .models import Redirect from .sitemap import sitemaps from .views import ( ActivityView, @@ -15,16 +16,12 @@ register_converter(PageConverter, "page-slug") -urlpatterns = [path(r.src, RedirectView.as_view(url=r.dest)) for r in Redirect.objects.all()] - -urlpatterns += [ +urlpatterns = [ ## app urls paths path("", HomePage.as_view(), name="home"), path("activity/", ActivityView.as_view(), name="activity"), path("search/", Browse.as_view(), name="search"), path("/", PageView.as_view(), name="page-view"), - # make sure old links go to the proper page, use permanent=False for now... - path("browse/", RedirectView.as_view(pattern_name="search"), name="browse"), ## conventional url paths path( "robots.txt", diff --git a/ohmg/settings.py b/ohmg/settings.py index 797bce4d..84d0e2ea 100644 --- a/ohmg/settings.py +++ b/ohmg/settings.py @@ -67,6 +67,7 @@ "django.contrib.auth", "django.contrib.sessions", "django.contrib.sites", + "django.contrib.redirects", "django.contrib.admin", "django.contrib.sitemaps", "django.contrib.staticfiles", @@ -256,6 +257,7 @@ "django.contrib.auth.middleware.AuthenticationMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.security.SecurityMiddleware", + "django.contrib.redirects.middleware.RedirectFallbackMiddleware", "ohmg.conf.middleware.CORSMiddleware", ) diff --git a/r.json b/r.json new file mode 100644 index 00000000..0dcff17d --- /dev/null +++ b/r.json @@ -0,0 +1 @@ +[{"model": "redirects.redirect", "pk": 1, "fields": {"site": 1, "old_path": "/news/winter-2025-newsletter/", "new_path": "https://blog.oldinsurancemaps.net/2025/12/12/winter-newsletter/"}}, {"model": "redirects.redirect", "pk": 2, "fields": {"site": 1, "old_path": "/news/fall-2025-upcoming-events/", "new_path": "https://blog.oldinsurancemaps.net/2025/09/12/newsletter-fall-upcoming-events/"}}, {"model": "redirects.redirect", "pk": 3, "fields": {"site": 1, "old_path": "/news/summer-newsletter-2025/", "new_path": "https://blog.oldinsurancemaps.net/2025/07/15/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 4, "fields": {"site": 1, "old_path": "/news/2024-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2025/02/21/in-review-new-features/"}}, {"model": "redirects.redirect", "pk": 5, "fields": {"site": 1, "old_path": "/news/gis-day-events-data-agreement/", "new_path": "https://blog.oldinsurancemaps.net/2024/11/15/gis-day-events-nacis-data/"}}, {"model": "redirects.redirect", "pk": 6, "fields": {"site": 1, "old_path": "/news/fall-2024/", "new_path": "https://blog.oldinsurancemaps.net/2024/09/13/newsletter-fall/"}}, {"model": "redirects.redirect", "pk": 7, "fields": {"site": 1, "old_path": "/news/spring-and-mid-summer-updates-2024/", "new_path": "https://blog.oldinsurancemaps.net/2024/06/24/newsletter-spring-and-midsummer-updates/"}}, {"model": "redirects.redirect", "pk": 8, "fields": {"site": 1, "old_path": "/news/2023-year-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2023/12/31/year-in-review/"}}, {"model": "redirects.redirect", "pk": 9, "fields": {"site": 1, "old_path": "/news/october-newsletter-virtual-presentation/", "new_path": "https://blog.oldinsurancemaps.net/2023/10/25/newsletter-fall-virtual-presentation-tomorrow/"}}, {"model": "redirects.redirect", "pk": 10, "fields": {"site": 1, "old_path": "/news/july-aug-12-sept-big-updates/", "new_path": "https://blog.oldinsurancemaps.net/2023/09/18/newsletter-july-aug-sept-big/"}}, {"model": "redirects.redirect", "pk": 11, "fields": {"site": 1, "old_path": "/news/june-newsletter-2023/", "new_path": "https://blog.oldinsurancemaps.net/2023/06/14/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 12, "fields": {"site": 1, "old_path": "/news/its-already-may/", "new_path": "https://blog.oldinsurancemaps.net/2023/05/16/newsletter-its-already-may-and/"}}, {"model": "redirects.redirect", "pk": 13, "fields": {"site": 1, "old_path": "/news/new-year-new-polish/", "new_path": "https://blog.oldinsurancemaps.net/2023/01/13/new-year-new-polish/"}}, {"model": "redirects.redirect", "pk": 14, "fields": {"site": 1, "old_path": "/news/penultimate-update-thesis-defense/", "new_path": "https://blog.oldinsurancemaps.net/2022/06/28/penultimate-update-thesis-defense/"}}, {"model": "redirects.redirect", "pk": 15, "fields": {"site": 1, "old_path": "/news/end-kind-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/31/the-end-kind-of-user/"}}, {"model": "redirects.redirect", "pk": 16, "fields": {"site": 1, "old_path": "/news/presentation-tomorrow-still-looking-survey-respons/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/26/presentation-tomorrow-still-looking-for/"}}, {"model": "redirects.redirect", "pk": 17, "fields": {"site": 1, "old_path": "/news/big-milestone-reached-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/18/big-milestone-reached-user-survey/"}}, {"model": "redirects.redirect", "pk": 18, "fields": {"site": 1, "old_path": "/news/public-sessions-week-extension-improvements/", "new_path": "https://blog.oldinsurancemaps.net/2022/03/29/public-sessions-this-week-extension/"}}, {"model": "redirects.redirect", "pk": 19, "fields": {"site": 1, "old_path": "/news/georeferencing-sanborn-maps-louisiana-crowdsourcin/", "new_path": "https://blog.oldinsurancemaps.net/2022/02/03/georeferencing-sanborn-maps-of-louisiana/"}}, {"model": "redirects.redirect", "pk": 24, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/2/21/2024-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2025/02/21/in-review-new-features/"}}, {"model": "redirects.redirect", "pk": 25, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/5/18/big-milestone-reached-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/18/big-milestone-reached-user-survey/"}}, {"model": "redirects.redirect", "pk": 26, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/5/31/end-kind-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/31/the-end-kind-of-user/"}}, {"model": "redirects.redirect", "pk": 27, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/4", "new_path": "https://blog.oldinsurancemaps.net/2024/09/13/newsletter-fall/"}}, {"model": "redirects.redirect", "pk": 28, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/9/12/fall-2025-upcoming-events/", "new_path": "https://blog.oldinsurancemaps.net/2025/09/12/newsletter-fall-upcoming-events/"}}, {"model": "redirects.redirect", "pk": 29, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/2/3/georeferencing-sanborn-maps-louisiana-crowdsourcin/", "new_path": "https://blog.oldinsurancemaps.net/2022/02/03/georeferencing-sanborn-maps-of-louisiana/"}}, {"model": "redirects.redirect", "pk": 30, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2024/11/15/gis-day-events-data-agreement/", "new_path": "https://blog.oldinsurancemaps.net/2024/11/15/gis-day-events-nacis-data/"}}, {"model": "redirects.redirect", "pk": 31, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/5/15/its-already-may/", "new_path": "https://blog.oldinsurancemaps.net/2023/05/16/newsletter-its-already-may-and/"}}, {"model": "redirects.redirect", "pk": 32, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/9/18/july-aug-12-sept-big-updates/", "new_path": "https://blog.oldinsurancemaps.net/2023/09/18/newsletter-july-aug-sept-big/"}}, {"model": "redirects.redirect", "pk": 33, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/6/14/june-newsletter-2023/", "new_path": "https://blog.oldinsurancemaps.net/2023/06/14/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 34, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/12/31/2023-year-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2023/12/31/year-in-review/"}}, {"model": "redirects.redirect", "pk": 35, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/1/13/new-year-new-polish/", "new_path": "https://blog.oldinsurancemaps.net/2023/01/13/new-year-new-polish/"}}, {"model": "redirects.redirect", "pk": 36, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/10/26/october-newsletter-virtual-presentation/", "new_path": "https://blog.oldinsurancemaps.net/2023/10/25/newsletter-fall-virtual-presentation-tomorrow/"}}, {"model": "redirects.redirect", "pk": 37, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/6/28/penultimate-update-thesis-defense/", "new_path": "https://blog.oldinsurancemaps.net/2022/06/28/penultimate-update-thesis-defense/"}}, {"model": "redirects.redirect", "pk": 38, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/5/26/presentation-tomorrow-still-looking-survey-respons/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/26/presentation-tomorrow-still-looking-for/"}}, {"model": "redirects.redirect", "pk": 39, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/3/29/public-sessions-week-extension-improvements/", "new_path": "https://blog.oldinsurancemaps.net/2022/03/29/public-sessions-this-week-extension/"}}, {"model": "redirects.redirect", "pk": 40, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2024/6/24/spring-and-mid-summer-updates-2024/", "new_path": "https://blog.oldinsurancemaps.net/2024/06/24/newsletter-spring-and-midsummer-updates/"}}, {"model": "redirects.redirect", "pk": 41, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/7/15/summer-newsletter-2025/", "new_path": "https://blog.oldinsurancemaps.net/2025/07/15/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 42, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/12/12/winter-2025-newsletter/", "new_path": "https://blog.oldinsurancemaps.net/2025/12/12/winter-newsletter/"}}, {"model": "redirects.redirect", "pk": 43, "fields": {"site": 1, "old_path": "/news/", "new_path": "https://blog.oldinsurancemaps.net"}}, {"model": "redirects.redirect", "pk": 44, "fields": {"site": 1, "old_path": "/newsletter/", "new_path": "https://blog.oldinsurancemaps.net"}}, {"model": "redirects.redirect", "pk": 45, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/", "new_path": "https://blog.oldinsurancemaps.net"}}, {"model": "redirects.redirect", "pk": 46, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/", "new_path": "https://blog.oldinsurancemaps.net/archive"}}, {"model": "redirects.redirect", "pk": 47, "fields": {"site": 1, "old_path": "/browse/", "new_path": "/search/"}}, {"model": "redirects.redirect", "pk": 48, "fields": {"site": 1, "old_path": "/participants/", "new_path": "/profiles/"}}, {"model": "redirects.redirect", "pk": 49, "fields": {"site": 1, "old_path": "/participation/", "new_path": "/profiles/"}}, {"model": "redirects.redirect", "pk": 50, "fields": {"site": 1, "old_path": "/people/", "new_path": "/profiles/"}}] \ No newline at end of file From 013686447b07027a128be644540a83399bcb8d8e Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Mon, 29 Dec 2025 10:12:06 -0600 Subject: [PATCH 6/6] remove unused files --- ohmg/frontend/migrations/0003_redirect.py | 21 ------------------- .../migrations/0004_delete_redirect.py | 16 -------------- r.json | 1 - 3 files changed, 38 deletions(-) delete mode 100644 ohmg/frontend/migrations/0003_redirect.py delete mode 100644 ohmg/frontend/migrations/0004_delete_redirect.py delete mode 100644 r.json diff --git a/ohmg/frontend/migrations/0003_redirect.py b/ohmg/frontend/migrations/0003_redirect.py deleted file mode 100644 index bfef414f..00000000 --- a/ohmg/frontend/migrations/0003_redirect.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.18 on 2025-12-28 15:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('frontend', '0002_partner'), - ] - - operations = [ - migrations.CreateModel( - name='Redirect', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('src', models.CharField(max_length=255)), - ('dest', models.CharField(max_length=255)), - ], - ), - ] diff --git a/ohmg/frontend/migrations/0004_delete_redirect.py b/ohmg/frontend/migrations/0004_delete_redirect.py deleted file mode 100644 index 8f955b69..00000000 --- a/ohmg/frontend/migrations/0004_delete_redirect.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.2.18 on 2025-12-28 17:27 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('frontend', '0003_redirect'), - ] - - operations = [ - migrations.DeleteModel( - name='Redirect', - ), - ] diff --git a/r.json b/r.json deleted file mode 100644 index 0dcff17d..00000000 --- a/r.json +++ /dev/null @@ -1 +0,0 @@ -[{"model": "redirects.redirect", "pk": 1, "fields": {"site": 1, "old_path": "/news/winter-2025-newsletter/", "new_path": "https://blog.oldinsurancemaps.net/2025/12/12/winter-newsletter/"}}, {"model": "redirects.redirect", "pk": 2, "fields": {"site": 1, "old_path": "/news/fall-2025-upcoming-events/", "new_path": "https://blog.oldinsurancemaps.net/2025/09/12/newsletter-fall-upcoming-events/"}}, {"model": "redirects.redirect", "pk": 3, "fields": {"site": 1, "old_path": "/news/summer-newsletter-2025/", "new_path": "https://blog.oldinsurancemaps.net/2025/07/15/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 4, "fields": {"site": 1, "old_path": "/news/2024-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2025/02/21/in-review-new-features/"}}, {"model": "redirects.redirect", "pk": 5, "fields": {"site": 1, "old_path": "/news/gis-day-events-data-agreement/", "new_path": "https://blog.oldinsurancemaps.net/2024/11/15/gis-day-events-nacis-data/"}}, {"model": "redirects.redirect", "pk": 6, "fields": {"site": 1, "old_path": "/news/fall-2024/", "new_path": "https://blog.oldinsurancemaps.net/2024/09/13/newsletter-fall/"}}, {"model": "redirects.redirect", "pk": 7, "fields": {"site": 1, "old_path": "/news/spring-and-mid-summer-updates-2024/", "new_path": "https://blog.oldinsurancemaps.net/2024/06/24/newsletter-spring-and-midsummer-updates/"}}, {"model": "redirects.redirect", "pk": 8, "fields": {"site": 1, "old_path": "/news/2023-year-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2023/12/31/year-in-review/"}}, {"model": "redirects.redirect", "pk": 9, "fields": {"site": 1, "old_path": "/news/october-newsletter-virtual-presentation/", "new_path": "https://blog.oldinsurancemaps.net/2023/10/25/newsletter-fall-virtual-presentation-tomorrow/"}}, {"model": "redirects.redirect", "pk": 10, "fields": {"site": 1, "old_path": "/news/july-aug-12-sept-big-updates/", "new_path": "https://blog.oldinsurancemaps.net/2023/09/18/newsletter-july-aug-sept-big/"}}, {"model": "redirects.redirect", "pk": 11, "fields": {"site": 1, "old_path": "/news/june-newsletter-2023/", "new_path": "https://blog.oldinsurancemaps.net/2023/06/14/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 12, "fields": {"site": 1, "old_path": "/news/its-already-may/", "new_path": "https://blog.oldinsurancemaps.net/2023/05/16/newsletter-its-already-may-and/"}}, {"model": "redirects.redirect", "pk": 13, "fields": {"site": 1, "old_path": "/news/new-year-new-polish/", "new_path": "https://blog.oldinsurancemaps.net/2023/01/13/new-year-new-polish/"}}, {"model": "redirects.redirect", "pk": 14, "fields": {"site": 1, "old_path": "/news/penultimate-update-thesis-defense/", "new_path": "https://blog.oldinsurancemaps.net/2022/06/28/penultimate-update-thesis-defense/"}}, {"model": "redirects.redirect", "pk": 15, "fields": {"site": 1, "old_path": "/news/end-kind-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/31/the-end-kind-of-user/"}}, {"model": "redirects.redirect", "pk": 16, "fields": {"site": 1, "old_path": "/news/presentation-tomorrow-still-looking-survey-respons/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/26/presentation-tomorrow-still-looking-for/"}}, {"model": "redirects.redirect", "pk": 17, "fields": {"site": 1, "old_path": "/news/big-milestone-reached-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/18/big-milestone-reached-user-survey/"}}, {"model": "redirects.redirect", "pk": 18, "fields": {"site": 1, "old_path": "/news/public-sessions-week-extension-improvements/", "new_path": "https://blog.oldinsurancemaps.net/2022/03/29/public-sessions-this-week-extension/"}}, {"model": "redirects.redirect", "pk": 19, "fields": {"site": 1, "old_path": "/news/georeferencing-sanborn-maps-louisiana-crowdsourcin/", "new_path": "https://blog.oldinsurancemaps.net/2022/02/03/georeferencing-sanborn-maps-of-louisiana/"}}, {"model": "redirects.redirect", "pk": 24, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/2/21/2024-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2025/02/21/in-review-new-features/"}}, {"model": "redirects.redirect", "pk": 25, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/5/18/big-milestone-reached-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/18/big-milestone-reached-user-survey/"}}, {"model": "redirects.redirect", "pk": 26, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/5/31/end-kind-user-survey/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/31/the-end-kind-of-user/"}}, {"model": "redirects.redirect", "pk": 27, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/4", "new_path": "https://blog.oldinsurancemaps.net/2024/09/13/newsletter-fall/"}}, {"model": "redirects.redirect", "pk": 28, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/9/12/fall-2025-upcoming-events/", "new_path": "https://blog.oldinsurancemaps.net/2025/09/12/newsletter-fall-upcoming-events/"}}, {"model": "redirects.redirect", "pk": 29, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/2/3/georeferencing-sanborn-maps-louisiana-crowdsourcin/", "new_path": "https://blog.oldinsurancemaps.net/2022/02/03/georeferencing-sanborn-maps-of-louisiana/"}}, {"model": "redirects.redirect", "pk": 30, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2024/11/15/gis-day-events-data-agreement/", "new_path": "https://blog.oldinsurancemaps.net/2024/11/15/gis-day-events-nacis-data/"}}, {"model": "redirects.redirect", "pk": 31, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/5/15/its-already-may/", "new_path": "https://blog.oldinsurancemaps.net/2023/05/16/newsletter-its-already-may-and/"}}, {"model": "redirects.redirect", "pk": 32, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/9/18/july-aug-12-sept-big-updates/", "new_path": "https://blog.oldinsurancemaps.net/2023/09/18/newsletter-july-aug-sept-big/"}}, {"model": "redirects.redirect", "pk": 33, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/6/14/june-newsletter-2023/", "new_path": "https://blog.oldinsurancemaps.net/2023/06/14/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 34, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/12/31/2023-year-in-review/", "new_path": "https://blog.oldinsurancemaps.net/2023/12/31/year-in-review/"}}, {"model": "redirects.redirect", "pk": 35, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/1/13/new-year-new-polish/", "new_path": "https://blog.oldinsurancemaps.net/2023/01/13/new-year-new-polish/"}}, {"model": "redirects.redirect", "pk": 36, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2023/10/26/october-newsletter-virtual-presentation/", "new_path": "https://blog.oldinsurancemaps.net/2023/10/25/newsletter-fall-virtual-presentation-tomorrow/"}}, {"model": "redirects.redirect", "pk": 37, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/6/28/penultimate-update-thesis-defense/", "new_path": "https://blog.oldinsurancemaps.net/2022/06/28/penultimate-update-thesis-defense/"}}, {"model": "redirects.redirect", "pk": 38, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/5/26/presentation-tomorrow-still-looking-survey-respons/", "new_path": "https://blog.oldinsurancemaps.net/2022/05/26/presentation-tomorrow-still-looking-for/"}}, {"model": "redirects.redirect", "pk": 39, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2022/3/29/public-sessions-week-extension-improvements/", "new_path": "https://blog.oldinsurancemaps.net/2022/03/29/public-sessions-this-week-extension/"}}, {"model": "redirects.redirect", "pk": 40, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2024/6/24/spring-and-mid-summer-updates-2024/", "new_path": "https://blog.oldinsurancemaps.net/2024/06/24/newsletter-spring-and-midsummer-updates/"}}, {"model": "redirects.redirect", "pk": 41, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/7/15/summer-newsletter-2025/", "new_path": "https://blog.oldinsurancemaps.net/2025/07/15/newsletter-summer/"}}, {"model": "redirects.redirect", "pk": 42, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/2025/12/12/winter-2025-newsletter/", "new_path": "https://blog.oldinsurancemaps.net/2025/12/12/winter-newsletter/"}}, {"model": "redirects.redirect", "pk": 43, "fields": {"site": 1, "old_path": "/news/", "new_path": "https://blog.oldinsurancemaps.net"}}, {"model": "redirects.redirect", "pk": 44, "fields": {"site": 1, "old_path": "/newsletter/", "new_path": "https://blog.oldinsurancemaps.net"}}, {"model": "redirects.redirect", "pk": 45, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/", "new_path": "https://blog.oldinsurancemaps.net"}}, {"model": "redirects.redirect", "pk": 46, "fields": {"site": 1, "old_path": "/newsletter/lahmg-news/archive/", "new_path": "https://blog.oldinsurancemaps.net/archive"}}, {"model": "redirects.redirect", "pk": 47, "fields": {"site": 1, "old_path": "/browse/", "new_path": "/search/"}}, {"model": "redirects.redirect", "pk": 48, "fields": {"site": 1, "old_path": "/participants/", "new_path": "/profiles/"}}, {"model": "redirects.redirect", "pk": 49, "fields": {"site": 1, "old_path": "/participation/", "new_path": "/profiles/"}}, {"model": "redirects.redirect", "pk": 50, "fields": {"site": 1, "old_path": "/people/", "new_path": "/profiles/"}}] \ No newline at end of file