рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрдЯрди рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ:
рдпрд╣ рдореМрди, рдЧреИрд░-рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ "ennobled" рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрдЯрди рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
рдирдордХ рдХреНрдпрд╛ рд╣реИ, рдЖрдк рдкреВрдЫреЗрдВ? рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпреЗ рдирд┐рдпрдо рдПрдХ рд╕рд╛рде рдмрдЯрди рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдХрд╛рд░рдг рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдмрдЯрди рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
from rules import _and_, _or_ # The rule def can_user_add_comment(user, topic): return _and_( lambda: (user, тАЬ тАЭ), lambda: (user.is_status_active(), тАЬ тАЭ), lambda: _or_( lambda: (user.is_in_admin_group(), тАЬ тАЭ), lambda: _and_( lambda: (topic.is_status_open(), тАЬ тАЭ), lambda: (user.has_enough_karma_to_add_comment(), тАЬ тАЭ), lambda: (user.is_below_comments_per_minute_quota(), тАЬ , тАЭ), ), ), )
рд▓реЙрдЬрд┐рдХрд▓ рдСрдкрд░реЗрд╢рди рдХреНрд▓рд╛рд╕реЗрд╕ рд▓реИрдореНрдмрдбрд╛ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдСрдкрд░реЗрдВрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА рдЧрдгрдирд╛ рдПрдХ "рдЫреЛрдЯреА рдпреЛрдЬрдирд╛" рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
_and_
рдкрд╣рд▓реЗ
False
рдХреЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ,
_or_
- рдкрд╣рд▓реЗ
True
рд╕реЗ рдкрд╣рд▓реЗред рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдВрдб рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди (рдЯреБрдкрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡) рдФрд░ рд╕рдВрджреЗрд╢ (рдЯреБрдкрд▓ рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡) рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЗ
False
рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдирд┐рдпрдо (рдСрдкрд░реЗрдВрдб) рдХреЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
<% user = get_authenticated_user() granted = can_user_add_comment(user, current_topic) %> <input type=тАЭbuttonтАЭ value=тАЭ тАЭ title=тАЭ${тАЭ тАЭ if granted else unicode(granted)}тАЭ ${тАЬdisabledтАЭ if not granted else тАЬтАЭ} />
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмреВрд▓рд┐рдпрди рд╕рдВрджрд░реНрдн рдореЗрдВ
can_user_add_comment()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА
granted
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдЯрди рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдХрд╛рд░рдг рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдмреВрд▓рд┐рдпрди рд╕рдВрджрд░реНрдн рдореЗрдВ
False
рд╣реИред рдмрдЯрди рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдЗрд╕рдХреЗ
title
рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рдорд╛рдЙрд╕ рд╕реЗ рдШреБрдорд╛рддреЗ рд╣реИрдВ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдирд┐рдпрдо рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо
False
рдирд┐рдХрд▓рд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реНрдг рд╡реГрдХреНрд╖ рдЬреИрд╕реА рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдкреВрд░реЗ рд╢рд╛рд╕рди рдХреА рддрд╛рд░реНрдХрд┐рдХ рд╢рд╛рдЦрд╛рдПрдВ
False
рд▓реМрдЯреАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджрд┐рдП рдЧрдП
granted.build_report()
рдпрд╛ рджрд┐рдП рдЧрдП
granted.build_html_report()
рдХреЙрд▓ рдХрд░реЗрдВред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ
_and_
,
_or_
,
_not_
рдФрд░
_true_
рд╕рдВрдЪрд╛рд▓рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдЦреЛрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдХреБрдЫ рднреА рд╕рдорд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдиреА рдкрдбрд╝реАред рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдХрд╛рдлреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдХрд╛рд░реНрдпред