~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wl_utils.py

  • Committer: Holger Rapp
  • Date: 2009-02-19 15:31:42 UTC
  • Revision ID: sirver@h566336-20090219153142-dc8xuabldnw5t395
Initial commit of new widelands homepage

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
def get_real_ip(request):
3
 
    """Returns the real user IP, even if behind a proxy."""
4
 
    for key in ('HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'):
5
 
        if key in request.META:
6
 
            return request.META[key]
7
 
    # No match -> Return a fictional IP to have the model fields not empty
8
 
    return '192.168.255.255'
9
 
 
10
 
 
11
 
# AutoOneToOneField
12
 
# =================
13
 
# Initial implemenation details about AutoOneToOneField:
14
 
#   http://softwaremaniacs.org/blog/2007/03/07/auto-one-to-one-field/
15
 
#
16
 
 
17
 
 
18
 
from django.db.models.fields.related_descriptors import ReverseOneToOneDescriptor
19
 
 
20
 
from django.db.models import OneToOneField
21
 
from django.db import models
22
 
 
23
 
 
24
 
class AutoReverseOneToOneDescriptor(ReverseOneToOneDescriptor):
25
 
    """The descriptor that handles the object creation for an
26
 
    AutoOneToOneField."""
27
 
 
28
 
    def __get__(self, instance, instance_type=None):
29
 
        model = getattr(self.related, 'related_model', self.related.model)
30
 
 
31
 
        try:
32
 
            return (super(AutoReverseOneToOneDescriptor, self)
33
 
                    .__get__(instance, instance_type))
34
 
        except model.DoesNotExist:
35
 
            obj = model(**{self.related.field.name: instance})
36
 
 
37
 
            obj.save()
38
 
 
39
 
            # Don't return obj directly, otherwise it won't be added
40
 
            # to Django's cache, and the first 2 calls to obj.relobj
41
 
            # will return 2 different in-memory objects
42
 
            return (super(AutoReverseOneToOneDescriptor, self)
43
 
                    .__get__(instance, instance_type))
44
 
 
45
 
 
46
 
class AutoOneToOneField(OneToOneField):
47
 
    """OneToOneField creates dependent object on first request from parent
48
 
    object if dependent oject has not created yet."""
49
 
 
50
 
    def contribute_to_related_class(self, cls, related):
51
 
        setattr(cls, related.get_accessor_name(),
52
 
                AutoReverseOneToOneDescriptor(related))