Skip to content

Instantly share code, notes, and snippets.

@dchuvardynskyi
dchuvardynskyi / money.html
Created February 16, 2020 21:06
Use custom tag in template
{# load custom tags #}
{% load custom_tags %}
...
{# use our custom tags #}
<p>{{ order.total_cost|money_display }}</p>
...
@dchuvardynskyi
dchuvardynskyi / custom_tags.py
Created February 16, 2020 21:03
Register custom tag with register decorator
from django import template
from utils import money_display
register = template.Library()
@register.filter()
def money_display(value):
return money_display(value)
@dchuvardynskyi
dchuvardynskyi / signals.py
Last active December 7, 2020 16:28
Django Signal decorator Example
from django.dispatch import receiver, Signal
from tasks import notify_advisor
from order.models import Order
# create custom signal by property field
# instance field is reserved by signal
property_changed = Signal(providing_args=["instance", "property"])
@receiver(property_changed, sender=Order)
def notify_advisor(sender, instance, property, **kwargs):
@dchuvardynskyi
dchuvardynskyi / task.py
Created February 16, 2020 19:26
Celery Task Decorator Example
from celery import Celery
celery_app = Celery()
@celery_app.task
def daily_notificator():
# notifications logic here :)
# schedule task
@dchuvardynskyi
dchuvardynskyi / example.py
Created February 16, 2020 14:37
How It work cache property
from views import SomeView
view = SomeView()
view.get_order()
# cache_property save our function call to magic object dict attribute
# location of value view.__dict__['get_order']
# we can get access to this cache, wtih magic method __dict__
view.__dict__['get_order']
# >>> our order
@dchuvardynskyi
dchuvardynskyi / views.py
Last active February 16, 2020 14:31
Cache Property Decorator example
from cached_property import cached_property
class SomeView:
...
@cached_property
def get_order():
order = get_object_or_404(Order, pk=self.self.kwargs['order_id'])
return order
@dchuvardynskyi
dchuvardynskyi / say_whee.py
Created February 14, 2020 21:03
Count Of Calls Decorator example
from decorators import count_calls
@count_calls
def say_whee():
print("Whee!")
# >>> say_whee()
# Call 1 of 'say_whee'
# Whee!
#
@dchuvardynskyi
dchuvardynskyi / decorators.py
Created February 14, 2020 21:01
Count Calls Decorators
import functools
def count_calls(func):
@functools.wraps(func)
def wrapper_count_calls(*args, **kwargs):
wrapper_count_calls.num_calls += 1
print(f"Call {wrapper_count_calls.num_calls} of {func.__name__!r}")
return func(*args, **kwargs)
wrapper_count_calls.num_calls = 0
@dchuvardynskyi
dchuvardynskyi / waste_some_time.py
Created February 14, 2020 20:45
Example of Timer Decorator in Use
from decorators import timer
@timer
def waste_some_time(num_times):
for _ in range(num_times):
sum([i**2 for i in range(10000)])
# >>> waste_some_time(1)
# Finished 'waste_some_time' in 0.0010 secs
@dchuvardynskyi
dchuvardynskyi / decorators.py
Last active February 14, 2020 20:42
Timer Decorator
import functools
import time
def timer(func):
"""Print the runtime of the decorated function"""
@functools.wraps(func)
def wrapper_timer(*args, **kwargs):
start_time = time.perf_counter() # before main function call
value = func(*args, **kwargs)
end_time = time.perf_counter() # after main function call