1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- from urllib.parse import urlparse
- from django.urls import resolve
- from .models import PostLike
- def add_categories_to_items(root_category, categories, items):
- categories_dict = {}
- for category in categories:
- categories_dict[category.pk] = category
- for item in items:
- item.category = categories_dict[item.category_id]
- def add_likes_to_posts(user, posts):
- if user.is_anonymous:
- return
- posts_map = {}
- for post in posts:
- posts_map[post.id] = post
- post.is_liked = False
- queryset = PostLike.objects.filter(liker=user, post_id__in=posts_map.keys())
- for like in queryset.values('post_id'):
- posts_map[like['post_id']].is_liked = True
- SUPPORTED_THREAD_ROUTES = {
- 'misago:thread': 'pk',
- 'misago:thread-post': 'pk',
- 'misago:thread-last': 'pk',
- 'misago:thread-new': 'pk',
- 'misago:thread-unapproved': 'pk',
- }
- def get_thread_id_from_url(request, url):
- try:
- clean_url = str(url).strip()
- bits = urlparse(clean_url)
- except:
- return None
- if bits.netloc and bits.netloc != request.get_host():
- return None
- if bits.path.startswith(request.get_host()):
- clean_path = bits.path.lstrip(request.get_host())
- else:
- clean_path = bits.path
- try:
- wsgi_alias = request.path[:len(request.path_info) * -1]
- if wsgi_alias and not clean_path.startswith(wsgi_alias):
- return None
- resolution = resolve(clean_path[len(wsgi_alias):])
- except:
- return None
- if not resolution.namespaces:
- return None
- url_name = '{}:{}'.format(':'.join(resolution.namespaces), resolution.url_name)
- kwargname = SUPPORTED_THREAD_ROUTES.get(url_name)
- if not kwargname:
- return None
- try:
- return int(resolution.kwargs.get(kwargname))
- except (TypeError, ValueError):
- return None
|