Browse Source

#626 shorten urls

Rafał Pitoń 8 years ago
parent
commit
e3dfd24a6c

+ 6 - 6
misago/markup/tests/test_parser.py

@@ -217,11 +217,11 @@ Lorem ipsum: http://somewhere.com/somewhere-something/
     def test_clean_linked_image(self):
     def test_clean_linked_image(self):
         """parser handles image element nested in link"""
         """parser handles image element nested in link"""
         test_text = """
         test_text = """
-[![3.png](http://test.com/attachment/thumb/test-43/)](http://test.com/attachment/test-43/)
+[![3.png](http://test.com/a/thumb/test-43/)](http://test.com/a/test-43/)
         """.strip()
         """.strip()
 
 
         expected_result = """
         expected_result = """
-<p><a href="/attachment/test-43/" rel="nofollow"><img alt="3.png" src="/attachment/thumb/test-43/"/></a></p>
+<p><a href="/a/test-43/" rel="nofollow"><img alt="3.png" src="/a/thumb/test-43/"/></a></p>
 """.strip()
 """.strip()
 
 
         result = parse(test_text, MockRequest(), MockPoster(), minify=True)
         result = parse(test_text, MockRequest(), MockPoster(), minify=True)
@@ -230,11 +230,11 @@ Lorem ipsum: http://somewhere.com/somewhere-something/
     def test_force_shva(self):
     def test_force_shva(self):
         """parser appends ?shva=1 bit to attachment links if flag is present"""
         """parser appends ?shva=1 bit to attachment links if flag is present"""
         test_text = """
         test_text = """
-![3.png](http://test.com/attachment/thumb/test-43/)
+![3.png](http://test.com/a/thumb/test-43/)
         """.strip()
         """.strip()
 
 
         expected_result = """
         expected_result = """
-<p><img alt="3.png" src="/attachment/thumb/test-43/?shva=1"/></p>
+<p><img alt="3.png" src="/a/thumb/test-43/?shva=1"/></p>
 """.strip()
 """.strip()
 
 
         result = parse(test_text, MockRequest(), MockPoster(), minify=True, force_shva=True)
         result = parse(test_text, MockRequest(), MockPoster(), minify=True, force_shva=True)
@@ -243,11 +243,11 @@ Lorem ipsum: http://somewhere.com/somewhere-something/
     def test_remove_shva(self):
     def test_remove_shva(self):
         """parser removes ?shva=1 bit from attachment links if flag is absent"""
         """parser removes ?shva=1 bit from attachment links if flag is absent"""
         test_text = """
         test_text = """
-![3.png](http://test.com/attachment/thumb/test-43/?shva=1)
+![3.png](http://test.com/a/thumb/test-43/?shva=1)
         """.strip()
         """.strip()
 
 
         expected_result = """
         expected_result = """
-<p><img alt="3.png" src="/attachment/thumb/test-43/"/></p>
+<p><img alt="3.png" src="/a/thumb/test-43/"/></p>
 """.strip()
 """.strip()
 
 
         result = parse(test_text, MockRequest(), MockPoster(), minify=True)
         result = parse(test_text, MockRequest(), MockPoster(), minify=True)

+ 17 - 12
misago/threads/tests/test_utils.py

@@ -168,62 +168,62 @@ class GetThreadIdFromUrlTests(MisagoTestCase):
             {
             {
                 # perfect match
                 # perfect match
                 'request': MockRequest('https', 'testforum.com', '/discuss/'),
                 'request': MockRequest('https', 'testforum.com', '/discuss/'),
-                'url': 'https://testforum.com/discuss/thread/test-thread-123/',
+                'url': 'https://testforum.com/discuss/t/test-thread-123/',
                 'pk': 123
                 'pk': 123
             },
             },
             {
             {
                 # we don't validate scheme in case site recently moved to https
                 # we don't validate scheme in case site recently moved to https
                 # but user still has old url's saved somewhere
                 # but user still has old url's saved somewhere
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
-                'url': 'http://testforum.com/discuss/thread/test-thread-432/post/12321/',
+                'url': 'http://testforum.com/discuss/t/test-thread-432/post/12321/',
                 'pk': 432
                 'pk': 432
             },
             },
             {
             {
                 # extract thread id from other thread urls
                 # extract thread id from other thread urls
                 'request': MockRequest('https', 'testforum.com', '/discuss/'),
                 'request': MockRequest('https', 'testforum.com', '/discuss/'),
-                'url': 'http://testforum.com/discuss/thread/test-thread-432/post/12321/',
+                'url': 'http://testforum.com/discuss/t/test-thread-432/post/12321/',
                 'pk': 432
                 'pk': 432
             },
             },
             {
             {
                 # extract thread id from thread page url
                 # extract thread id from thread page url
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
-                'url': 'http://testforum.com/discuss/thread/test-thread-432/123/',
+                'url': 'http://testforum.com/discuss/t/test-thread-432/123/',
                 'pk': 432
                 'pk': 432
             },
             },
             {
             {
                 # extract thread id from thread last post url with relative schema
                 # extract thread id from thread last post url with relative schema
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
-                'url': '//testforum.com/discuss/thread/test-thread-18/last/',
+                'url': '//testforum.com/discuss/t/test-thread-18/last/',
                 'pk': 18
                 'pk': 18
             },
             },
             {
             {
                 # extract thread id from url that lacks scheme
                 # extract thread id from url that lacks scheme
                 'request': MockRequest('http', 'testforum.com', ''),
                 'request': MockRequest('http', 'testforum.com', ''),
-                'url': 'testforum.com/thread/test-thread-12/last/',
+                'url': 'testforum.com/t/test-thread-12/last/',
                 'pk': 12
                 'pk': 12
             },
             },
             {
             {
                 # extract thread id from schemaless thread last post url
                 # extract thread id from schemaless thread last post url
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
                 'request': MockRequest('http', 'testforum.com', '/discuss/'),
-                'url': 'testforum.com/discuss/thread/test-thread-18/last/',
+                'url': 'testforum.com/discuss/t/test-thread-18/last/',
                 'pk': 18
                 'pk': 18
             },
             },
             {
             {
                 # extract thread id from url that lacks scheme and hostname
                 # extract thread id from url that lacks scheme and hostname
                 'request': MockRequest('http', 'testforum.com', ''),
                 'request': MockRequest('http', 'testforum.com', ''),
-                'url': '/thread/test-thread-13/',
+                'url': '/t/test-thread-13/',
                 'pk': 13
                 'pk': 13
             },
             },
             {
             {
                 # extract thread id from url that has port name
                 # extract thread id from url that has port name
                 'request': MockRequest('http', '127.0.0.1:8000', ''),
                 'request': MockRequest('http', '127.0.0.1:8000', ''),
-                'url': 'https://127.0.0.1:8000/thread/test-thread-13/',
+                'url': 'https://127.0.0.1:8000/t/test-thread-13/',
                 'pk': 13
                 'pk': 13
             },
             },
             {
             {
                 # extract thread id from url that isn't trimmed
                 # extract thread id from url that isn't trimmed
                 'request': MockRequest('http', '127.0.0.1:8000', ''),
                 'request': MockRequest('http', '127.0.0.1:8000', ''),
-                'url': '   /thread/test-thread-13/   ',
+                'url': '   /t/test-thread-13/   ',
                 'pk': 13
                 'pk': 13
             }
             }
         )
         )
@@ -238,12 +238,17 @@ class GetThreadIdFromUrlTests(MisagoTestCase):
             {
             {
                 # invalid wsgi alias
                 # invalid wsgi alias
                 'request': MockRequest('https', 'testforum.com'),
                 'request': MockRequest('https', 'testforum.com'),
-                'url': 'http://testforum.com/discuss/thread/test-thread-123/'
+                'url': 'http://testforum.com/discuss/t/test-thread-123/'
             },
             },
             {
             {
                 # invalid hostname
                 # invalid hostname
                 'request': MockRequest('http', 'misago-project.org', '/discuss/'),
                 'request': MockRequest('http', 'misago-project.org', '/discuss/'),
-                'url': 'https://testforum.com/discuss/thread/test-thread-432/post/12321/'
+                'url': 'https://testforum.com/discuss/t/test-thread-432/post/12321/'
+            },
+            {
+                # old thread url
+                'request': MockRequest('http', 'testforum.com'),
+                'url': 'https://testforum.com/thread/bobboberson-123/'
             },
             },
             {
             {
                 # non-thread url
                 # non-thread url

+ 12 - 12
misago/threads/urls/__init__.py

@@ -57,12 +57,12 @@ else:
 
 
 
 
 urlpatterns += threads_list_patterns('category', CategoryThreads, (
 urlpatterns += threads_list_patterns('category', CategoryThreads, (
-    r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/$',
-    r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/my/$',
-    r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/new/$',
-    r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/unread/$',
-    r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/subscribed/$',
-    r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/unapproved/$',
+    r'^c/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/$',
+    r'^c/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/my/$',
+    r'^c/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/new/$',
+    r'^c/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/unread/$',
+    r'^c/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/subscribed/$',
+    r'^c/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/unapproved/$',
 ))
 ))
 
 
 
 
@@ -77,8 +77,8 @@ urlpatterns += threads_list_patterns('private-threads', PrivateThreads, (
 
 
 def thread_view_patterns(prefix, view):
 def thread_view_patterns(prefix, view):
     urls = [
     urls = [
-        url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/$' % prefix, view.as_view(), name=prefix),
-        url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/(?P<page>\d+)/$' % prefix, view.as_view(), name=prefix),
+        url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/$' % prefix[0], view.as_view(), name=prefix),
+        url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/(?P<page>\d+)/$' % prefix[0], view.as_view(), name=prefix),
     ]
     ]
     return urls
     return urls
 
 
@@ -92,12 +92,12 @@ def goto_patterns(prefix, **views):
 
 
     post_view = views.pop('post', None)
     post_view = views.pop('post', None)
     if post_view:
     if post_view:
-        url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/post/(?P<post>\d+)/$' % prefix
+        url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/post/(?P<post>\d+)/$' % prefix[0]
         url_name = '%s-post' % prefix
         url_name = '%s-post' % prefix
         urls.append(url(url_pattern, post_view.as_view(), name=url_name))
         urls.append(url(url_pattern, post_view.as_view(), name=url_name))
 
 
     for name, view in views.items():
     for name, view in views.items():
-        url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/%s/$' % (prefix, name)
+        url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/%s/$' % (prefix[0], name)
         url_name = '%s-%s' % (prefix, name)
         url_name = '%s-%s' % (prefix, name)
         urls.append(url(url_pattern, view.as_view(), name=url_name))
         urls.append(url(url_pattern, view.as_view(), name=url_name))
 
 
@@ -121,6 +121,6 @@ urlpatterns += goto_patterns(
 
 
 
 
 urlpatterns += [
 urlpatterns += [
-    url(r'^attachment/(?P<secret>[-a-zA-Z0-9]+)-(?P<pk>\d+)/', attachment_server, name='attachment'),
-    url(r'^attachment/thumb/(?P<secret>[-a-zA-Z0-9]+)-(?P<pk>\d+)/', attachment_server, name='attachment-thumbnail', kwargs={'thumbnail': True}),
+    url(r'^a/(?P<secret>[-a-zA-Z0-9]+)-(?P<pk>\d+)/', attachment_server, name='attachment'),
+    url(r'^a/thumb/(?P<secret>[-a-zA-Z0-9]+)-(?P<pk>\d+)/', attachment_server, name='attachment-thumbnail', kwargs={'thumbnail': True}),
 ]
 ]

+ 1 - 1
misago/users/urls/__init__.py

@@ -43,7 +43,7 @@ urlpatterns += [
 
 
 
 
 urlpatterns += [
 urlpatterns += [
-    url(r'^user/(?P<slug>[a-zA-Z0-9]+)-(?P<pk>\d+)/', include([
+    url(r'^u/(?P<slug>[a-zA-Z0-9]+)-(?P<pk>\d+)/', include([
         url(r'^$', profile.landing, name='user'),
         url(r'^$', profile.landing, name='user'),
         url(r'^posts/$', profile.posts, name='user-posts'),
         url(r'^posts/$', profile.posts, name='user-posts'),
         url(r'^threads/$', profile.threads, name='user-threads'),
         url(r'^threads/$', profile.threads, name='user-threads'),