Skip to content

Commit

Permalink
Merge cfb6195 into 854ecd0
Browse files Browse the repository at this point in the history
  • Loading branch information
DylannCordel committed Jan 27, 2017
2 parents 854ecd0 + cfb6195 commit c60276c
Show file tree
Hide file tree
Showing 4 changed files with 575 additions and 21 deletions.
40 changes: 25 additions & 15 deletions pybb/templatetags/pybb_tags.py
Expand Up @@ -29,7 +29,7 @@
def pybb_time(parser, token):
try:
tag, context_time = token.split_contents()
except ValueError:
except ValueError: # pragma: no cover
raise template.TemplateSyntaxError('pybb_time requires single argument')
else:
return PybbTimeNode(context_time)
Expand Down Expand Up @@ -64,12 +64,12 @@ def pybb_user_time(context_time, user):
minutes = int(delta.seconds / 60)
msg = ungettext('%d minute ago', '%d minutes ago', minutes)
return msg % minutes
if context['user'].is_authenticated():
if time.daylight:
if user.is_authenticated():
if time.daylight: # pragma: no cover
tz1 = time.altzone
else:
else: # pragma: no cover
tz1 = time.timezone
tz = tz1 + util.get_pybb_profile(context['user']).time_zone * 60 * 60
tz = tz1 + util.get_pybb_profile(user).time_zone * 60 * 60
context_time = context_time + timedelta(seconds=tz)
if today < context_time < tomorrow:
return _('today, %s') % context_time.strftime('%H:%M')
Expand Down Expand Up @@ -200,6 +200,8 @@ def pybb_topic_inline_pagination(topic):

@register.filter
def pybb_topic_poll_not_voted(topic, user):
if user.is_anonymous():
return True
return not PollAnswerUser.objects.filter(poll_answer__topic=topic, user=user).exists()


Expand All @@ -213,7 +215,7 @@ def pybb_get_profile(*args, **kwargs):
try:
return util.get_pybb_profile(kwargs.get('user') or args[0])
except:
return util.get_pybb_profile_model().objects.none()
return None


@register.assignment_tag(takes_context=True)
Expand All @@ -236,22 +238,30 @@ def pybb_get_latest_posts(context, cnt=5, user=None):

def load_perms_filters():
def partial(func_name, perms_obj):
def newfunc(user, obj):
return getattr(perms_obj, func_name)(user, obj)
def newfunc(user, obj_or_qs):
return getattr(perms_obj, func_name)(user, obj_or_qs)
return newfunc

def partial_no_param(func_name, perms_obj):
def newfunc(user):
return getattr(perms_obj, func_name)(user)
return newfunc

for method in inspect.getmembers(perms):
if inspect.ismethod(method[1]) and inspect.getargspec(method[1]).args[0] == 'self' and\
(method[0].startswith('may') or method[0].startswith('filter')):
if len(inspect.getargspec(method[1]).args) == 3:
register.filter('%s%s' % ('pybb_', method[0]), partial(method[0], perms))
elif len(inspect.getargspec(method[1]).args) == 2: # only user should be passed to permission method
register.filter('%s%s' % ('pybb_', method[0]), partial_no_param(method[0], perms))
for method_name, method in inspect.getmembers(perms):
if not inspect.ismethod(method):
continue # pragma: no cover - only methods are used to dynamically build templatetags
if not method_name.startswith('may') and not method_name.startswith('filter'):
continue # pragma: no cover - only (may|filter)* methods are used to dynamically build templatetags
method_args = inspect.getargspec(method).args
args_count = len(method_args)
if args_count not in (2, 3):
continue # pragma: no cover - only methods with 2 or 3 params
if method_args[0] != 'self' or method_args[1] != 'user':
continue # pragma: no cover - only methods with self and user as first args
if len(inspect.getargspec(method).args) == 3:
register.filter('%s%s' % ('pybb_', method_name), partial(method_name, perms))
elif len(inspect.getargspec(method).args) == 2:
register.filter('%s%s' % ('pybb_', method_name), partial_no_param(method_name, perms))
load_perms_filters()


Expand Down

0 comments on commit c60276c

Please sign in to comment.