Created
July 26, 2024 19:13
-
-
Save lazarofl/6e0f5a9021cd55c3e11cc245530111e4 to your computer and use it in GitHub Desktop.
Python function to get object size
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from django.http import HttpRequest | |
from waffle.models import Flag, Switch | |
from waffle import flag_is_active, switch_is_active | |
from django.contrib.auth.models import User | |
def get_size(obj, seen=None): | |
"""Recursively find the size of an object.""" | |
size = sys.getsizeof(obj) | |
if seen is None: | |
seen = set() | |
obj_id = id(obj) | |
if obj_id in seen: | |
return 0 | |
seen.add(obj_id) | |
if isinstance(obj, dict): | |
size += sum([get_size(v, seen) for v in obj.values()]) | |
size += sum([get_size(k, seen) for k in obj.keys()]) | |
elif hasattr(obj, '__dict__'): | |
size += get_size(obj.__dict__, seen) | |
elif hasattr(obj, '__iter__') and not isinstance(obj, (str, bytes, bytearray)): | |
size += sum([get_size(i, seen) for i in obj]) | |
return size | |
# Create a sample user | |
user = User(username='test_user') | |
user.save() | |
# Create sample Waffle switch | |
switch = Switch.objects.create(name='test_switch', active=True) | |
# Create sample Waffle flag | |
flag = Flag.objects.create(name='test_flag', everyone=True) | |
# Create a HttpRequest object and associate the user with it | |
request = HttpRequest() | |
request.user = user | |
# Check the flag and switch status to ensure they are cached | |
is_flag_active = flag_is_active(request, 'test_flag') | |
is_switch_active = switch_is_active('test_switch') | |
# Measure the size of the flag and switch objects | |
flag_size = get_size(flag) | |
switch_size = get_size(switch) | |
# Output the sizes | |
print(f"Size of Waffle Flag object: {flag_size} bytes") | |
print(f"Size of Waffle Switch object: {switch_size} bytes") | |
# Clean up the created entries | |
user.delete() | |
flag.delete() | |
switch.delete() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment