From b3364d2836088b40bc3f3db39a02365bc0881f41 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 18:44:12 +0530 Subject: [PATCH 01/10] fixing version --- djangoseo/utils.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/djangoseo/utils.py b/djangoseo/utils.py index f345d7b..db0ceaf 100644 --- a/djangoseo/utils.py +++ b/djangoseo/utils.py @@ -6,8 +6,10 @@ from django.utils.safestring import mark_safe from django.utils.html import conditional_escape from django.contrib.contenttypes.models import ContentType -from django.core.urlresolvers import (RegexURLResolver, RegexURLPattern, - Resolver404, get_resolver) +try: + from django.urls import URLResolver, URLPattern, Resolver404, get_resolver +except Exception: + from django.core.urlresolvers import (RegexURLResolver as URLResolver, RegexURLPattern as URLPattern, Resolver404, get_resolver) class NotSet(object): @@ -51,9 +53,9 @@ def _resolver_resolve_to_name(resolver, path): new_path = path[match.end():] for pattern in resolver.url_patterns: try: - if isinstance(pattern, RegexURLPattern): + if isinstance(pattern, URLPattern): name = _pattern_resolve_to_name(pattern, new_path) - elif isinstance(pattern, RegexURLResolver): + elif isinstance(pattern, URLResolver): name = _resolver_resolve_to_name(pattern, new_path) except Resolver404 as e: tried.extend([(pattern.regex.pattern + ' ' + t) for t in From 303cfca66484954f27bf780d5e46f2189e257143 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 18:49:19 +0530 Subject: [PATCH 02/10] adding on_delete --- djangoseo/backends.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/djangoseo/backends.py b/djangoseo/backends.py index 25a481b..7bc32cc 100644 --- a/djangoseo/backends.py +++ b/djangoseo/backends.py @@ -201,6 +201,7 @@ class PathMetadataBase(MetadataBaseModel): null=True, blank=True, verbose_name=_("site"), + on_delete=models.CASCADE ) if options.use_i18n: @@ -268,6 +269,7 @@ class ViewMetadataBase(MetadataBaseModel): null=True, blank=True, verbose_name=_("site"), + on_delete=models.CASCADE ) if options.use_i18n: @@ -328,6 +330,7 @@ class ModelInstanceMetadataBase(MetadataBaseModel): _content_type = models.ForeignKey( ContentType, verbose_name=_("model"), + on_delete=models.CASCADE ) _object_id = models.PositiveIntegerField( @@ -342,6 +345,7 @@ class ModelInstanceMetadataBase(MetadataBaseModel): null=True, blank=True, verbose_name=_("site"), + on_delete=models.CASCADE ) if options.use_i18n: @@ -425,6 +429,7 @@ class ModelMetadataBase(MetadataBaseModel): _content_type = models.ForeignKey( ContentType, verbose_name=_("model"), + on_delete=models.CASCADE ) if options.use_sites: @@ -433,6 +438,7 @@ class ModelMetadataBase(MetadataBaseModel): null=True, blank=True, verbose_name=_("site"), + on_delete=models.CASCADE ) if options.use_i18n: From 2e1a8af555b882bbe512d1b630a70506f9921d32 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 18:59:24 +0530 Subject: [PATCH 03/10] changing resolver --- .vscode/settings.json | 3 +++ djangoseo/utils.py | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d67e4ba --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/Users/slokesh/Envs/smarturl-me/bin/python" +} \ No newline at end of file diff --git a/djangoseo/utils.py b/djangoseo/utils.py index db0ceaf..997bc59 100644 --- a/djangoseo/utils.py +++ b/djangoseo/utils.py @@ -46,9 +46,18 @@ def _pattern_resolve_to_name(pattern, path): return name +def get_regex(resolver_or_pattern): + """Utility method for django's deprecated resolver.regex""" + try: + regex = resolver_or_pattern.regex + except AttributeError: + regex = resolver_or_pattern.pattern.regex + return regex + + def _resolver_resolve_to_name(resolver, path): tried = [] - match = resolver.regex.search(path) + match = get_regex(resolver).search(path) if match: new_path = path[match.end():] for pattern in resolver.url_patterns: From f54ae4bc09e1ff9454ea9e41127ca374c3b11687 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 18:59:46 +0530 Subject: [PATCH 04/10] delete vscode --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d67e4ba..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "python.pythonPath": "/Users/slokesh/Envs/smarturl-me/bin/python" -} \ No newline at end of file From 68128011e6057211ed36690a7749ff4ad3ad049e Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 19:00:13 +0530 Subject: [PATCH 05/10] changing gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3492d58..b0e7fe6 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,4 @@ target/ test.db tests/settings_local.py /migrations/ +.vscode/ From df708c70c9406e60368b496f3c670fda35f86a0a Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 19:02:48 +0530 Subject: [PATCH 06/10] changing regexpattern --- djangoseo/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djangoseo/utils.py b/djangoseo/utils.py index 997bc59..b2bf844 100644 --- a/djangoseo/utils.py +++ b/djangoseo/utils.py @@ -7,7 +7,7 @@ from django.utils.html import conditional_escape from django.contrib.contenttypes.models import ContentType try: - from django.urls import URLResolver, URLPattern, Resolver404, get_resolver + from django.urls import URLResolver, RegexPattern as URLPattern, Resolver404, get_resolver except Exception: from django.core.urlresolvers import (RegexURLResolver as URLResolver, RegexURLPattern as URLPattern, Resolver404, get_resolver) From 2ef32dece5f278376a35f47ad32fb5c0a95a67a7 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 21:04:17 +0530 Subject: [PATCH 07/10] fixing bugs --- djangoseo/utils.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/djangoseo/utils.py b/djangoseo/utils.py index b2bf844..e71a120 100644 --- a/djangoseo/utils.py +++ b/djangoseo/utils.py @@ -7,7 +7,7 @@ from django.utils.html import conditional_escape from django.contrib.contenttypes.models import ContentType try: - from django.urls import URLResolver, RegexPattern as URLPattern, Resolver404, get_resolver + from django.urls.resolvers import URLResolver, RegexPattern as URLPattern, Resolver404, get_resolver except Exception: from django.core.urlresolvers import (RegexURLResolver as URLResolver, RegexURLPattern as URLPattern, Resolver404, get_resolver) @@ -60,6 +60,7 @@ def _resolver_resolve_to_name(resolver, path): match = get_regex(resolver).search(path) if match: new_path = path[match.end():] + name = None for pattern in resolver.url_patterns: try: if isinstance(pattern, URLPattern): @@ -67,12 +68,12 @@ def _resolver_resolve_to_name(resolver, path): elif isinstance(pattern, URLResolver): name = _resolver_resolve_to_name(pattern, new_path) except Resolver404 as e: - tried.extend([(pattern.regex.pattern + ' ' + t) for t in + tried.extend([(pattern.pattern + ' ' + t) for t in e.args[0]['tried']]) else: if name: return name - tried.append(pattern.regex.pattern) + tried.append(pattern.pattern) raise Resolver404({'tried': tried, 'path': new_path}) From 3e05611858f19566ae2bf2d4e4c85c0f1ddcd523 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 22:00:24 +0530 Subject: [PATCH 08/10] fixing encoding bug --- djangoseo/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djangoseo/base.py b/djangoseo/base.py index 6b5f577..71bc710 100644 --- a/djangoseo/base.py +++ b/djangoseo/base.py @@ -40,7 +40,7 @@ def __init__(self, metadata, instances, path, site=None, language=None): hexpath = hashlib.md5( iri_to_uri(site.domain + path)).hexdigest() else: - hexpath = hashlib.md5(iri_to_uri(path)).hexdigest() + hexpath = hashlib.md5(iri_to_uri(path).encode('utf-8')).hexdigest() if metadata._meta.use_i18n: self.__cache_prefix = 'djangoseo.%s.%s.%s' % ( self.__metadata.__class__.__name__, hexpath, language) From 77fc692c9d34bd5b5b6ea85e60703776e3fb9fc5 Mon Sep 17 00:00:00 2001 From: slokesh Date: Thu, 23 Aug 2018 22:15:58 +0530 Subject: [PATCH 09/10] save_as adding --- djangoseo/admin.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/djangoseo/admin.py b/djangoseo/admin.py index b639894..274733b 100644 --- a/djangoseo/admin.py +++ b/djangoseo/admin.py @@ -89,6 +89,7 @@ def get_list_display(): class ModelAdmin(model_admin): form = get_model_form(metadata_class) list_display = model_admin.list_display + get_list_display() + save_as = True _register_admin(admin_site, metadata_class._meta.get_model('model'), ModelAdmin) @@ -97,6 +98,7 @@ class ModelAdmin(model_admin): class ViewAdmin(view_admin): form = get_view_form(metadata_class) list_display = view_admin.list_display + get_list_display() + save_as = True _register_admin(admin_site, metadata_class._meta.get_model('view'), ViewAdmin) @@ -105,6 +107,7 @@ class ViewAdmin(view_admin): class PathAdmin(path_admin): form = get_path_form(metadata_class) list_display = path_admin.list_display + get_list_display() + save_as = True _register_admin(admin_site, metadata_class._meta.get_model('path'), PathAdmin) @@ -114,6 +117,7 @@ class ModelInstanceAdmin(model_instance_admin): form = get_modelinstance_form(metadata_class) list_display = (model_instance_admin.list_display + get_list_display()) + save_as = True _register_admin(admin_site, metadata_class._meta.get_model('modelinstance'), From bb7292cf1de22ffd0d8f990ce8a3e7eba57143ce Mon Sep 17 00:00:00 2001 From: slokesh Date: Sun, 26 Aug 2018 10:14:57 +0530 Subject: [PATCH 10/10] backward compatibility --- djangoseo/utils.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/djangoseo/utils.py b/djangoseo/utils.py index e71a120..f64b9fa 100644 --- a/djangoseo/utils.py +++ b/djangoseo/utils.py @@ -55,6 +55,13 @@ def get_regex(resolver_or_pattern): return regex +def get_pattern(pattern): + try: + return pattern.pattern + except AttributeError: + return pattern.regex.pattern + + def _resolver_resolve_to_name(resolver, path): tried = [] match = get_regex(resolver).search(path) @@ -68,12 +75,12 @@ def _resolver_resolve_to_name(resolver, path): elif isinstance(pattern, URLResolver): name = _resolver_resolve_to_name(pattern, new_path) except Resolver404 as e: - tried.extend([(pattern.pattern + ' ' + t) for t in + tried.extend([(get_pattern(pattern) + ' ' + t) for t in e.args[0]['tried']]) else: if name: return name - tried.append(pattern.pattern) + tried.append(get_pattern(pattern)) raise Resolver404({'tried': tried, 'path': new_path})