Skip to content

Instantly share code, notes, and snippets.

View ninapavlich's full-sized avatar

Nina Pavlich ninapavlich

View GitHub Profile
@ninapavlich
ninapavlich / sort.js
Last active April 19, 2024 09:02
Deep Sort Javascript Object
function sortObject(object) {
//Thanks > http://whitfin.io/sorting-object-recursively-node-jsjavascript/
if (!object) {
return object;
}
const isArray = object instanceof Array;
var sortedObj = {};
if (isArray) {
sortedObj = object.map((item) => sortObject(item));
@ninapavlich
ninapavlich / email_sender.py
Last active January 24, 2024 08:33
Convert HTML emails with python
from bs4 import BeautifulSoup
import os
import re
import requests
import urlparse
import smtplib
from smtplib import SMTP
from smtplib import SMTP_SSL
from smtplib import SMTPAuthenticationError
@ninapavlich
ninapavlich / super_file_models.py
Last active October 31, 2023 20:12
Custom Django File field that provides meta data (md5, mime type, content type, size) to sibling fields, creates thumbnails in sibling fields, can add watermarks to thumbnails, and can enforce size and various validations.
import hashlib
import io
import logging
import mimetypes
import os
import re
import tempfile
from xml.dom import minidom
from PIL import Image
@ninapavlich
ninapavlich / admin.py
Created December 21, 2017 02:24
Cache foreign key lookups in django admin line forms
class CachedChoiceFieldOptionsMixin(object):
"""
This class speeds up performance of inline foreign-key pickers so we don't have to re-query the options for each item in the list
"""
cached_choice_fields = []
def formfield_for_dbfield(self, db_field, **kwargs):
request = kwargs['request']
formfield = super(CachedChoiceFieldOptionsMixin,
@ninapavlich
ninapavlich / steps.txt
Last active August 26, 2022 21:51
Downgrade to older salt-minion version
#1. Remove the current version and clear app cache
sudo apt-get remove salt-minion
sudo apt-get clean
apt-get autoremove
#2. Create script to view all PPAs:
#Save as script as listppa.sh:
#! /bin/sh
# Script to get all the PPA installed on a system
@ninapavlich
ninapavlich / admin.py
Last active July 26, 2022 04:17
Custom configuration for django-autocomplete-light plugin
from django import forms
from django.contrib import admin
from dal import autocomplete, forward
class AdminAutocompleteFormMixin(forms.ModelForm):
class Media:
js = ('admin/autocomplete/forward.js',
'admin/autocomplete/select_admin_autocomplete.js')
# Try to get the profile path
PROFILE_PATH=''
getProfilePath(){
if [[ "$SHELL" == *"zsh"* ]]; then
PROFILE_PATH=$HOME/'.zshrc'
elif [[ "$SHELL" == *"bash"* ]]; then
if [ -f $HOME/.bashrc ]; then
PROFILE_PATH=$HOME/'.bashrc'
elif [ -f $HOME/.profile ]; then
PROFILE_PATH=$HOME/'.profile'
@ninapavlich
ninapavlich / woeisme.ino
Created April 28, 2018 22:56
First few bars of Woe Is Me (World's Smallest Violin) from Spongebob Square Pants
/*
First few bars of Woe Is Me (World's Smallest Violin) from Spongebob Square Pants
Requires pitches.h
nina@ninalp.com
*/
#include "pitches.h"
const int speakerPinMelody = 26;
@ninapavlich
ninapavlich / format.js
Created March 25, 2020 22:37
Multiple date format parser regex
var possibleDateFormats = [
'Updated on 3/25, 9:35PM',
'Updated on 03/25, 9:35PM',
'Updated 3/25/2020, 9:35PM',
'Updated 3/25/2020 at 9:35PM',
'Updated 3/25/2020 at 9:35 p.m.',
'Updated 3/25 21:35',
'updated on 03/25/20 21:35 PM'
]
/* Last Updated */
{
"version": "0.6",
"reqId": "0",
"status": "ok",
"sig": "2121529001",
"table": {
"cols": [
{
"id": "A",