Skip to content

Instantly share code, notes, and snippets.

View baxeico's full-sized avatar

Augusto Destrero baxeico

View GitHub Profile
@baxeico
baxeico / forms.py
Last active August 29, 2015 14:06
User profile ModelForm with a custom group field
from django import forms
from django.contrib.auth.models import User, Group
class UserProfileForm(forms.ModelForm):
group = forms.ModelChoiceField(queryset=Group.objects.all(),
required=True)
class Meta:
model = User
fields = ['first_name', 'last_name', 'email', 'group']
@baxeico
baxeico / views.py
Last active August 29, 2015 14:06
Find and fix a django "memleak"
import objgraph
import sys
import logging
from django.http import HttpResponse
from .models import FirstModel
logger = logging.getLogger(__name__)
@baxeico
baxeico / views.py
Last active August 29, 2015 14:07
A huge "memleak" in a simple Django view
from django.http import HttpResponse
from .models import FirstModel
# this view will make crazy use of the RAM ;)
def my_view(request):
# this queryset contains about 100k records
# each of them has many ForeignKeys to other models
huge_queryset = FirstModel.objects.all()
@baxeico
baxeico / views.py
Created September 30, 2014 16:17
Fixing a memleak in a Django view
from django.http import HttpResponse
from .models import FirstModel
def my_view(request):
# this queryset contains about 100k records
# each of them has many ForeignKeys to other models
huge_queryset = FirstModel.objects.all().iterator()
f = open('dumb.dump', 'w')
@baxeico
baxeico / Code.gs
Created February 9, 2015 15:07
Google App Script to geocode a list of addresses in a Spreadsheet
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var cells = range.getValues();
var latitudes = [];
var longitudes = [];
for (var i = 0; i < cells.length; i++) {
angular.module('canvas_share', ['ionic', 'ngCordova'])
.controller('CanvasShareCtrl', function($scope, $cordovaSocialSharing, $q) {
var buildImage = function() {
var deferred = $q.defer();
// create the canvas
var canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 120;
var context = canvas.getContext('2d');
// draw a rectangular white frame for our content
@baxeico
baxeico / excel_models.py
Last active November 9, 2017 18:11
Django custom command to write model fields on an Excel file (e.g. for documentation purposes)
# coding=utf-8
from __future__ import unicode_literals
import logging
from django.core.management.base import BaseCommand, CommandError
from django.apps import apps
from xlsxwriter.workbook import Workbook
logger = logging.getLogger(__name__)
@baxeico
baxeico / queryset_iterator.py
Last active February 9, 2018 09:45
queryset_iterator, a function to iterate over huge Django querysets without using too much memory
import gc
def queryset_iterator(qs, batchsize = 500, gc_collect = True):
iterator = qs.values_list('pk', flat=True).order_by('pk').distinct().iterator()
eof = False
while not eof:
primary_key_buffer = []
try:
while len(primary_key_buffer) < batchsize:
primary_key_buffer.append(iterator.next())
@baxeico
baxeico / toggl_timesheet.py
Last active June 3, 2019 14:47
How to build a pretty Excel timesheet using Toggl API and Python. See https://www.guguweb.com/2014/03/13/build-excel-timesheet-toggl-api-python/
#!/usr/bin/python
import requests
from xlsxwriter import Workbook
import sys
from datetime import date, timedelta
import argparse
from math import floor, ceil
def toExcelTime(time, round_minutes=0, round_func=round):
# time is in milliseconds
@baxeico
baxeico / allow_cors_mixin.py
Last active August 6, 2020 13:40
Simple mixin to add CORS headers in a Django View
from django.http import HttpResponse
class AllowCORSMixin(object):
def add_access_control_headers(self, response):
response["Access-Control-Allow-Origin"] = "*"
response["Access-Control-Allow-Methods"] = "GET, OPTIONS"
response["Access-Control-Max-Age"] = "1000"
response["Access-Control-Allow-Headers"] = "X-Requested-With, Content-Type"