geekchick77: (Default)
[personal profile] geekchick77
I work on a lot of different coding projects, nearly all Python and often but not always Django. I am a huge fan of virtualenvwrapper, but I always find myself editing the activate script to export project-specific variables. It's not hard to do, but it's tedious and definitely repetitive. I also notice there are certain predictable ways I break the build:
  • Forgetting to add a package to requirements
  • Forgetting to run the linter
  • (rarely, but it does happen) Forgetting to run unit tests
I've been on an automation kick lately, and I decided to see what I could do about these issues.

I make use of piplint to check requirements. Note that the pypi version doesn't work on Python 3, but I have an updated fork installable with:

 

pip install -e git://github.com/jessamynsmith/piplint.git@6ce1540c3d5dda20c234ba3e49416f54d74cc81e#egg=piplint


As it turns out, virtualenvwrapper is highly customizable, and all I had to do was edit mkvirtualenv in WORKON_HOME to have it modify my activate scripts. While I was in there, I decided to make a skeleton pre-commit hook for the project:

#!/bin/bash
# This hook is run after a new virtualenv is created and before it is activated.

# Automatically set django settings for the virtualenv
echo "export DJANGO_SETTINGS_MODULE=$1.settings.development" >> "$1/bin/activate"

# Create a pre-commit hook script that can be copied over as desired
echo "#!/bin/sh
set -e
. $WORKON_HOME/$1/bin/activate
piplint -x requirements/*
flake8
jshint $1/static/js
python manage.py test $1
" >> "$1/bin/pre-commit"

Now every new virtualenv comes with Django settings prepopulated. If it's not a Django project, that unused environment variable isn't going to hurt anything.

You can add more environment variables later by editing ~/.virtualenvs/<VIRTUAL_ENV_NAME>/bin/activate and adding "export <ENV_VAR>=<VALUE>" entries to the end of the file.

I don't automatically move that pre-commit hook because there is no guarantee I have anywhere to put it. Sometimes I make the virtualenv before I initialized a git repo. However, the hard work has been done so once I make a project, I can simply copy over the hook. Note that the git hook must be made executable or it will be ignored.

(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

Profile

geekchick77: (Default)
Jessamyn Smith

December 2022

S M T W T F S
    123
4567 8910
11121314151617
18192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 6th, 2025 12:53 am
Powered by Dreamwidth Studios