--- layout: post status: publish published: true title: Rockaby refactoring and abstraction wordpress_id: 450 wordpress_url: http://www.martineve.com/?p=450 date: !binary |- MjAxMC0xMi0wMiAwOTo1Mzo0NiArMDEwMA== date_gmt: !binary |- MjAxMC0xMi0wMiAwOTo1Mzo0NiArMDEwMA== categories: - Literature - Technology - Django tags: - software - rockaby - django comments: [] ---

Rockaby Project

I've used the snow so far this morning to start some pythonic refactoring of Rockaby.

As I mentioned in my project announcement, Rockaby started life several years ago and it was a quick morning's worth of hacking about in .NET to build something that I thought nobody would ever see. As such, the code was hideous and messy. For the first code-drop, I simply transliterated the .NET code into Python/Django. This made for some grim view manipulation:

{% highlight python %} # build an index of where this character occurs CharacterPages = [] Parts = [] # create a list of lists (to store page numbers) for counter in range(0,len(pynchon.parts.Parts.FormattedPartNames)): Parts.append([]) for episode in episodes: if character_name in episode.characters: Parts[episode.part - 1].append(episode.episode) epChars = episode.characters.replace('\r\n', '\n').split('\n') for s in epChars: epCharsSplit = s.split('->') if epCharsSplit[0].lower() == character_name.lower(): splitPages = epCharsSplit[1].split(',') for pageNum in splitPages: CharacterPages.append(pageNum) ret = '' for counter in range(0,len(pynchon.parts.Parts.FormattedPartNames)): part = Parts[counter] part.sort() if (len(part) > 0): ret = ret + '

' + pynchon.parts.Parts.FormattedPartNames[counter + 1] + ':' for i in part: ret = ret + ' [' + str(i) + '],' ret = ret[0:len(ret) - 1] ret = ret + '

' {% endhighlight %}

Anyway, the latest commit replaces that mess with the following view:

{% highlight python %} episodes_used = {} presentation = [] for charsepinfo in charsinepisodes: if not charsepinfo.episode.part in episodes_used: episodes_used[charsepinfo.episode.part] = [] episodes_used[charsepinfo.episode.part].append(charsepinfo.episode) {% endhighlight %}

The models have now also been updated in the move towards abstraction from its original Pynchon-specific context. See the latest commit for details.