pip – uninstall package with dependencies

Virtualenvs in python are cheap but from time to time you will install something with pip on your system and when time comes removing all this crap could be difficult. I found this bash snippet that will uninstall package with all dependencies:

for dep in $(pip show python-neutronclient | grep Requires | sed 's/Requires: //g; s/,//g') ; do sudo pip uninstall -y $dep ; done
pip uninstall -y python-neutronclient

Source: http://stackoverflow.com/a/32698209/4828478

Extract password saved in remmina

I had some passwords saved in remmina but like it always happen, I wasn't been able to remember them when needed. Trying to restore them I found that they're encrypted in .remmina directory.

Then I used this script to the decrypt them:

import base64
from Crypto.Cipher import DES3

secret = base64.decodestring('<STRING FROM remmina.prefs>')
password = base64.decodestring('<STRING FROM XXXXXXX.remmina>')

print DES3.new(secret[:24], DES3.MODE_CBC, secret[24:]).decrypt(password)

Source:
http://askubuntu.com/questions/290824/how-to-extract-saved-password-from-remmina

Quickly setup SQL query logging on console in Django

There is need plugin for Django, named django-debug-toolbar but it needs some time to configure. So when I need simple way to debug SQL queries I use small hack. Add to your settings.py:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    }
}

To get this working DEBUG option have to be set to True:

DEBUG = True

After this setup, when you run you app in development mode:

./manage.py runserver

you will see SQL queries in console output.

Source:
https://docs.djangoproject.com/en/1.6/topics/logging/#examples

Instalacja Python’a na Windowsie

Pomimo że Python dużo częściej wykorzystywany jest w środowiskach UNIX’owcy/Linux’owych to znajdzie się kilka fajnych zastosowań dla tego języka na Windowsie. Możliwości na instalację jest kilka, a najprostsza to wykorzystanie instalatora ActiveState. Wersja ta ma w sobie wszystko co potrzebne:

  • rozszerzenia dla API Windows
  • menadżera pakietów PyPM
  • dokumentację

Niestety jakiś czas temu zmieniły się zasady licencjonowania w ActiveState i aktualne wersje dla zastosowań produkcyjnych wymagają zakupu licencji (1000$/rok – aż chce się zacytować z Dnia Świra: czizys k…wa…). Wiem jak lepiej wydać taką kasę więc spróbuję uzyskać podobną funkcjonalność na tym co można pobrać za darmo z sieci.

  • Instalatory Python’a dla Windows można znaleźć tutaj: http://www.python.org/download/releases/
  • Teraz pakiety z obsługą API Windows (wybieramy stosownie do wcześniej pobranej wersji Pythona): http://sourceforge.net/projects/pywin32/files/pywin32/
  • I na koniec setuptools by móc doinstalować dodatkowe moduły. Wybieramy interesującą nas wersję tutaj: https://pypi.python.org/pypi/setuptools/
  • Obecnie jest to 1.1.6 – zgodnie z opisem z tej strony: https://pypi.python.org/pypi/setuptools/1.1.6#windows pobieramy ez_setup.py i uruchamiamy.
  • Na koniec odpalamy CLI i instalujemy inne przydatne nam paczki, np.:
    easy_install couchdb
    easy_install cx-oracle
    • P.S. I tutaj mały kruczek – instalacja cx-Oracle z pomocą easy_install uda się tylko na 32-bitowych Windowsach, na 64-bitowych konieczne jest zainstalowanie Visual Studio Express by możliwe było skompilowanie paczek… (tak mnie też się w tej chwili już odechciewało…)
      Ale na szczęście w przypadku tej paczki da się inaczej, wystarczy pobrać już skompilowaną paczkę ze strony: http://cx-oracle.sourceforge.net dopasowaną do wybranej wcześniej wersji Pythona.
    • P.S. 2. Można się obyć bez tej paczki i wykorzystać pyodbc razem z kontrolerem ODBC z klienta Oracle, ale pyodbc nie obsługuje wywołań procedur ze zmiennymi wiązanymi in/out lub out – a ja akurat tego potrzebowałem, jeśli to nie twój problem to pyodbc będzie prostsze 🙂