From thomas.prebble at gmail.com Tue Jan 2 10:55:43 2018 From: thomas.prebble at gmail.com (Thomas Prebble) Date: Wed, 3 Jan 2018 00:55:43 +0900 Subject: [Flask] Announcing Flask-Validates Message-ID: Hello, I would like to announce a new Flask extension I've been working on called Flask-Validates. I would be really interested in hearing any feedback people might have, regardless of whether it's positive. Flask-Validates binds forms to views using view decorators. Forms can either be form classes (WTForms or Flask-WTF derived classes) or just fields supplied as keyword arguments. The extension then takes care of building a form class (in the case of kwargs) and exposes it as current_form (a la current_app). It also sets the HTTP 400 status code when form validation fails (something that I feel is important, although often neglected). For those curious to see it in action please see the Github repo and documentation . In terms of future development I'm considering adding support for augmentation of view docstrings so tools like Sphinx can output form parameters. I would definitely be receptive to other suggestions or pull requests from people who find the extension useful. Thank you for your time. Kind regards, Thomas Prebble -------------- next part -------------- An HTML attachment was scrubbed... URL: From fvillarroel at yahoo.com Tue Jan 9 08:38:40 2018 From: fvillarroel at yahoo.com (FERNANDO VILLARROEL) Date: Tue, 9 Jan 2018 13:38:40 +0000 (UTC) Subject: [Flask] Announcing Flask-Validates In-Reply-To: References: Message-ID: <2051357899.2544038.1515505120503@mail.yahoo.com> +1 On Tuesday, January 2, 2018 12:56 PM, Thomas Prebble wrote: Hello, I would like to announce a new Flask extension I've been working on called Flask-Validates. I would be really interested in hearing any feedback people might have, regardless of whether it's positive. Flask-Validates binds forms to views using view decorators. Forms can either be form classes (WTForms or Flask-WTF derived classes) or just fields supplied as keyword arguments. The extension then takes care of building a form class (in the case of kwargs) and exposes it as current_form (a la current_app). It also sets the HTTP 400 status code when form validation fails (something that I feel is important, although often neglected). For those curious to see it in action please see the Github repo and documentation. In terms of future development I'm considering adding support for augmentation of view docstrings so tools like Sphinx can output form parameters. I would definitely be receptive to other suggestions or pull requests from people who find the extension useful. Thank you for your time. Kind regards,Thomas Prebble_______________________________________________ Flask mailing list Flask at python.org https://mail.python.org/mailman/listinfo/flask -------------- next part -------------- An HTML attachment was scrubbed... URL: From skip.montanaro at gmail.com Fri Jan 12 08:25:49 2018 From: skip.montanaro at gmail.com (Skip Montanaro) Date: Fri, 12 Jan 2018 07:25:49 -0600 Subject: [Flask] Flask + uwsgi + TimedRotatingFileHandler = hilarity Message-ID: I'm trying to use the TimedRotatingFileHandler in a Flask+uwsgi app. I pass "when='midnight'" to the class instantiation: handler = logging.handlers.TimedRotatingFileHandler("/path/to/logfile.log", when='midnight') That starts off okay. When I come in the next morning, I find /path/to/logfile.log /path/to/logfile.log-2018-10-11 which, at first glance seems fine. Unfortunately, both files are open and receiving disjoint subsets of the log messages. My uwsgi options file contains processes = 2 logger = python:/path/to/logfile.log the latter to catch the actual uwsgi log messages. That doesn't seem to be the culprit though, as I only set that up yesterday, and was getting the same behavior before. The messages which are distributed across the files are my application log messages, which leads me to believe I'm going to need to do something different to set up logfile rotation. Any suggestions about how to accomplish this? Thanks, Skip Montanaro From wright8191 at gmail.com Fri Jan 12 10:43:36 2018 From: wright8191 at gmail.com (Harrison Wright) Date: Fri, 12 Jan 2018 09:43:36 -0600 Subject: [Flask] Flask + uwsgi + TimedRotatingFileHandler = hilarity In-Reply-To: References: Message-ID: If you are using linux, I have always just used logrotate ( https://linux.die.net/man/8/logrotate) instead of having the app server handle this. On Fri, Jan 12, 2018 at 7:25 AM, Skip Montanaro wrote: > I'm trying to use the TimedRotatingFileHandler in a Flask+uwsgi app. I > pass "when='midnight'" to the class instantiation: > > handler = logging.handlers.TimedRotatingFileHandler("/ > path/to/logfile.log", > when='midnight') > > That starts off okay. When I come in the next morning, I find > > /path/to/logfile.log > /path/to/logfile.log-2018-10-11 > > which, at first glance seems fine. Unfortunately, both files are open > and receiving disjoint subsets of the log messages. > > My uwsgi options file contains > > processes = 2 > logger = python:/path/to/logfile.log > > the latter to catch the actual uwsgi log messages. That doesn't seem > to be the culprit though, as I only set that up yesterday, and was > getting the same behavior before. The messages which are distributed > across the files are my application log messages, which leads me to > believe I'm going to need to do something different to set up logfile > rotation. > > Any suggestions about how to accomplish this? > > Thanks, > > Skip Montanaro > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask > -------------- next part -------------- An HTML attachment was scrubbed... URL: From skip.montanaro at gmail.com Fri Jan 12 11:09:48 2018 From: skip.montanaro at gmail.com (Skip Montanaro) Date: Fri, 12 Jan 2018 10:09:48 -0600 Subject: [Flask] Flask + uwsgi + TimedRotatingFileHandler = hilarity In-Reply-To: References: Message-ID: > If you are using linux, I have always just used logrotate > (https://linux.die.net/man/8/logrotate) instead of having the app server > handle this. Thanks, yes, I am. I'll take a look. Skip From frank at generalsoftwareinc.com Mon Jan 22 18:41:45 2018 From: frank at generalsoftwareinc.com (Frank Abel Cancio Bello) Date: Mon, 22 Jan 2018 18:41:45 -0500 Subject: [Flask] Guide for a developer that want contribute with code to Flask/Jinja2/Werkzeug Message-ID: Hi, I would like to contribute with code to Flask/Jinja2/Werkzeug. Could anyone give me a hint from where to start, apart from the GitHub issues of the projects? Would be nice to know what the project's developers have in mind or wish to develop. Are new tests welcome? Thanks Frank -------------- next part -------------- An HTML attachment was scrubbed... URL: From drew at androiddrew.com Tue Jan 23 11:44:47 2018 From: drew at androiddrew.com (Drew Bednar) Date: Tue, 23 Jan 2018 11:44:47 -0500 (EST) Subject: [Flask] License Requirements for ports Message-ID: <2074725065.513991.1516725888028@privateemail.com> Hi Flask, Could someone please confirm that I must use the BSD 3-clause License for a port of flask_mail to another framework, since that package uses said license? Do I have to cite that this is a port, and if so where do I state that? Regards, Drew -------------- next part -------------- An HTML attachment was scrubbed... URL: From markus at unterwaditzer.net Tue Jan 23 12:20:41 2018 From: markus at unterwaditzer.net (Markus Unterwaditzer) Date: Tue, 23 Jan 2018 18:20:41 +0100 Subject: [Flask] License Requirements for ports In-Reply-To: <2074725065.513991.1516725888028@privateemail.com> References: <2074725065.513991.1516725888028@privateemail.com> Message-ID: <20180123172038.p5a4c6n75g6nqk2z@unterwaditzer.net> No, the BSD license is not viral at all. The properties you describe are found in the GPL-family of licenses. To be clear, derivatives of a 3-clause BSD licensed program can be any license, or none. You have to keep the copyright notice of the original author though. I don't think this mailing list is the correct forum since licensing is a topic independent of Flask. -- Markus On Tue, Jan 23, 2018 at 11:44:47AM -0500, Drew Bednar wrote: > Hi Flask, > > Could someone please confirm that I must use the BSD 3-clause License for a port of flask_mail to another framework, since that package uses said license? Do I have to cite that this is a port, and if so where do I state that? > > > Regards, > > Drew > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask From austinmredding at gmail.com Wed Jan 24 14:22:59 2018 From: austinmredding at gmail.com (Austin Redding) Date: Wed, 24 Jan 2018 13:22:59 -0600 Subject: [Flask] Flask App with PhosphorJS, Bokeh Message-ID: I'm trying to launch Flask app with Bokeh and PhosphorJS. I have successfully employed Bokeh into my Flask app, but I'm stuck on implementing PhosphorJS. The PhosphorJS is written in Typescript, which is where I believe the problem lies. In my index.html file, am I able to use url_for(typescript.ts)? Is Flask able to handle this? Or, is the reason I'm unable to see my PhosphorJS widgets because the browser cannot compile/translate the typescript? Any suggestions for how I might need to go about implementing my PhosphorJS widgets? Thanks in advance. -Austin -------------- next part -------------- An HTML attachment was scrubbed... URL: From davidism at gmail.com Thu Jan 25 15:01:48 2018 From: davidism at gmail.com (David Lord) Date: Thu, 25 Jan 2018 12:01:48 -0800 Subject: [Flask] Guide for a developer that want contribute with code to Flask/Jinja2/Werkzeug In-Reply-To: References: Message-ID: Thanks for reaching out, it's great that you want to contribute! Here's an overview for you and anyone else who would like to get involved. Flask itself doesn't have many open bugs right now. Most of the issues are in Werkzeug or Jinja. Click could definitely use a lot of attention as well. ItsDangerous and MarkupSafe are not as active but issues still pop up. The maintainers, myself included, are all volunteering our free time, so anything that cuts down on the work we have to do to address each issue is helpful and appreciated. Here are some ways to help: - Triage bug reports. Is there enough information to reproduce the issue? Can you reproduce it? Report back if not. Use a debugger to trace where it's happening. A lot of the time I can fix something relatively easily, but actually tracking it down in the first place is the time consuming part. - Submit patches. Did you track down why an issue was happening? Create a PR for it! Even if you miss something, it gives us a way to review and run tests. I'm more interested in patches for bugs than implementing feature requests, although if something interests you, go for it. Just be aware that we might not merge a new feature just because it was submitted. - Make sure we match the spec. Bugs about incorrect behavior are a priority. Understanding the WSGI PEPs and the multitude of HTTP RFCs is a daunting task (I still have to look up things constantly) - Write tests. Running `tox` will generate a coverage report. Write tests to cover functions or branches that aren't yet tested. - Update documentation. There are a lot of issues that can be solved by better documentation. A strategy is to look at the most linked or voted questions on Stack Overflow and identify if the issues are because the documentation isn't clear enough. If you're writing whole examples that feel too specific though, that's probably not a good fit for documentation. - Answer high-quality questions on Stack Overflow. Thorough answers that explain what the problem was and what the fix is, or what a better approach is, are helpful, lasting artifacts that others can find. I want to create milestones for the next release of each project, but I've only had time to do that for Flask. Unfortunately I can't really point at specific issues to tackle first. The maintainers usually work first on what affects them, so if you have anything you're interested in or a project that ran into something, start with that. Thank you! On Mon, Jan 22, 2018 at 3:41 PM, Frank Abel Cancio Bello < frank at generalsoftwareinc.com> wrote: > Hi, > > I would like to contribute with code to Flask/Jinja2/Werkzeug. > > Could anyone give me a hint from where to start, apart from the > GitHub issues of the projects? > > Would be nice to know what the project's developers have in mind or wish > to develop. > > Are new tests welcome? > > Thanks > Frank > > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From frank at generalsoftwareinc.com Thu Jan 25 17:30:52 2018 From: frank at generalsoftwareinc.com (Frank Abel Cancio Bello) Date: Thu, 25 Jan 2018 17:30:52 -0500 Subject: [Flask] Guide for a developer that want contribute with code to Flask/Jinja2/Werkzeug In-Reply-To: References: Message-ID: Thank you David for this amazing answer! This is exactly what I was looking for. Best Regards Frank On Thu, Jan 25, 2018 at 3:01 PM, David Lord wrote: > Thanks for reaching out, it's great that you want to contribute! Here's an > overview for you and anyone else who would like to get involved. > > Flask itself doesn't have many open bugs right now. Most of the issues are > in Werkzeug or Jinja. Click could definitely use a lot of attention as > well. ItsDangerous and MarkupSafe are not as active but issues still pop up. > > The maintainers, myself included, are all volunteering our free time, so > anything that cuts down on the work we have to do to address each issue is > helpful and appreciated. Here are some ways to help: > > - Triage bug reports. Is there enough information to reproduce the issue? > Can you reproduce it? Report back if not. Use a debugger to trace where > it's happening. A lot of the time I can fix something relatively easily, > but actually tracking it down in the first place is the time consuming part. > > - Submit patches. Did you track down why an issue was happening? Create a > PR for it! Even if you miss something, it gives us a way to review and run > tests. I'm more interested in patches for bugs than implementing feature > requests, although if something interests you, go for it. Just be aware > that we might not merge a new feature just because it was submitted. > > - Make sure we match the spec. Bugs about incorrect behavior are a > priority. Understanding the WSGI PEPs and the multitude of HTTP RFCs is a > daunting task (I still have to look up things constantly) > > - Write tests. Running `tox` will generate a coverage report. Write tests > to cover functions or branches that aren't yet tested. > > - Update documentation. There are a lot of issues that can be solved by > better documentation. A strategy is to look at the most linked or voted > questions on Stack Overflow and identify if the issues are because the > documentation isn't clear enough. If you're writing whole examples that > feel too specific though, that's probably not a good fit for documentation. > > - Answer high-quality questions on Stack Overflow. Thorough answers that > explain what the problem was and what the fix is, or what a better approach > is, are helpful, lasting artifacts that others can find. > > I want to create milestones for the next release of each project, but I've > only had time to do that for Flask. Unfortunately I can't really point at > specific issues to tackle first. The maintainers usually work first on what > affects them, so if you have anything you're interested in or a project > that ran into something, start with that. > > Thank you! > > > On Mon, Jan 22, 2018 at 3:41 PM, Frank Abel Cancio Bello < > frank at generalsoftwareinc.com> wrote: > >> Hi, >> >> I would like to contribute with code to Flask/Jinja2/Werkzeug. >> >> Could anyone give me a hint from where to start, apart from the >> GitHub issues of the projects? >> >> Would be nice to know what the project's developers have in mind or wish >> to develop. >> >> Are new tests welcome? >> >> Thanks >> Frank >> >> _______________________________________________ >> Flask mailing list >> Flask at python.org >> https://mail.python.org/mailman/listinfo/flask >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From projetmbc at gmail.com Fri Jan 26 13:48:23 2018 From: projetmbc at gmail.com (Christophe BAL (via GMAIL)) Date: Fri, 26 Jan 2018 19:48:23 +0100 Subject: [Flask] ngninx + gunicorn + flask + auto-reload Message-ID: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> Hello. I have started a toy Flask *app.py* using ngninx and gunicorn on a VPS. This are my first steps on a VPS... I have updated *app.py* but I don't know how to restart ngninx-gunicorn-Flask such as to have my new *app.py* used on my VPS. How can I acheive this ? -- Christophe BAL Enseignant Agr?g? de Math?matiques Programmeur Python Amateur -------------- next part -------------- An HTML attachment was scrubbed... URL: From ziirish at ziirish.info Fri Jan 26 14:25:17 2018 From: ziirish at ziirish.info (Ziirish) Date: Fri, 26 Jan 2018 20:25:17 +0100 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> Message-ID: <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL (via GMAIL) wrote: > Hello. > > I have started a toy Flask *app.py* using ngninx and gunicorn on a VPS. This > are my first steps on a VPS... > > I have updated *app.py* but I don't know how to restart > ngninx-gunicorn-Flask such as to have my new *app.py* used on my VPS. > > How can I acheive this ? I suppose this is what you are looking for: http://docs.gunicorn.org/en/19.0/settings.html#reload From projetmbc at gmail.com Fri Jan 26 15:27:37 2018 From: projetmbc at gmail.com (Christophe BAL (via GMAIL)) Date: Fri, 26 Jan 2018 21:27:37 +0100 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> Message-ID: <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> Thanks for the link but is is said that this setting is intended for development. Is there another way to have a continous integration of my web app ? Le 26/01/2018 ? 20:25, Ziirish a ?crit?: > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL (via GMAIL) wrote: >> Hello. >> >> I have started a toy Flask *app.py* using ngninx and gunicorn on a VPS. This >> are my first steps on a VPS... >> >> I have updated *app.py* but I don't know how to restart >> ngninx-gunicorn-Flask such as to have my new *app.py* used on my VPS. >> >> How can I acheive this ? > I suppose this is what you are looking for: > http://docs.gunicorn.org/en/19.0/settings.html#reload -- Christophe BAL Enseignant Agr?g? de Math?matiques Programmeur Python Amateur From gergely at polonkai.eu Fri Jan 26 15:47:25 2018 From: gergely at polonkai.eu (Gergely Polonkai) Date: Fri, 26 Jan 2018 20:47:25 +0000 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> Message-ID: You may want to take a look into containers, PaaS providers, and CI/CD in general. The exact solution here depends on a lot of things. Are you hosting yourself? Do you manage complete machines (either actual hardware or a VPS) or just upload your app somewhere? Are you familiar with containerisation and similar concepts? Without all this info (and maybe more) it?s hard to help. On Fri, Jan 26, 2018, 21:27 Christophe BAL (via GMAIL) wrote: > Thanks for the link but is is said that this setting is intended for > development. > > Is there another way to have a continous integration of my web app ? > > > Le 26/01/2018 ? 20:25, Ziirish a ?crit : > > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL (via > GMAIL) wrote: > >> Hello. > >> > >> I have started a toy Flask *app.py* using ngninx and gunicorn on a VPS. > This > >> are my first steps on a VPS... > >> > >> I have updated *app.py* but I don't know how to restart > >> ngninx-gunicorn-Flask such as to have my new *app.py* used on my VPS. > >> > >> How can I acheive this ? > > I suppose this is what you are looking for: > > http://docs.gunicorn.org/en/19.0/settings.html#reload > > -- > Christophe BAL > Enseignant Agr?g? de Math?matiques > Programmeur Python Amateur > > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask > -------------- next part -------------- An HTML attachment was scrubbed... URL: From projetmbc at gmail.com Sat Jan 27 12:47:28 2018 From: projetmbc at gmail.com (Christophe BAL (via GMAIL)) Date: Sat, 27 Jan 2018 18:47:28 +0100 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> Message-ID: <6a9cc614-b656-bc1b-be70-4d6291e3fd60@gmail.com> Thanks for your answer. * I have a complete Debian machine on a VPS. * If I have to use Docker, I can. My purpose is to have a /"as smooth as possible"/ way to update my webapp. Le 26/01/2018 ? 21:47, Gergely Polonkai a ?crit?: > > You may want to take a look into containers, PaaS providers, and CI/CD > in general. > > The exact solution here depends on a lot of things. Are you hosting > yourself? Do you manage complete machines (either actual hardware or a > VPS) or just upload your app somewhere? Are you familiar with > containerisation and similar concepts? > > Without all this info (and maybe more) it?s hard to help. > > > On Fri, Jan 26, 2018, 21:27 Christophe BAL (via GMAIL) > > wrote: > > Thanks for the link but is is said that this setting is intended for > development. > > Is there another way to have a continous integration of my web app ? > > > Le 26/01/2018 ? 20:25, Ziirish a ?crit?: > > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL > (via GMAIL) > wrote: > >> Hello. > >> > >> I have started a toy Flask *app.py* using ngninx and gunicorn > on a VPS. This > >> are my first steps on a VPS... > >> > >> I have updated *app.py* but I don't know how to restart > >> ngninx-gunicorn-Flask such as to have my new *app.py* used on > my VPS. > >> > >> How can I acheive this ? > > I suppose this is what you are looking for: > > http://docs.gunicorn.org/en/19.0/settings.html#reload > > -- > Christophe BAL > Enseignant Agr?g? de Math?matiques > Programmeur Python Amateur > > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask > -- Christophe BAL Enseignant Agr?g? de Math?matiques Programmeur Python Amateur -------------- next part -------------- An HTML attachment was scrubbed... URL: From contact at arkade.info Sun Jan 28 10:06:15 2018 From: contact at arkade.info (aRkadeFR) Date: Sun, 28 Jan 2018 10:06:15 -0500 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: <6a9cc614-b656-bc1b-be70-4d6291e3fd60@gmail.com> References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> <6a9cc614-b656-bc1b-be70-4d6291e3fd60@gmail.com> Message-ID: <20180128150615.axqrkbpatts7oqhd@lenodoc> On Sat, Jan 27, 2018 at 06:47:28PM +0100, Christophe BAL (via GMAIL) wrote: > Thanks for your answer. > > * I have a complete Debian machine on a VPS. > * If I have to use Docker, I can. > > My purpose is to have a /"as smooth as possible"/ way to update my webapp. The main principle of the CI is to deploy your project when any changes happen in the project (code or settings). FMPOV, it is what you try to do. I agree with Gergely Polonkai, it depends on multiple aspects of your project. I would probably add another question: How do you deploy your application right now? If you have any automation to deploy your project, then setting up a CI is to deploy your project any time you have a change in your code. I assume your code is under version controlled like git, so a way to do that is to hook your deployment to your repository. > Le 26/01/2018 ? 21:47, Gergely Polonkai a ?crit?: > > > > You may want to take a look into containers, PaaS providers, and CI/CD > > in general. > > > > The exact solution here depends on a lot of things. Are you hosting > > yourself? Do you manage complete machines (either actual hardware or a > > VPS) or just upload your app somewhere? Are you familiar with > > containerisation and similar concepts? > > > > Without all this info (and maybe more) it?s hard to help. > > > > > > On Fri, Jan 26, 2018, 21:27 Christophe BAL (via GMAIL) > > > wrote: > > > > Thanks for the link but is is said that this setting is intended for > > development. > > > > Is there another way to have a continous integration of my web app ? > > > > > > Le 26/01/2018 ? 20:25, Ziirish a ?crit?: > > > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL > > (via GMAIL) > wrote: > > >> Hello. > > >> > > >> I have started a toy Flask *app.py* using ngninx and gunicorn > > on a VPS. This > > >> are my first steps on a VPS... > > >> > > >> I have updated *app.py* but I don't know how to restart > > >> ngninx-gunicorn-Flask such as to have my new *app.py* used on > > my VPS. > > >> > > >> How can I acheive this ? > > > I suppose this is what you are looking for: > > > http://docs.gunicorn.org/en/19.0/settings.html#reload > > > > -- > > Christophe BAL > > Enseignant Agr?g? de Math?matiques > > Programmeur Python Amateur > > > > _______________________________________________ > > Flask mailing list > > Flask at python.org > > https://mail.python.org/mailman/listinfo/flask > > > > -- > Christophe BAL > Enseignant Agr?g? de Math?matiques > Programmeur Python Amateur > > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask From jeff1evesque at yahoo.com Sun Jan 28 11:21:43 2018 From: jeff1evesque at yahoo.com (Jeffrey Levesque) Date: Sun, 28 Jan 2018 11:21:43 -0500 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> Message-ID: <5D53A778-E32B-4A36-8C43-BEE68DF54B4D@yahoo.com> My project uses flask + nginx + gunicorn + Travis CI: - https://github.com/jeff1evesque/machine-learning Thank you, Jeff Levesque https://github.com/jeff1evesque > On Jan 26, 2018, at 3:47 PM, Gergely Polonkai wrote: > > You may want to take a look into containers, PaaS providers, and CI/CD in general. > > The exact solution here depends on a lot of things. Are you hosting yourself? Do you manage complete machines (either actual hardware or a VPS) or just upload your app somewhere? Are you familiar with containerisation and similar concepts? > > Without all this info (and maybe more) it?s hard to help. > > >> On Fri, Jan 26, 2018, 21:27 Christophe BAL (via GMAIL) wrote: >> Thanks for the link but is is said that this setting is intended for >> development. >> >> Is there another way to have a continous integration of my web app ? >> >> >> Le 26/01/2018 ? 20:25, Ziirish a ?crit : >> > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL (via GMAIL) wrote: >> >> Hello. >> >> >> >> I have started a toy Flask *app.py* using ngninx and gunicorn on a VPS. This >> >> are my first steps on a VPS... >> >> >> >> I have updated *app.py* but I don't know how to restart >> >> ngninx-gunicorn-Flask such as to have my new *app.py* used on my VPS. >> >> >> >> How can I acheive this ? >> > I suppose this is what you are looking for: >> > http://docs.gunicorn.org/en/19.0/settings.html#reload >> >> -- >> Christophe BAL >> Enseignant Agr?g? de Math?matiques >> Programmeur Python Amateur >> >> _______________________________________________ >> Flask mailing list >> Flask at python.org >> https://mail.python.org/mailman/listinfo/flask > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask -------------- next part -------------- An HTML attachment was scrubbed... URL: From projetmbc at gmail.com Sun Jan 28 12:45:19 2018 From: projetmbc at gmail.com (Christophe BAL (via GMAIL)) Date: Sun, 28 Jan 2018 18:45:19 +0100 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: <5D53A778-E32B-4A36-8C43-BEE68DF54B4D@yahoo.com> References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> <5D53A778-E32B-4A36-8C43-BEE68DF54B4D@yahoo.com> Message-ID: <2e3e086f-bf16-61a8-7713-5d1149b317f9@gmail.com> Thanks a lot for all your answers. I will follow your advices. Le 28/01/2018 ? 17:21, Jeffrey Levesque a ?crit?: > My project uses flask + nginx + gunicorn + Travis CI: > > - https://github.com/jeff1evesque/machine-learning > > > Thank you, > > Jeff Levesque > https://github.com/jeff1evesque > > On Jan 26, 2018, at 3:47 PM, Gergely Polonkai > wrote: > >> You may want to take a look into containers, PaaS providers, and >> CI/CD in general. >> >> The exact solution here depends on a lot of things. Are you hosting >> yourself? Do you manage complete machines (either actual hardware or >> a VPS) or just upload your app somewhere? Are you familiar with >> containerisation and similar concepts? >> >> Without all this info (and maybe more) it?s hard to help. >> >> >> On Fri, Jan 26, 2018, 21:27 Christophe BAL (via GMAIL) >> > wrote: >> >> Thanks for the link but is is said that this setting is intended for >> development. >> >> Is there another way to have a continous integration of my web app ? >> >> >> Le 26/01/2018 ? 20:25, Ziirish a ?crit?: >> > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL >> (via GMAIL) > wrote: >> >> Hello. >> >> >> >> I have started a toy Flask *app.py* using ngninx and gunicorn >> on a VPS. This >> >> are my first steps on a VPS... >> >> >> >> I have updated *app.py* but I don't know how to restart >> >> ngninx-gunicorn-Flask such as to have my new *app.py* used on >> my VPS. >> >> >> >> How can I acheive this ? >> > I suppose this is what you are looking for: >> > http://docs.gunicorn.org/en/19.0/settings.html#reload >> >> -- >> Christophe BAL >> Enseignant Agr?g? de Math?matiques >> Programmeur Python Amateur >> >> _______________________________________________ >> Flask mailing list >> Flask at python.org >> https://mail.python.org/mailman/listinfo/flask >> >> _______________________________________________ >> Flask mailing list >> Flask at python.org >> https://mail.python.org/mailman/listinfo/flask -- Christophe BAL Enseignant Agr?g? de Math?matiques Programmeur Python Amateur -------------- next part -------------- An HTML attachment was scrubbed... URL: From jerry.mccreary at mac.com Sun Jan 28 14:27:10 2018 From: jerry.mccreary at mac.com (Jerry Mccreary) Date: Sun, 28 Jan 2018 14:27:10 -0500 Subject: [Flask] ngninx + gunicorn + flask + auto-reload In-Reply-To: <2e3e086f-bf16-61a8-7713-5d1149b317f9@gmail.com> References: <0f79e15d-c14f-dd41-c62d-08135525c61f@gmail.com> <20180126192516.6yndvmy2m7dxfbur@mail.ziirish.info> <6ce83448-fe14-7dde-b063-dd864a2b68e5@gmail.com> <5D53A778-E32B-4A36-8C43-BEE68DF54B4D@yahoo.com> <2e3e086f-bf16-61a8-7713-5d1149b317f9@gmail.com> Message-ID: <902FF57A-E3CE-4F19-948A-63ADD3AA9450@mac.com> I compiled a list of instructions for deploying with Phusion Passenger, instead of Gunicorn. It may be of some help. The gist is that, once set up, updates are relatively painless: 1) files are transferred using git, then 2) calling nginx reload. There are probably more automated ways. https://macfire.github.io/devops16/ -- Jerry > On Jan 28, 2018, at 12:45 PM, Christophe BAL (via GMAIL) wrote: > > Thanks a lot for all your answers. > > I will follow your advices. > >> Le 28/01/2018 ? 17:21, Jeffrey Levesque a ?crit : >> My project uses flask + nginx + gunicorn + Travis CI: >> >> - https://github.com/jeff1evesque/machine-learning >> >> >> Thank you, >> >> Jeff Levesque >> https://github.com/jeff1evesque >> >> On Jan 26, 2018, at 3:47 PM, Gergely Polonkai wrote: >> >>> You may want to take a look into containers, PaaS providers, and CI/CD in general. >>> >>> The exact solution here depends on a lot of things. Are you hosting yourself? Do you manage complete machines (either actual hardware or a VPS) or just upload your app somewhere? Are you familiar with containerisation and similar concepts? >>> >>> Without all this info (and maybe more) it?s hard to help. >>> >>> >>>> On Fri, Jan 26, 2018, 21:27 Christophe BAL (via GMAIL) wrote: >>>> Thanks for the link but is is said that this setting is intended for >>>> development. >>>> >>>> Is there another way to have a continous integration of my web app ? >>>> >>>> >>>> Le 26/01/2018 ? 20:25, Ziirish a ?crit : >>>> > * On Friday, January 26, 2018 at 07:48 PM +0100, Christophe BAL (via GMAIL) wrote: >>>> >> Hello. >>>> >> >>>> >> I have started a toy Flask *app.py* using ngninx and gunicorn on a VPS. This >>>> >> are my first steps on a VPS... >>>> >> >>>> >> I have updated *app.py* but I don't know how to restart >>>> >> ngninx-gunicorn-Flask such as to have my new *app.py* used on my VPS. >>>> >> >>>> >> How can I acheive this ? >>>> > I suppose this is what you are looking for: >>>> > http://docs.gunicorn.org/en/19.0/settings.html#reload >>>> >>>> -- >>>> Christophe BAL >>>> Enseignant Agr?g? de Math?matiques >>>> Programmeur Python Amateur >>>> >>>> _______________________________________________ >>>> Flask mailing list >>>> Flask at python.org >>>> https://mail.python.org/mailman/listinfo/flask >>> _______________________________________________ >>> Flask mailing list >>> Flask at python.org >>> https://mail.python.org/mailman/listinfo/flask > > -- > Christophe BAL > Enseignant Agr?g? de Math?matiques > Programmeur Python Amateur > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask -------------- next part -------------- An HTML attachment was scrubbed... URL: From clint.olsen at gmail.com Mon Jan 29 19:52:08 2018 From: clint.olsen at gmail.com (Clint Olsen) Date: Mon, 29 Jan 2018 16:52:08 -0800 Subject: [Flask] Help with simple example using AngularJS Message-ID: Hi: I'm new to Flask and Angular and only done a little web-based programming, so please forgive my lack of understanding. I've just cobbled together examples from Flask as well as some examples online to come up with the following. I am interested in the most basic functionality of modifying a web form and capturing that in the back-end to prove I can get data at least in one direction: *static/app.js*: var app = angular.module('myApp', []); app.controller('formCtrl', function($scope, $log, $http) { $scope.firstName = "John"; $scope.SendData = function () { var data = { 'foo': $scope.firstName }; var config = { headers : { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' } } $http.post('/', data, config) .success(function(results) { $log.log(results); }) .error(function(error) { $log.log(error); }); }; }); *static/index.html*:
First Name:

You entered: {{firstName}}

*app.py*: from flask import Flask, request, send_file app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): print('Request: %s' % request.method) if request.method == 'POST': data = request.form.to_dict() print('First name from form is %s' % data) return 'OK' else: return send_file("static/index.html") if __name__ == "__main__": app.run(host='0.0.0.0', debug=True) This code (sort of) works, but the message I get from index() is kind of weird, so maybe I'm not packaging the data payload correctly? In this example I just populate the form with a "C": Flask log: Request: GET 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /? HTTP/1.1" 200 - 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/app.js HTTP/1.1" 200 - 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/style.css HTTP/1.1" 200 - Request: POST First name from form is {'{"foo":"C"}': ''} 127.0.0.1 - - [29/Jan/2018 16:40:16] "POST / HTTP/1.1" 200 - I'm not not quite sure why the key/value pair is embedded in a dictionary as the key with an empty value. Any pointers would be much appreciated! Thanks, -Clint -------------- next part -------------- An HTML attachment was scrubbed... URL: From stappers at stappers.nl Wed Jan 31 15:34:59 2018 From: stappers at stappers.nl (Geert Stappers) Date: Wed, 31 Jan 2018 21:34:59 +0100 Subject: [Flask] Help with simple example using AngularJS In-Reply-To: References: Message-ID: <20180131203459.GB21645@gpm.stappers.nl> On Mon, Jan 29, 2018 at 04:52:08PM -0800, Clint Olsen wrote: > Hi: > > I'm new to Flask and Angular and only done a little web-based programming, > so please forgive my lack of understanding. I've just cobbled together > examples from Flask as well as some examples online to come up with the > following. > > I am interested in the most basic functionality of modifying a web form and > capturing that in the back-end to prove I can get data at least in one > direction: Hey, that is the road I want to travell (some day) (more text below) > *static/app.js*: > > var app = angular.module('myApp', []); > > app.controller('formCtrl', function($scope, $log, $http) { > $scope.firstName = "John"; > > $scope.SendData = function () { > var data = { 'foo': $scope.firstName }; > > var config = { > headers : { > 'Content-Type': > 'application/x-www-form-urlencoded;charset=utf-8;' > } > } > > $http.post('/', data, config) > .success(function(results) { > $log.log(results); > }) > .error(function(error) { > $log.log(error); > }); > }; > }); > > *static/index.html*: > > > > > > > > > > >
>
> First Name: > > >
> >

You entered: {{firstName}}

> >
> > > > *app.py*: > > from flask import Flask, request, send_file > > app = Flask(__name__) > > @app.route('/', methods=['GET', 'POST']) > def index(): > print('Request: %s' % request.method) > if request.method == 'POST': > data = request.form.to_dict() > print('First name from form is %s' % data) > return 'OK' > else: > return send_file("static/index.html") > > if __name__ == "__main__": > app.run(host='0.0.0.0', debug=True) > > This code (sort of) works, but the message I get from index() is kind of > weird, so maybe I'm not packaging the data payload correctly? In this > example I just populate the form with a "C": > > Flask log: > > Request: GET > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /? HTTP/1.1" 200 - > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/app.js HTTP/1.1" 200 - > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/style.css HTTP/1.1" 200 - > Request: POST > First name from form is {'{"foo":"C"}': ''} > 127.0.0.1 - - [29/Jan/2018 16:40:16] "POST / HTTP/1.1" 200 - > > I'm not not quite sure why the key/value pair is embedded in a dictionary > as the key with an empty value. That is indeed strange. ( I think also that {'{"foo":"C"}': ''} is strange ) > Any pointers would be much appreciated! A simple "yes, dict with data in key plus empty value is normal" or an confirm "no, such dict content is not expected" would also be helpfull. Groeten Geert Stappers -- Leven en laten leven From paradox2005 at gmail.com Wed Jan 31 18:11:37 2018 From: paradox2005 at gmail.com (Adil Hasan) Date: Wed, 31 Jan 2018 23:11:37 +0000 Subject: [Flask] Help with simple example using AngularJS In-Reply-To: References: Message-ID: <20180131231136.GQ3312@raddish> Hello Clint, I wasn't using Flask one one of my backends (just plain cgi python), but I had to pass the JSON object as a string. Could you try out $http.post('/', JSON.stringify(data), config) and see if that gives you what you want? hth adil On Mon, Jan 29, 2018 at 04:52:08PM -0800, Clint Olsen wrote: > Hi: > > I'm new to Flask and Angular and only done a little web-based programming, > so please forgive my lack of understanding. I've just cobbled together > examples from Flask as well as some examples online to come up with the > following. > > I am interested in the most basic functionality of modifying a web form and > capturing that in the back-end to prove I can get data at least in one > direction: > > *static/app.js*: > > var app = angular.module('myApp', []); > > app.controller('formCtrl', function($scope, $log, $http) { > $scope.firstName = "John"; > > $scope.SendData = function () { > var data = { 'foo': $scope.firstName }; > > var config = { > headers : { > 'Content-Type': > 'application/x-www-form-urlencoded;charset=utf-8;' > } > } > > $http.post('/', data, config) > .success(function(results) { > $log.log(results); > }) > .error(function(error) { > $log.log(error); > }); > }; > }); > > *static/index.html*: > > > > > > > > > > >
>
> First Name: > > >
> >

You entered: {{firstName}}

> >
> > > > *app.py*: > > from flask import Flask, request, send_file > > app = Flask(__name__) > > @app.route('/', methods=['GET', 'POST']) > def index(): > print('Request: %s' % request.method) > if request.method == 'POST': > data = request.form.to_dict() > print('First name from form is %s' % data) > return 'OK' > else: > return send_file("static/index.html") > > if __name__ == "__main__": > app.run(host='0.0.0.0', debug=True) > > This code (sort of) works, but the message I get from index() is kind of > weird, so maybe I'm not packaging the data payload correctly? In this > example I just populate the form with a "C": > > Flask log: > > Request: GET > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /? HTTP/1.1" 200 - > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/app.js HTTP/1.1" 200 - > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/style.css HTTP/1.1" 200 - > Request: POST > First name from form is {'{"foo":"C"}': ''} > 127.0.0.1 - - [29/Jan/2018 16:40:16] "POST / HTTP/1.1" 200 - > > I'm not not quite sure why the key/value pair is embedded in a dictionary > as the key with an empty value. > > Any pointers would be much appreciated! > > Thanks, > > -Clint > _______________________________________________ > Flask mailing list > Flask at python.org > https://mail.python.org/mailman/listinfo/flask From clint.olsen at gmail.com Wed Jan 31 18:32:15 2018 From: clint.olsen at gmail.com (Clint Olsen) Date: Wed, 31 Jan 2018 15:32:15 -0800 Subject: [Flask] Help with simple example using AngularJS In-Reply-To: <20180131231136.GQ3312@raddish> References: <20180131231136.GQ3312@raddish> Message-ID: Hi Adil: I did try adding JSON.stringify() as you suggested, but this didn't seem to have an effect on the behavior of the post contents. Thanks, -Clint On Wed, Jan 31, 2018 at 3:11 PM, Adil Hasan wrote: > Hello Clint, > I wasn't using Flask one one of my backends (just plain cgi python), but I > had to pass the JSON object as a string. Could you try out > > $http.post('/', JSON.stringify(data), config) > > and see if that gives you what you want? > > hth > adil > > On Mon, Jan 29, 2018 at 04:52:08PM -0800, Clint Olsen wrote: > > Hi: > > > > I'm new to Flask and Angular and only done a little web-based > programming, > > so please forgive my lack of understanding. I've just cobbled together > > examples from Flask as well as some examples online to come up with the > > following. > > > > I am interested in the most basic functionality of modifying a web form > and > > capturing that in the back-end to prove I can get data at least in one > > direction: > > > > *static/app.js*: > > > > var app = angular.module('myApp', []); > > > > app.controller('formCtrl', function($scope, $log, $http) { > > $scope.firstName = "John"; > > > > $scope.SendData = function () { > > var data = { 'foo': $scope.firstName }; > > > > var config = { > > headers : { > > 'Content-Type': > > 'application/x-www-form-urlencoded;charset=utf-8;' > > } > > } > > > > $http.post('/', data, config) > > .success(function(results) { > > $log.log(results); > > }) > > .error(function(error) { > > $log.log(error); > > }); > > }; > > }); > > > > *static/index.html*: > > > > > > > > > > > > > > > > > > > > > >
> >
> > First Name: > > > > > >
> > > >

You entered: {{firstName}}

> > > >
> > > > > > > > *app.py*: > > > > from flask import Flask, request, send_file > > > > app = Flask(__name__) > > > > @app.route('/', methods=['GET', 'POST']) > > def index(): > > print('Request: %s' % request.method) > > if request.method == 'POST': > > data = request.form.to_dict() > > print('First name from form is %s' % data) > > return 'OK' > > else: > > return send_file("static/index.html") > > > > if __name__ == "__main__": > > app.run(host='0.0.0.0', debug=True) > > > > This code (sort of) works, but the message I get from index() is kind of > > weird, so maybe I'm not packaging the data payload correctly? In this > > example I just populate the form with a "C": > > > > Flask log: > > > > Request: GET > > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /? HTTP/1.1" 200 - > > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/app.js HTTP/1.1" 200 - > > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/style.css HTTP/1.1" > 200 - > > Request: POST > > First name from form is {'{"foo":"C"}': ''} > > 127.0.0.1 - - [29/Jan/2018 16:40:16] "POST / HTTP/1.1" 200 - > > > > I'm not not quite sure why the key/value pair is embedded in a dictionary > > as the key with an empty value. > > > > Any pointers would be much appreciated! > > > > Thanks, > > > > -Clint > > > _______________________________________________ > > Flask mailing list > > Flask at python.org > > https://mail.python.org/mailman/listinfo/flask > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From clint.olsen at gmail.com Wed Jan 31 19:18:51 2018 From: clint.olsen at gmail.com (Clint Olsen) Date: Wed, 31 Jan 2018 16:18:51 -0800 Subject: [Flask] Help with simple example using AngularJS In-Reply-To: References: Message-ID: Hi: I should probably add that before I tried messing around with decoding the form, I just blurted out the object on the receiving side and got: from flask import Flask, request, send_file app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def index(): print('Request: %s' % request.method) if request.method == 'POST': data = request.form #.to_dict() print('First name from form is %s' % data) return 'OK' else: return send_file("static/index.html") if __name__ == "__main__": app.run(host='0.0.0.0', debug=True) First name from form is ImmutableMultiDict([('{"non-stringify":"asdfasdf"}', '')]) So, even prior to attempt digging the info out of this structure I see the issue. Thanks, -Clint On Mon, Jan 29, 2018 at 4:52 PM, Clint Olsen wrote: > Hi: > > I'm new to Flask and Angular and only done a little web-based programming, > so please forgive my lack of understanding. I've just cobbled together > examples from Flask as well as some examples online to come up with the > following. > > I am interested in the most basic functionality of modifying a web form > and capturing that in the back-end to prove I can get data at least in one > direction: > > *static/app.js*: > > var app = angular.module('myApp', []); > > app.controller('formCtrl', function($scope, $log, $http) { > $scope.firstName = "John"; > > $scope.SendData = function () { > var data = { 'foo': $scope.firstName }; > > var config = { > headers : { > 'Content-Type': 'application/x-www-form- > urlencoded;charset=utf-8;' > } > } > > $http.post('/', data, config) > .success(function(results) { > $log.log(results); > }) > .error(function(error) { > $log.log(error); > }); > }; > }); > > *static/index.html*: > > > > > > > > > > >
>
> First Name: > > >
> >

You entered: {{firstName}}

> >
> > > > *app.py*: > > from flask import Flask, request, send_file > > app = Flask(__name__) > > @app.route('/', methods=['GET', 'POST']) > def index(): > print('Request: %s' % request.method) > if request.method == 'POST': > data = request.form.to_dict() > print('First name from form is %s' % data) > return 'OK' > else: > return send_file("static/index.html") > > if __name__ == "__main__": > app.run(host='0.0.0.0', debug=True) > > This code (sort of) works, but the message I get from index() is kind of > weird, so maybe I'm not packaging the data payload correctly? In this > example I just populate the form with a "C": > > Flask log: > > Request: GET > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /? HTTP/1.1" 200 - > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/app.js HTTP/1.1" 200 - > 127.0.0.1 - - [29/Jan/2018 16:40:11] "GET /static/style.css HTTP/1.1" 200 - > Request: POST > First name from form is {'{"foo":"C"}': ''} > 127.0.0.1 - - [29/Jan/2018 16:40:16] "POST / HTTP/1.1" 200 - > > I'm not not quite sure why the key/value pair is embedded in a dictionary > as the key with an empty value. > > Any pointers would be much appreciated! > > Thanks, > > -Clint > > -------------- next part -------------- An HTML attachment was scrubbed... URL: