port [2]
[1] https://github.com/petehunt/PyMySQL
[2] http://mysql-python.blogspot.ca/2012/09/a-brief-history-of-mysqldb.html
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send e
send email to
> > django-users@googlegroups.com
> .
> > To unsubscribe from this group, send email to
> > django-users+unsubscr...@googlegroups.com .
> > For more options, visit this group at
> > http://groups.google.com/group/django-users?hl=en.
>
> --
this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/EXpvuuttJ64J.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, v
should never
deliberately be creating 500 errors. The only responsible thing to do when
a 500 is seen in the logs is to track down the source of it and fix the bug.
--
Regards,
Ian Clelland
>
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the
end email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
--
Regards,
Ian Clelland
--
You received this m
tally, I'm sure): once as the first argument, and again as
a named parameter.
If the argument "_('name')" is supposed to be the field label, then you
should pass it explicitly as that keyword art, like this:
name = forms.CharField(label=_('name'), max_length=1
t;
No, if you have the CSRFViewMiddleware installed, then you don't need this
line at all.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegro
ooglegroups.com');>
> .
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com 'django-users%2bunsubscr...@googlegroups.com');>.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
come back here with some code that you've tried and
hopefully we can find a solution
Ian
> i tried decoding the value as
>
> val.decode('utf-8')
>
> ...this helped to reduce a few encodings but gets stuck for
> the encoding "\xa0"
> Please HELP!
>
jangoproject.com/ticket/16494, and
you can see the changes that were made for 1.4 here:
https://code.djangoproject.com/changeset/16829)
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group,
On Monday, April 2, 2012, Ali Mesdaq wrote:
> I did have UTF-8 in the db before but then when I was inserting(done by a
> script) values in I would get errors. I really want to avoid doing
> conversions before I insert the data so I can maintain the data in the
> exact format as it was seen in.
our INSTALLED_APPS setting contain the apps that should be translated?
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this
t;
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to
> django-users@googlegroups.com 'django-users@googlegroups.com');>
> .
> To unsubscribe from this group, se
t; To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com 'django-users%2bunsubscr...@googlegroups.com');>.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
--
Regards,
Ian Clelland
--
You received this
to upgrade. Django 1.3 is almost a year old,
and is still the current version -- if you can wait a couple of weeks,
you'll see 1.4 released as well.
> With the commas missing, all requests to nonexistent URLs returned a
> 500 error.
>
>
> On Feb 22, 12:31 am, Ian Clelland wrote:
ubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send emai
k that you are going to need some lines that actually update the
'this' and 'customer' object. You would do that like this:
this.number = this.number + 1
or
customer.reference = number
Then, when you save the objects (and just use "customer.save()", the
force_update=True i
7;],
MessierMarathon.objects.filter(messier_number=x['messier_number'],
nominations=x['nominations'])[0].image) for x in highest_counts)
You might be better off writing raw SQL for it, though; you could probably
get it all with one (convoluted) query.
--
Regards,
Ian Clell
filter() rather than get, if you
can't ever assume uniqueness
- Similarly, if you have to update records, use update() rather than save().
It sounds like you want to use aggregate queries on this table anyway, so
you (hopefully) shouldn't run into any issues.
Oh, and don't r
On Monday, December 19, 2011, J. Marc Edwards <
marc.edwa...@nimbisservices.com> wrote:
> I'd like to write a paragraph on my page that describes the {{ }} syntax,
but the template interpreter is interpreting the braces.
I think what you need is the {% templatetag %} tag -- it outputs template
tag
transaction will be
committed to the database, and if the view raises error, the transaction
will be rolled back automatically. In almost every case, this behaviour
will be exactly what you want.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
&
html", RequestContext({"base_template":
base_template...}))
Template: (my_template.html)
{% extends base_template %}
(In a real app, I would use a base class for the view which would set the
base template for every request automatically, or I would do it in a
context proces
On Thu, Dec 8, 2011 at 12:45 PM, wgis wrote:
> Ian Clelland, it worked! Thanks a lot for your perseverance
>
> Tom's secret sauce it's not working, unfortunately =(
> Just (Carrots, Flavour, 3.0)
> I guess since some 'contexts' don't have an associated th
modular.
>
> --
> You received this message because you are subscribed to the Google Groups
"Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.c
modular.
>
> --
> You received this message because you are subscribed to the Google Groups
"Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.c
e WHEREs (not filtering by user or thing), it still
> presents without nulls (or 0.0)
> Is there other way you can see?
> Again, thanks
> On 6 Dez, 21:48, Ian Clelland wrote:
> > On Tue, Dec 6, 2011 at 1:35 PM, Reinout van Rees >wrote:
> >
> > > Ah! Now I get
0) from mydatabase_votecontext left join
mydatabase_vote on (mydatabase_vote.context_id = mydatabase_votecontext.id)
where thing='Carrot' and user='Me'
There still might be a way to do it with the ORM; but you can definitely
use raw sql for this.
--
Regards,
Ian Clelland
--
You received this messa
ango_models
...
GameProfile.objects.get(
django_models.Q(nick=nick) | django_models.Q(user=self.user),
world=self.world,
)
to see if the problem goes away. If it does, it's almost definitely a
redefined name.
--
Regards,
Ian Clelland
--
You
run in a few minutes.
>
>
> Thanks for any suggestions
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from t
;
Yes, yes and yes.
If you have console access, you can also do this:
manage.py changepassword username_goes_here
That will allow you to reset anybody's password; superuser or otherwise.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Grou
u are subscribed to the Google Groups
"Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
http://groups.google.co
ing the tutorial for the development
version. (There used to be a big warning about this at the top of all every
page in the development docs, but it seems to have disappeared.)
Try following the tutorial starting at
https://docs.djangoproject.com/en/1.3/intro/tutorial01/
instead, and see how far you
ttings.DEFAULT_FROM_EMAIL[settings.CONTACT_EMAIL_TO]"
looks like you're trying to use a string to index into another string
variable.
Ian
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post t
on out of CSRF protection, then you
can do that too -- it's not baked into Django that deeply. You will need to
change your settings, and remove the CSRF middleware from
MIDDLEWARE_CLASSES. That will completely remove this feature from your
project. (and, of course, remove all of the security benef
>
> Zak
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr
ated, or you might end up with 70M objects, or anywhere in between.
Again: odd, undocumented, and potentially surprising behaviour, and I'd
recommend explicit over implicit, especially in this case.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed
On Wed, Nov 2, 2011 at 10:46 AM, Tom Evans wrote:
> On Wed, Nov 2, 2011 at 5:30 PM, Ian Clelland wrote:
> > On Wed, Nov 2, 2011 at 8:25 AM, Thomas Guettler wrote:
> >>
> >> # This is my current solution
> >> if get_special_objects().filter(pk=obj.pk).c
# yes, it is special
I believe that in some cases, the exists() query can be optimized to return
faster than a count() aggregation, and I think that the intent of the code
appears more clearly.
Ian
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Goog
g, even though they are rarely
encountered.
320 characters suffices for any valid email address.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@go
;, and you can
see the engine used by all of your tables.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send
))
)) | (
Q(dob_year_max=alive_y2+1) & (
Q(dob_month=1) & (
Q(dob_day=None) |
Q(dob_day__lt=1)
))
))
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To p
f another object, then just use
that!
Try something like
fi = request.user.get_profile().financial_institution
txn = Transaction.objects.extra(
where=['(tpin=%s or teller_no=%s or identifier=%s) AND
financial_institution_id=%s'],
params=[value, str(value), value, fi.id])
--
r render() method is going to compute some
value, probably a list of Entry instances in this case, and then it will
create a new context variable, with the statement;
context[self.related_entries] =
And that is what is going to create the context variable
{{related_entries}}, or {{cheeseburger_h
there isn't an easy solution for
> these kind of queries. These kind of queries are pretty common to perform,
> but how ???
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To view this discussion on th
"Django users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/yYKP0Xoz9XkJ.
>
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@goog
On Wed, Jul 27, 2011 at 9:29 AM, Ian Clelland wrote:
>
>
> On Mon, Jul 25, 2011 at 11:29 AM, Alfredo Alessandrini <
> alfreal...@gmail.com> wrote:
>
>> Hi,
>>
>> I've a model testDB with a foreignkey "country" related to another
>
nct to see
why you might want to be writing
testDB.objects.order_by().values('country').distinct() )
>
> thanks in advance,
>
> Alfredo
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post
th
"manage.py loaddata", or by using fixtures in tests.
If there is code that absolutely has to run when a new object is created,
(or code that needs to run on update, but absolutely cannot run on new
objects before insertion), then you may be better off using a post-save
signal handler, a
the assignment
to the 'settings' variable (if you don't), or change the name of the
variable you assign to (if it was an accident).
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To pos
eived this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more
eived this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more o
If those aren't there, then your browser will
have to guess the document encoding, and might be guessing wrong.
Hopefully that should get you enough visibility on the problem to see what
is happening. If none of that provides any clarity, then try posting those
answers here, and someone mig
ere's any practical difference in performance -- I would
hope that any decent SQL query optimizer should be able to change
select payee.* from payee join person on (payee.person_id = person.id) where
person.id = 26
into
select payee.* from payee where person_id = 26
--
Regards,
Ian Clelland
e the tests without touching the
> actual view logic, so testing what the API receives makes the most
> sense to me.
>
If this is all for a refactoring, then you're probably on the right track
there -- instrument the existing object for testing, rather than
restructuring the view f
here, but it is not used internally by the form machinery.
>
> However, this is looking like a legitimate bug to me.
>
> http://dpaste.com/hold/556603/
>
>
I've updated with a working example, as http://dpaste.com/hold/556805/
--
Regards,
Ian Clelland
--
You received this
t; 3. Break up your API calling code into more testable units to truly
> > isolate your independent code from the API calling code. It'll be much
> > easier to catch problems in the API integration code.
>
> --
> You received this message because you are subscribed to the
JavaScript, so what you're going to have to do is come
up with a sample of what you'd *like* to see as the template output, and
hopefully we can help you with the Django template code to produce that
output.
[Also, it really doesn't help to be posting and reposting the same questi
ieval)
4. If you can get the right data out of the database in the python shell,
then can you save it from there as well? If everything above works, then try
doing this:
> object_from_database.save()
and see if you get the same error. If so, posting a traceback from that
might help pinpoint th
gt; > email = forms.EmailField()
> > > message = forms.CharField()
> > > name = forms.CharField()
> >
> > > #urls.py
> > > urlpatterns = patterns('',
> > > ...
> > > (r'^contact-form/', views.contact)
from django.utils.simplejson import dumps
...
school_list = dumps([school.name for school in city.school_set.all()])
and then add school_list to the context variables that are passed to the
template. Then in the template, you can just use {{ school_list }}, and it
will be a properly
, and its
accompanying META attribute.
Check to see if that's the case, and rename your list() view if it is.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@
tring "META" doesn't even occur in the db package,
so I can't imagine how simply wrapping a QuerySet in a list() call could
trigger an exception like that.
Can you post the rest of the code around this, or at least more of a
traceback, unless that is really all that there is? And
ticle.objects.values('category').annotate(count=models.Count('id'))
? The idea being that you group the objects by category, and then count the
number of distinct ids within each category.
The docs mention that the default ordering can get in the way of this
sometimes,
0.9.7.2), but I don't want to mess
> around with the production environment too much, or risk breaking the
> live sites.
>
If the error is in one of the python core modules, then it may have been
fixed recently; but I haven't seen any reports of failures in tupleobject.c
other th
from django.utils import simplejson as json
...
records = models.Residents.objects.extra( where=[], params=[...])
data = json.dumps(records.values('fname','lname','pt'))
return HttpResponse(data, mimetype='application/json')
records.values
ailMessage, set the headers yourself, and call send() on it.
(Also, 'text/us-ascii' is not a registered MIME type; you probably want to
say something like 'text/plain; charset=us-ascii')
[1]
http://docs.djangoproject.com/en/1.3/topics/email/#the-emailmessage-class
--
Rega
omes back to the confirmation view. If your tokens
are actually random, and large enough (say, 64 bits), then anybody trying to
guess them will be wasting their time.
--
Regards,
Ian Clelland
* By looking at the database IDs, people can gauge how heavily the system is
being used, or if they s
k* into a float; you
should use .quantize() instead.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send e
sts. I believe that Django will issue the redirect anyway, buy the
user agent is *not* supposed to just blindly post the data to the new URL
without some sort of user interaction.
To eliminate this as a possible error source, try putting the trailing "/"
on the URL in the command line:
$
to them to compress it.
>
> When I try to do this:
>
> file.write(zlib.compress(file.read()))
Don't do that -- I'm pretty sure that writing a file that you already have
open for reading will produce undefined results.
(Also, I'd try to stay away from using 'file&
only the one test that you specify will actually be run.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, sen
.filter(title__icontains="test").extra(where='oe_matches(structure.smiles,
"[C;!H0]")')
You could encapsulate the extra() call in a function call that annotates a
QuerySet that you pass to it, but it's 'outside' of the ORM at that point.
--
Regards,
Ian Cl
their parent, without the parent having a
child_set attribute.
I think Mike has the right idea; using a separate 1:many table to avoid
explicit fields on the child model, but, of course, SQL being what it is, it
is still possible to construct a query that joins the tables and
reconstructs the l
SQL like this:
CREATE TABLE "employee_employee" (
"id" serial NOT NULL PRIMARY KEY,
"person_id" integer NOT NULL,
"address_id" integer NOT NULL
)
;
which is probably closer to what you're expecting.
--
Regards,
Ian Clelland
--
You received this
#x27; out of the options dictionary?
def handle(self, *args, **options):
self.host = options.pop('host') # 'host' isn't in options anymore
# do some more stuff
call_command('test', *args, **options)
--
Regards,
Ian Clelland
--
You received this message
ude" %}
...
{% endifnotequal %}
should work.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send ema
ither:
"student_portal\.fields\.ProtectedFileField" -- removing the "^" so
that it can match anywhere within the string, or
"^classcomm\.student_portal\.fields\.ProtectedFileField" -- preserving
the "^", but adding the "classcomm." that South sees
ate_by':
> 10}
Can you not set your info_dict just like that, and then rewrite it like this:
YearArchiveView.as_view(**info_dict),name='blog_archive_year'),
url(r'(?P\d{4})/(?P[a-z]{3})/$',
--
Regards,
Ian Clelland
--
You received this message because you are s
d, but more reusable way to do it would be to write
your own template tag (it's really simple, you can use the CSRF-token
code in django/template/defaulttags.py as a starting point) which
would render whatever markup you need.
--
Regards,
Ian Clelland
--
You received this message because you
nd then test all of the characters in the string, either with
if any(map(char_is_hebrew, lang_string)):
or
if all(map(char_is_hebrew, lang_string)):
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To
user
object is different from saving the profile object. (user.save() just
updates a row in the auth_user table, which doesn't affect the
accounts_userprofile table at all.)
The way I would do it is this:
profile = user.get_profile()
profile.age = 34
profile.save()
Try that, and see if it update
% for obj in my_raw_queryset %}
{{ obj.visible_choice }}
{% endfor %}
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group
rs+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to thi
ername/password)
are never sent in the clear, that your session cookie is never sent in
the clear, and that essentially your whole site is protected by SSL,
such that a request coming in over plain HTTP, even if properly
authenticated, is still rejected. Once you have this in place, the
secure flag o
HTTP
-- but the site is already HTTPS-only, so there shouldn't be any
form-handling code listening on that port.
Does this threat model correspond to what you're thinking? If so, I
don't see away around the CSRF protection (at least, not one that
involves the victim's browser)
or not.
(SSL wouldn't even help; he could construct an https:// link just as
easily.) That's not how it's supposed to be set up, though.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to
ough a ModelForm, or are you saving the model
manually?
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from thi
URL Validator.
Without some more info, this is all speculation anyway, though.
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe f
MyFieldsDontWork
>
> Does anybody know why?
Try changing the last line of your introspection rule, from
> ["^core/.models/.lib.thumbs.ImageWithThumbsField",])
to something like
["^lib.thumbs.ImageWithThumbsField",])
It looks like South is not recognizing your field type, as it is using
a different
se you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
>
ice from it should get you 120
bits of pure random goodness.
--
Regards,
Ian Clelland
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group,
On Wed, Jan 12, 2011 at 6:23 AM, Russell Keith-Magee
wrote:
> On Thu, Jan 6, 2011 at 5:29 AM, Ian Clelland wrote:
>> Hi,
>>
>> I've been using Simon Willison's QuerySetManager[1] pattern for a
>> while now, and since upgrading to Django 1.2.4, it has been br
his kind of query.
It is not valid SQL to order by a column that is not in the result set.
MySQL allows you to do that, but that is a MySQL-specific feature.
PostgreSQL, certainly, does not allow this, and there is no real
advantage gained (aside from a slightly smaller response) by excluding
the or
Hi,
I've been using Simon Willison's QuerySetManager[1] pattern for a
while now, and since upgrading to Django 1.2.4, it has been breaking
when I try to call a method on a RelatedManager constructed from it.
There was a change in r14389 (14390 in the 1.2.X branch) which causes
this code to break
On Jul 14, 8:23 am, Benjamin Kreeger
wrote:
> I was using PostgreSQL at first, but then I found information about
> reading data across databases only with MySQL, so I'm using MySQL for
> the time being.
>
> Now, I don't have a database set for P1 yet because it's just
> displaying reStructured
On Jul 13, 10:03 am, itodd wrote:
> Greetings,
>
> I'm trying to use a SelectMultiple with a set of static choices. I'm
> experiencing odd behavior when the number of choices exceeds 10. For
> example, take the following Model and ModelForm:
>
> class Project(models.Model):
> RECIPIENTS = (
On Jul 13, 8:48 am, Frédéric Hébert wrote:
> When I declare the outter view after the inner in urls.py she's never
> been called. It's the inner that's got it.
> (She's called when I reverse the order of declaration, eg the outter
> first)
>
> I've pasted the code at dpaste :http://dpaste.com/
On Jul 10, 12:37 pm, Ben Kreeger wrote:
> How do I go about accessing that data from P2's database? Do I need to
> create a model in P1 and bind it to a certain table in P2's database?
> If that's the case, how do I specify access credentials for that
> database? Is that in settings.py?
If the t
I'm trying to construct a query which combines two filters on a
related model, and I'm having no luck. Hopefully somebody can see what
I'm doing wrong, and point me in the right direction.
I'd like to be able to specify two exclude criteria on a related
model, and have both criteria apply to the
t least one space between the value and the "/" character.
Something like this:
would be valid XHTML. If you don't care at all about XML conformance,
you could also just get rid of the "/" and have
which is valid HTML, but not XHTML.
Regards,
Ian Clelland
<[EMAIL P
1 - 100 of 131 matches
Mail list logo