<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>default_list.py</filename>
    </added>
    <added>
      <filename>functions.py</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -83,14 +83,14 @@ and/or INSTANT_MESSENGERS lists to your settings:
             'id': 'facebook',
             'name': 'Facebook',
             'url': 'http://www.facebook.com/profile.php?id=%s',
-            'itentifier': 'User ID',
+            'identifier': 'User ID',
             'icon': 'facebook.png',
         },
         {
             'id': 'myspace',
             'name': 'MySpace',
             'url': 'http://www.myspace.com/%s',
-            'itentifier': 'Username',
+            'identifier': 'Username',
             'icon': 'myspace.png',
         },
     ]</diff>
      <filename>README.markdown</filename>
    </modified>
    <modified>
      <diff>@@ -1,33 +0,0 @@
-# Profile options can be overridden by project settings
-try:
-    from settings import SOCIAL_NETWORKS
-except ImportError:
-    from fatty_lists import SOCIAL_NETWORKS
-try:
-    from settings import INSTANT_MESSENGERS
-except ImportError:
-    from fatty_lists import INSTANT_MESSENGERS
-
-
-class ProfileManager:
-    &quot;&quot;&quot; Handle raw data for lists of profiles.&quot;&quot;&quot;
-    data = {}
-
-    def _get_choices(self):
-        &quot;&quot;&quot; List of choices for profile select fields. &quot;&quot;&quot;
-        return [(props['id'], props['name']) for props in self.data]
-    choices = property(_get_choices)
-
-
-class SocialNetworkManager(ProfileManager):
-
-    data = SOCIAL_NETWORKS
-
-sn_manager = SocialNetworkManager()
-
-
-class InstantMessengerManager(ProfileManager):
-
-    data = INSTANT_MESSENGERS
-
-im_manager = InstantMessengerManager()
\ No newline at end of file</diff>
      <filename>__init__.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,22 @@
 from django.contrib import admin
-from elsewhere import models
+
+from elsewhere.models import *
 
 class ProfileAdmin(admin.ModelAdmin):
     raw_id_fields = ['user']
 
 class SocialNetworkProfileAdmin(ProfileAdmin):
-    list_display = ('user', 'network_id', 'username', 'date_added')
+    list_display = ('user', 'network', 'username') #, 'date_added')
 
 class InstantMessengerProfileAdmin(ProfileAdmin):
-    list_display = ('user', 'messenger_id', 'username', 'date_added')
+    list_display = ('user', 'network', 'username') #, 'date_added')
 
 class WebsiteProfileAdmin(ProfileAdmin):
-    list_display = ('user', 'name', 'url', 'date_added')
+    list_display = ('user', 'name', 'url') #, 'date_added')
+
+## TODO Not sure why I can't grab date_added from the parent Profile model, need to figure this out.
 
-admin.site.register(models.SocialNetworkProfile, SocialNetworkProfileAdmin)
-admin.site.register(models.WebsiteProfile, WebsiteProfileAdmin)
-admin.site.register(models.InstantMessengerProfile, InstantMessengerProfileAdmin)
\ No newline at end of file
+admin.site.register(Network)
+admin.site.register(SocialNetworkProfile, SocialNetworkProfileAdmin)
+admin.site.register(WebsiteProfile, WebsiteProfileAdmin)
+admin.site.register(InstantMessengerProfile, InstantMessengerProfileAdmin)
\ No newline at end of file</diff>
      <filename>admin.py</filename>
    </modified>
    <modified>
      <diff>@@ -2,41 +2,61 @@ from datetime import datetime
 
 from django import forms
 from django.db import models
+from django.core.cache import cache
 from django.contrib.auth.models import User
 from django.utils.translation import ugettext_lazy as _
 from django.core.urlresolvers import reverse
 from django.contrib import admin
 
-from elsewhere import sn_manager, im_manager
-
 GOOGLE_PROFILE_URL = 'http://www.google.com/s2/favicons?domain_url=%s'
 
+class Network(models.Model):
+    &quot;&quot;&quot; Model for storing networks. &quot;&quot;&quot;
+
+    name = models.CharField(max_length=100)
+    url = models.URLField()
+    identifier = models.CharField(max_length=100)
+    icon = models.CharField(max_length=100, blank=True)
+
+    class Meta:
+        abstract = True
+
+    def __unicode__(self):
+        return self.name
+
+## TODO the full SocialNetwork and InstantMessenger lists should probably be cached.
+
+class SocialNetwork(Network):
+    class Meta:
+        verbose_name_plural = 'social networks'
+
+class InstantMessenger(Network):
+    class Meta:
+        verbose_name_plural = 'instant messanger networks'
 
-class Profile:
-    &quot;&quot;&quot; Base class for converting raw profile data to objects. &quot;&quot;&quot;
+class Profile(models.Model):
+    &quot;&quot;&quot; Common profile functions. &quot;&quot;&quot;
 
-    data_manager = None
+    date_added = models.DateTimeField(_('date added'), auto_now_add=True)
+    date_verified = models.DateTimeField(_('date verified'), default=datetime.now)
+    is_verified = models.BooleanField(default=False)
 
-    def _get_data_item(self, profile_id):
-        # Find profile data for this profile id
-        for network in self.data_manager.data:
-            if network['id'] == profile_id:
-                return network
-        return None
+    class Meta:
+        abstract = True
 
     def _get_name(self):
         # Profile display name
-        return self.data_item['name']
+        return self.network.name
     name = property(_get_name)
 
     def _get_url(self):
         # Profile URL with username
-        return self.data_item['url'] % self.username
+        return self.network.url
     url = property(_get_url)
     
     def _get_icon_name(self):
         # Icon name
-        return self.data_item['icon']
+        return self.network.icon
     icon_name = property(_get_icon_name)
 
     def _get_icon(self):
@@ -47,65 +67,40 @@ class Profile:
     icon = property(_get_icon)
 
 
-class SocialNetworkProfile(models.Model, Profile):
-
-    data_manager = sn_manager
-
+class SocialNetworkProfile(Profile):
     user = models.ForeignKey(User, db_index=True, related_name='social_network_profiles')
-    network_id = models.CharField(max_length=16, choices=data_manager.choices, db_index=True)
+    network = models.ForeignKey(SocialNetwork, db_index=True)
     username = models.CharField(max_length=64)
-    date_added = models.DateTimeField(_('date added'), auto_now_add=True)
-    date_verified = models.DateTimeField(_('date verified'), default=datetime.now)
-    is_verified = models.BooleanField(default=False)
     
     def __unicode__(self):
         return self.network_id
 
-    def get_data_item(self):
-        return self._get_data_item(self.network_id)
-    data_item = property(get_data_item)
-
-
 class SocialNetworkForm(forms.ModelForm):
 
     class Meta:
         model = SocialNetworkProfile
-        fields = ('network_id', 'username')
-
-
-class InstantMessengerProfile(models.Model, Profile):
+        fields = ('network', 'username')
 
-    data_manager = im_manager
 
+class InstantMessengerProfile(Profile):
     user = models.ForeignKey(User, db_index=True, related_name='instant_messenger_profiles')
-    messenger_id = models.CharField(max_length=16, choices=data_manager.choices, db_index=True)
+    network = models.ForeignKey(InstantMessenger, db_index=True)
     username = models.CharField(max_length=64)
-    date_added = models.DateTimeField(_('date added'), auto_now_add=True)
-    date_verified = models.DateTimeField(_('date verified'), default=datetime.now)
-    is_verified = models.BooleanField(default=False)
 
     def __unicode__(self):
         return self.username
 
-    def get_data_item(self):
-        return self._get_data_item(self.messenger_id)
-    data_item = property(get_data_item)
-
-
 class InstantMessengerForm(forms.ModelForm):
 
     class Meta:
         model = InstantMessengerProfile
-        fields = ('messenger_id', 'username')
+        fields = ('network', 'username')
 
 
 class WebsiteProfile(models.Model):
     user = models.ForeignKey(User, db_index=True, related_name='website_profiles')
     name = models.CharField(max_length=64)
     url = models.URLField(verify_exists=True)
-    date_added = models.DateTimeField(_('date added'), auto_now_add=True)
-    date_verified = models.DateTimeField(_('date verified'), default=datetime.now)
-    is_verified = models.BooleanField(default=False)
 
     def __unicode__(self):
         return self.url</diff>
      <filename>models.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,10 @@
-from django.conf.urls.defaults import *
-from django.contrib import admin
 import settings
 import os
 
-CUR_DIR = os.path.dirname(__file__)
-IMG_PATH = 'img/'
-IMG_DIR = os.path.join(CUR_DIR, &quot;img&quot;)
+from django.conf.urls.defaults import *
+from django.contrib import admin
+
+from elsewhere.functions import fill_db
 
 admin.autodiscover()
 
@@ -14,6 +13,15 @@ urlpatterns = patterns('elsewhere.views',
 )
 
 if settings.DEBUG:
+
+    CUR_DIR = os.path.dirname(__file__)
+    IMG_PATH = 'img/'
+    IMG_DIR = os.path.join(CUR_DIR, &quot;img&quot;)
+
     urlpatterns += patterns('django.views',
         url(r'^%s(?P&lt;path&gt;.*)' % IMG_PATH, 'static.serve', {'document_root': IMG_DIR}, name='elsewhere_img')
-    )
\ No newline at end of file
+    )
+
+# fill the database if it hasn't been filled already
+print &quot;filling DB&quot;
+fill_db()
\ No newline at end of file</diff>
      <filename>urls.py</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,6 @@ from elsewhere.models import *
 
 @login_required
 def example(request):
-
     if request.method == 'POST':
 
         new_data = request.POST.copy()</diff>
      <filename>views.py</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>fatty_lists.py</filename>
    </removed>
    <removed>
      <filename>img/default.png</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>aaa2918cd2e9b0c8c88626e36ea6d6b75536b26c</id>
    </parent>
  </parents>
  <author>
    <name>Chris Drackett</name>
    <email>chris@chrisdrackett.com</email>
  </author>
  <url>http://github.com/leah/django-elsewhere/commit/575e24d6d211c69ee42d3f8e82af6783ae04689f</url>
  <id>575e24d6d211c69ee42d3f8e82af6783ae04689f</id>
  <committed-date>2009-03-19T15:50:41-07:00</committed-date>
  <authored-date>2009-03-19T15:50:41-07:00</authored-date>
  <message>moved networks into database (caching is needed, but not yet finished.)
Various clean up.
TODO's added.</message>
  <tree>284272e6772590038a2f7693aa33dc2394ff4be4</tree>
  <committer>
    <name>Chris Drackett</name>
    <email>chris@chrisdrackett.com</email>
  </committer>
</commit>
