x27;/myapp/default/dataThreshPage');
}, 5000);
loading...
png loading
but still no luck.
Any suggestions for how to get these plots to refresh?
Thank you,
G
I have also encountered a similar problem. I have a View file called
status.load that I could not save changes to. By renaming it to
status.html, I could save changes as usual. It seems like some issue
with file types that are not recognized.
On Nov 14, 3:45 pm, Audra Rudys wrote:
> I just downlo
Hello again,
Is anyone else using matplotlib to generate dynamic plots for use with
web2py. Any pointers on a better way to do it that will allow dynamic
refreshing?
Thanks for any help,
G
On Nov 14, 3:42 pm, G wrote:
> Hello,
> I am using web2py to monitor and control an instrument
. How would you implement something like
that? The code I posted below seems like it should work for this sort
of real time monitoring, but as I mentioned, I cannot get the images
to dynamically update.
I appreciate any suggestions anyone has.
Thanks,
G
On Nov 16, 10:17 am, mdipierro wrote:
> I j
there must
be a better way with ajax/jquery load and setInterval.
Thanks for the pointer,
G
On Nov 16, 11:35 pm, dederocks wrote:
> Hello,
>
> I guess this could be solved by implementing the APE (ajax-push)
> technology mentionned the other day by
> Michele:http://www.ape-projec
short) timeout that is causing this somewhere? It would have to be
very short as the page loads only take a fraction of a second. I am
just testing with the basic welcome and admin apps. I have also
forwarded port 443 and find the same behavior there.
Any ideas?
Thanks,
G
requests .
>
> On Tue, Nov 23, 2010 at 2:43 AM, G wrote:
> > Hello,
> > I have a strange problem. My server is behind a fire wall so I must
> > use ssh tunnels to access web2py pages running on it. This works great
> > with the default webserver included with we
I ran into a problem with setting up SSL too which turned out to be
caused by an ssl.conf file that was overriding the web2py.conf
settings. I had similar messages in error.log, but as the [warn]
indicates, they do not seem to be fatal errors. The errors I found
were more like File does not exist.
mory leak since when using pymysql, everything
is in python.
Thanks,
G
es('commit')
and sometimes here:
File "/home/dl/trunkw2p/web2py/gluon/main.py", line 570, in wsgibase
BaseAdapter.close_all_instances('rollback')
Thanks,
G
://www.pageofguh.org/random/668
And here is one of Massimo's examples of using matplotlib with web2py:
http://www.web2py.com/appliances/default/show/72
I appreciate any suggestions.
Thanks,
G
SQLLITE database might be a natural option. Any
opinions? Are there any examples of doing something like this? I
suppose it's vaguely similar to a photo album application, except the
photos are dynamically created and deleted after use.
Thanks,
G
On Jun 28, 4:50 pm, G wrote:
> Hello,
&
y.com/book/static/book_images_png/plugin_wiki_crud.png
Thanks,
G
t.vars.autoEQ == 'yes':
print "autoEQ"
obs.autoEQ()
return dict(form=form)
I have a second similar component. I include them both in the larger
page as:
{{=LOAD('default','inits.load')}}
{{=LOAD('default','posControl.load')}}
Thank you for any suggestions on how to make this work.
G
t's going on?
Thanks,
G
On Aug 3, 9:13 pm, pbreit wrote:
> I think with ajax=False you're going to run into problems because the end
> result is both of the forms on one page of HTML and the controller might get
> confused on which to handle.
>
> But I would think ajax=True
web page. Most of the controls make sense to
implement as buttons.
Does anyone have a suggestion of a better way to organize such an
application to play better with web2py etc.?
Thanks again,
G
On Aug 3, 10:43 pm, Anthony wrote:
> Forms in ajax components and non-ajax components with ajax_trap=T
nto trying it and don't know
if it would work.
Thanks,
G
On Aug 4, 2:23 am, pbreit wrote:
> Coupla other
> approaches:http://www.johnnycode.com/blog/2010/04/08/jquery-form-serialize-doesn...http://stackoverflow.com/questions/4007942/jquery-serializearray-does...
>
> I'm sur
clause for each form to do the required action, and then
returns all the forms to the view to be properly formatted. It seems a
bit clumsy, but also seems to be working.
Thanks again,
G
On Aug 4, 4:36 pm, Massimo Di Pierro
wrote:
> if you do not need a view and your component only displays
agine several
people like me are in the opposite situation.
Thanks for the help and the great work,
G
On Aug 5, 3:34 am, Massimo Di Pierro
wrote:
> I know. They were just regular good practice suggestions. Sorry. Will
> look for a solution.
>
> On Aug 4, 6:44 pm, G wrote:
>
>
d.
I appreciate any ideas.
Thanks,
G
On Aug 8, 7:28 am, Massimo Di Pierro
wrote:
> ## preambole
>
> I have been working on porting django-celery to
> web2py-celery.http://code.google.com/p/web2py-celery
> There are a few issues to resolve and I am working on it.
>
> Yet I found
the DB enforce
a rule that requires a workaround to enable multiple task submissions.
Thanks,
G
Hi,
What is the right way to do the following type of query with DAL,
avoiding the for loop?
ids = db(db.task_run.task_scheduled ==
db.task_scheduled.id)\
(db.task_scheduled.group_name == 'status')\
(db.task_run.start_time
+status_expiration
01')) AND
(((task_scheduled.assigned_worker_name = '') OR
(task_scheduled.assigned_worker_name IS NULL)) OR
(task_scheduled.assigned_worker_name = 'crabby#237cf3f0-89e7-4db5-
b514-56db27a700d5'))) ORDER BY task_scheduled.next_run_time LIMIT 1
OFFSET 0));
I'm pretty sure this is coming from the massively complex query in
assign_next_task.
Thanks,
G
sql issue, we'll deal with it as an exception and
> find a workaround.
>
> On 13 Ago, 04:56, G wrote:
>
> > Hello,
> > I just tried to use scheduler.py with MySQL instead of SQLite and ran
> > into this error:
>
> > NotSupportedError: (1235, "This ve
(query) to not reflect the true
state of the database?
Thanks,
G
db.commit() line in the side1 loop is
removed, it will loop forever even though the database is actually
updated by side2.
This work around works, but I'd like to understand what's going on.
Thanks,
G
dbtest.py ===
from gluon import *
import time
db = DAL('mysql:
, I also tried running the same command directly with MySQL
Query Broswer except without the extra semicolon so the end was:
LIMIT 1 OFFSET 0));
This resulted in an error number 1093: "You can't specify target table
'task_scheduled' for update in FROM clause"
So it looks l
What you say makes sense in cases where the databse is being modified
(update/insert/delete, etc). But in this case, the query in the loop
of side1() does not change the database state, it's simply looking for
a change in the database, so I wouldn't think it would require a
db.commit.
On Aug 14, 2
Hello,
I've noticed that the cleanup task in scheduler.py is not working for
me. Looking into it, it appears that the handling of time intervals in
MySQL through DAL is not being done properly.
This code
db(db.task_scheduled.status.belongs(statuses)) \
(db.task_scheduled.last_run_time+60
Sorry to repost but I was surprised there were no responses. It seems
like time interval arithmetic must be fairly common for web2py
applications. Has no one else run into a similar problem?
Thanks,
G
On Aug 23, 8:27 am, G wrote:
> Hello,
> I've noticed that the cleanup task in sche
he like? I appreciate any advice on
the matter.
The code I'm using in the view to refresh the data is listed below
Thank you for the help,
G
View: --- default/index.html
{{=LOAD('default','calc3.load')}}
jQuery(window).load(function()
I should also mention I'm open to other suggestions to alleviate this
problem. The end goal is to display information (text or image) then
request an update, and when it's ready, display the new text/
information.
G
On Aug 24, 11:39 am, G wrote:
> Hi,
> First a little background
g in web2py. How can I figure
out what's causing the problem? The traceback is unhelpful as the line
in question
d = new Date();
is a line of JavaScript from the view. This problem seems to come and
go, and I can't track it down.
Thanks,
G
Sorry, I meant to mention I'm running from the trunk. I ended up
tracing the problem to an exception in my code, but I still don't
understand why it was presented as such. The exception was in a
controller function that was being accessed as a .load component if
that make any difference.
I didn't specify ajax (didn't need it), so I think it defaults to
ajax=False.
On Aug 24, 2:49 pm, Massimo Di Pierro
wrote:
> was LOAD(, ajax=True) or LOAD(ajax=False)?
>
> On Aug 24, 4:46 pm, G wrote:
>
> > Sorry, I meant to mention I'm running from the trunk. I
, which I hope would not impose a transaction lock.
G
On Aug 24, 3:20 pm, ron_m wrote:
> You also need to consider the database type used by the application for the
> model. The SQLite database has a transaction lock which will cause the
> application to look like it is single threaded if the
:18 pm, Michele Comitini
wrote:
> Try session.forget() and see what happens
>
> mic
>
> 2011/8/25 G :
>
> > Thank you for the suggestion. I made a test application that used no
> > database accesses (no auth and randomly generated data). It showed the
> > sam
sions).
>
> Note, to immediately unlock the session file, you need to do
> session.forget(response), not just session.forget().
>
> Anthony
>
> On Thursday, August 25, 2011 2:14:54 PM UTC-4, G wrote:
>
> > I tried session.forget() but found that forms submitted by ajax i
Hi!
I'm deploying a test aplication on GAE and almost everything woks
fine, although I can't access appadmin.
When i try to access through https the application fails and i can see
the following error in the dashboard logs:
In FILE: /base/data/home/apps/professorsecaib/1.339995859017462670/
appl
I'm seeing this behaviour as well (on GAE live but not SDK). In my
case sessions are in memcache not db. Can't pinpoint when it started
but noticed it earlier this week. Haven't updated web2py in quite some
time (I've been running 1.65.11).
On Mar 10, 4:47 pm, Richard wrote:
> I forgot to mentio
rovide an API to store
> sessions in memcache. If you have implemented it perhaps we should
> include it in web2py so I can help debug it if there is a problem.
>
> On Mar 11, 12:04 pm, Ted G wrote:
>
>
>
> > I'm seeing this behaviour as well (on GAE live but not SDK)
> When you hit the URL 'appname/default/index':
>
> > * It is the responsibility of the function index() in the controller
> > file default.py to return an item called 'some_db_records'
> > * The function bar() in controller foo.py is not called
>
>
Massimo,
With respect to the new file upload remembering the file name. Are
there accompanying methods to get and set the filename after upload of
the file?
In my example, my app is running on GAE, therefore uploaded files are
being stored in the DB. I require the ability for the user to see a
l
tion that replaces
> form.vars.filefieldname.filename before the file is actually loaded.
> You can also define a custom download action.
>
> There is no exposed API to do this since the current mechanism is
> quite complex and I do would not encourage bypassing it.
>
> Massim
I think the "patch" may have been the change I suggested in this
thread dealing with file uploads using forms within a jDiv.
http://groups.google.com/group/web2py/browse_frm/thread/34533d763a5e856f/c6cb190b051a03bc?lnk=gst&q=jdiv+file+upload#c6cb190b051a03bc
Basically the change was to utilize j
Is the work being done with jPolite meant to replace the work that was
being done with jDiv?
I've been using a modified version of the older jDiv code in my app.
Should I be looking instead to use jPolite?
Ted
On May 19, 12:06 pm, mdipierro wrote:
> I turnedjpoliteinto a web2py app.
>
> http
I have an application in which I need to have the view rendered by a
controller be specified using a parameter to that controller.
I believe I could do the following based on what I've dug up in this
forum:
def index():
try:
response.view='default/' + request.args[0] # eg.
'indexview2.ht
That would be amazing. This will help to enable a very important part
of my app's functionality.
Thank You.
On Jun 18, 8:31 pm, mdipierro wrote:
> not easy to do now, but easy to add. I will add this to trunk
> tomorrow.
>
> Massimo
>
> On Jun 18, 4:30 pm, Ted G wro
Hi Massimo,
I've been watching trunk. Have you had any luck with this?
Ted
On Jun 18, 8:31 pm, mdipierro wrote:
> not easy to do now, but easy to add. I will add this to trunk
> tomorrow.
>
> Massimo
>
> On Jun 18, 4:30 pm, Ted G wrote:
>
>
>
> > I have
we want.
>
> > > Note that response.stream already works this way so it would be
> > > perhaps more consequential, too.
>
> > > On Jun 22, 9:03 pm, mdipierro wrote:
>
> > > > I should be able to di it tomorrow if no major obstacles.
>
> > &
I'm not sure of the best way to approach this, any suggestions?
I am inserting records into a table that contains an upload field for
an image (which is stored in the table as a blob). The user will be
able to later change this image via a form, and I wish to expose the
field for download, thus t
FYI,
After I upgraded to Snow Leopard web2py appeared to run fine (I am
running it under the GAE SDK).
However, I was running with PIL installed for image manipulation and
this broke. After several unsuccessful attempts to install PIL within
Python 2.6 on Snow Leopard (if anyone comes up with a
ncoded_filename = base64.b16encode(filename).lower()
newfilename = '%s.%s.%s.%s' % \
(tablename, fieldname, uuid_key, encoded_filename)
newfilename = newfilename[:122]+'.'+extension
return newfilename
Ted
On Aug 30, 11:59 pm, Ted G wrote:
> I'm
In the Google App Engine Launcher Preferences you can set the python
path to 2.5. I had to do this as well after upgrading to Snow Leopard
as PIL would not work Snow Leopard Python2.6
On Sep 1, 1:13 am, cpt1002 wrote:
> Hello,
>
> So I upgraded Mac OS X to 10.6 and I get some errors when I try
Nice!
One 'role model' you might want to study is Obie Fernandez' "The Rails
Way", which goes deeply into each element of that complex framework...
On Apr 1, 11:28 am, TheDude wrote:
> (This isn't an April Fool's Joke)
>
> So, I've been writing a book for Web2Py, but recently came towards a
>
OK, let's look at how the most successful web app framework, Ruby on
Rails did this, so we can learn a little about what works:
1. DHH and 37signals developed Rails using Ruby basically as an in-
house tool to simplify repetitive tasks discovered as a project-
tracking and communication applicati
I am learning all the new auth, crud, and mail tools now, and I have
one question:
Does web2py use the 'default' controller as an implicit global
controller across a single application, or is that even possible?
Here is my situation. When I create my:
## default.py controller
def user():
re
This is similar to my recent post:
http://groups.google.com/group/web2py/browse_thread/thread/b406cafc55fde168#
It seems people like the Rails-type 'application' global controller,
but after thinking a little, I am working out how to get what I want
'the Python way'!
Right now, I am storing fun
Tudo bem!
On Apr 11, 11:35 am, Álvaro Justen [Turicas]
wrote:
> Para quem fala Português, entre agora mesmo na lista de usuários
> brasileiros do web2py. :-)
> Participe e chame seus amigos!
>
> ---
>
> I encourage other users to create local lists in yours coutries, like
> web2py-brazil-users.
I'm wondering if anyone has tips on where I should start in trying to
track down performance problems running my web2py application on GAE.
Initially I created an application using only the api's supplied by
GAE. This app was very fast in terms of response times.
I've since recreated and updated
Thank you for the tips. I'll work through these and determine if I can
find a specific root cause of the performance problem.
I've been testing on a particular page of the application that lists a
number of items along with thumbnail images for those items. The
thumbnails are images placed into a
I'm having a problem using upload fields within forms that are used
within jDiv containers. Testing edit() below by itself provides a form
that I can successfully select and update an image. When I encapsulate
the same edit() within a jDiv, all fields update with the exception of
the upload field,
I've been trying out the new jDiv container, which works well with the
exception of forms containing upload fields. I thought I would start a
new thread for this, as my previous post (included below), seemed out
of place in the old thread.
Note that in the example code below, I've also tried repl
n JS library used to handle jDiv. I will investigate
> > but it will not be solved overnight.
>
> > Massimo
>
> > On May 1, 2:21 pm, Ted G wrote:
> > > I've been trying out the new jDiv container, which works well with the
> > > exception of forms conta
jDiv.
>
> There's probably a better way to do this, but this works for now.
>
> -wj
>
> On Fri, May 1, 2009 at 4:52 PM, Ted G wrote:
>
> > On a related note:
>
> > What is the best way to trigger a Javascript function upon a jDiv load
> > or form subm
y for submitting forms? Incorporating this plugin
would also open the door to other form behavior customizations on the
client side such as progress meters, etc, which would also be very
useful.
Ted
On May 1, 4:29 pm, Ted G wrote:
> That is how I've resorted to for now as well (with the exception
code for HoursjDiv i
> have it trigger FormjDiv to open it up again with a new form (like click the
> first top button) and also to refresh contents in Last20itemsjDiv.
>
> There's probably a better way to do this, but this works for now.
>
> -wj
>
> On Fri, May 1, 2009
pm, mdipierro wrote:
> Can you provide an example? I am not sure this cannot be done already.
>
> On May 4, 4:28 pm, Ted G wrote:
>
> > A bit more follow up on this topic of taking action after an ajax load
> > call on the jDiv.
>
> > Right now the jDivLoad func
});
command=xhr.getResponseHeader('web2py-jDiv-Commands');
if(command) eval(command);
if(onLoadCmd) eval(onLoadCmd);
$(target).attr('status','loaded').trigger('loaded',callback);
I've used the same technique you describe in order to create a better
form layout. In my case I did not have as many fields, but I did have
a few text areas, which created a "vertically challenged" form.
Same as your approach, I create a form using SQLFORM as per normal and
pass it to the view wi
If you do a search on jDiv you will find a few recent threads
discussing this topic (related to the example link provided by
Massimo). I've been heading down this road myself, creating a site
where site pages are simply container based layouts containing re-
useable "applets". The pattern I've fou
With the RSS Examples and 90 second Blog example in FAQ, latest
Twitter examples and GAE hosting (or existing web2py server), it would
seem that all the pieces are there to put together a basic free hosted
web2py blog with the ability to post entries (title + summary) to
twitter and provide an RSS
An FYI for anyone experimenting with jDivLoad ...
If you deploy a web2py app using jDivLoad to Google App Engine (this
does not happen in the SDK), you may receive 411 errors when those
jDiv's attempt to load while using Firefox (this issue is not
necessarily isolated to just GAE).
The jDivLoad
Howdy all,
In web2py I've noticed a number of methods in gluon/tools.py that
utilize client input to determine site flow:
if next == DEFAULT:
next = request.get_vars._next \
or request.post_vars._next \
or self.settings.login_next
and subsequent
if next
> I do not do believe this kind of phishing can be avoided.
>
> We can have a flag that checks whether _next is on a different domain
> but it would not prevent this type of scam, just this particular
> implementation.
>
> Massimo
>
> On Nov 23, 10:42 am, Richard G wrote:
&g
As I understand Web2py passes this off to the database adapter that is
in use (likely psycopg2 in this case).
Psycopg2 accepts arguments in a couple different forms, using the '%s'
as you identify below, as well as named references with '%(name)s'.
There are a few caveats when using query paramet
I have been enjoying the learning process with web2py, honestly I have
little knowledge of html, css and especially ajax.
I am not far off having a functional website building on the
scaffolding application, however I have a few questions please:
How do I move static files (e.g *.png) into folder
Thank you both for your replies.
I have got the favicon bit working. I read a bit online and exported
the inkscape .svg to .png using export bitmap, rather than Save As
png. It now looks perfect.
> I'm not sure moving files via admin is possible -- you're probably better
> off just doing that via
Cheers Anthony, Ill get started on the menu's. Not far from being able
to deploy my first Web2Py website!!!
I have been happily designing my business website for a while now.
Web2Py is very easy to use and has been a brilliant way to learn html,
css and a bit of java.
I am getting close to wanting to deploy the first version of m site
but honestly, after reading the deployment section of the web2py book
Thank you for the advice, but as I already have a years domain and
hosting with godaddy I was hoping for some specific advice regarding
setup using that service.
godaddy support suggest that I simply upload all the files from my
web2py application but I asssume this will not give me admin interface
Thank you all for your help so far.
I will try your suggestions. I can get SSH access to my host.
It runs Python 2.4.3
and Linux distro is quoted as: Linux
n1nlftpg005.shr.prod.ams1.secureserver.net 2.6.18-194.26.1.el5PAE #1
SMP Tue Nov 9 13:34:42 EST 2010 i686 i686 i386 GNU/Linux
On Jan 30, 4:46
I am new to Python (leaving php) and new to web2py.
I have tried to learn django, but the break of backwards compatibily made I
leave it quickly,
because was difficult to find expert people with the new versions and
probably more
backward compatibility breakings, so web2py seems a very good opti
I'm new to Python and I'm trying to install web2py in a virtualenv. I'm
running a 32 bit python 2.7.3 installation on a 64 bit Windows 7.
>From what I read, this should be the process:
- install virtualenv (done)
- create the virtualenv (done)
- install pywin32 in that env (I've read
I'm trying to obtain a set of rows whose ID values belongs in rows'
fields of another table.
Here's the code:
# Construct a query to fetch all the mootid's from the group
mootGroup =
db(db.moot_groups.gid==groupid)._select(db.moot_groups.mootid)
# Gets moots only if the moot ID exists in the Grou
what I just said (read the code, didn't
> test it).
>
> On 21 פברואר, 08:06, "Peter G." wrote:
>
>
>
>
>
>
>
> > I'm trying to obtain a set of rows whose ID values belongs in rows'
> > fields of another table.
>
> > Here&
BrendanC: Thanks for those resources! I ended up gutting that
functionality for now, but those are some great read :)! The non-
relational database backend requires some "unlearning" of SQL database
practices... New challenge for a new environment.
I also have not gotten a local shell working with
The full stack trace is as follows:
Traceback (most recent call last):
File "/home/pyg/Development/capstonemoot/web2py/gluon/
restricted.py", line 204, in restricted
exec ccode in environment
File "/home/pyg/Development/capstonemoot/web2py/applications/init/
controllers/default.py", line 7
Thanks Massimo, I'll update to trunk in that case.
How would one obtain the URL to a image blob stored on GAE's
datastore? A lot of the threads I've looked at were all for generating
an download output for views, but I need this for the Controller since
I'm returning this as a JSON element.
For example, the auth_user table has a field 'avatar' and
@Anthony & BrendanC: Thank you both for your code snippets! I've got
it working now :). It's loading the image from a blob field in GAE's
DB.
@howesc: Can you possibly expand on how you modified your code to work
with the blob store? That's something I'm also interested at looking
into (would save
I'm using the auth.settengs.extra_fields to add an extra upload field for
the user to upload an avatar, how can I add an IS_IMAGE validator to the
upload field so that the user can't upload random files?
Also, how would I add an IS_ALPHANUMERIC to the built in First name and
Last name form fiel
a file is
uploaded, check for IS_IMAGE(), otherwise ignore."?
On Thursday, March 22, 2012 3:38:01 PM UTC-7, Anthony wrote:
>
> On Thursday, March 22, 2012 6:09:25 PM UTC-4, Peter G. wrote:
>>
>> I'm using the auth.settengs.extra_fields to add an extra upload field for
Thank you so much! That worked like a charm :). I'm guessing this type of
construct is valid for other validators as well?
On Tuesday, March 27, 2012 5:57:28 PM UTC-7, Anthony wrote:
>
> Try
>
> IS_EMPTY_OR(IS_IMAGE())
>
>
> Anthony
>
> On Tuesday, March 27, 2012
I had a clean install of Ubuntu 11.04 + Python 2.7.1 running web2py
and it was working fine. Then I installed Python 2.5.6 by source,
tried visiting http://127.0.0.1:8000/ and I get the following errors
via Terminal:
DEBUG_c: Exception (,
AttributeError("'NoneType' object has no attribute
'PARSE_DE
A clean install of Ubuntu, web2py, and/or Python? I did start with a
clean install of both web2py and Python (compiled from source). The
reason I'm "downgrading" (so to speak) to 2.5 is because I'm making an
app that I wish to run on Google App Engine, and GAE runs Python
2.5.2, so I'd like to deve
I did start with a clean install of both web2py and Python 2.5. The
reason why I'm "downgrading" (so to speak) to 2.5 is because I'm
planning on running my web app on Google App Engine, and GAE runs on
Python 2.5.2.
I know that Ubuntu 11.04 comes pre-installed with 2.6 and 2.7, so I
had to manuall
Thanks for the advice, pbreit and Christopher! I will give a fresh
Ubuntu 10.04 install a spin :)!
You could also use jquery syntax:
$('#item' :input:visible:enabled:first).focus()
Or if you don't have much info on the page and just want the first visible
field to have focus you could do:
$("input:visible:enabled:first").focus()
More info on the jquery selectors is at:
http://docs.jquery.com
I have run into the above as well.
Likely the issue is that on update you are not returning all values that
the 'compute' field is based upon.
Ex:
db.define_table('test',
Field('val1', 'double'),
Field('val2', 'double'),
Field('result',
compute = lambda r: r['val1'] + r['val2'])
)
1 - 100 of 224 matches
Mail list logo