From 580e32fb6a0fea5c34677899f7cd215a6a54fd95 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:21:46 -0700 Subject: [PATCH 01/24] Update Buildbot URL. --- docs/scenarios/ci.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/scenarios/ci.rst b/docs/scenarios/ci.rst index 3a80c70b3..d9fc431ab 100644 --- a/docs/scenarios/ci.rst +++ b/docs/scenarios/ci.rst @@ -26,7 +26,7 @@ engine. Use it. Buildbot -------- -`Buildbot `_ is a Python system to +`Buildbot `_ is a Python system to automate the compile/test cycle to validate code changes. @@ -85,4 +85,4 @@ thorough. In order to activate testing for your project, go to `the travis-ci site `_ and login with your Github account. Then activate your project in your profile settings and that's -it. From now on, your project's tests will be run on every push to Github. +it. From now on, your project's tests will be run on every push to Github. From 5609bc8bbff2189e1659f47039f218ae34cac271 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:22:47 -0700 Subject: [PATCH 02/24] Update tox URL. --- docs/scenarios/ci.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/ci.rst b/docs/scenarios/ci.rst index d9fc431ab..1bb2af534 100644 --- a/docs/scenarios/ci.rst +++ b/docs/scenarios/ci.rst @@ -38,7 +38,7 @@ Mule? Tox --- -`tox `_ is an automation tool providing +`tox `_ is an automation tool providing packaging, testing and deployment of Python software right from the console or CI server. It is a generic virtualenv management and test command line tool which provides the following features: From 5982ec650a64210a831971771497315db286fab5 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:23:15 -0700 Subject: [PATCH 03/24] Update Travis CI URL because always https. --- docs/scenarios/ci.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/scenarios/ci.rst b/docs/scenarios/ci.rst index 1bb2af534..6e2025d91 100644 --- a/docs/scenarios/ci.rst +++ b/docs/scenarios/ci.rst @@ -53,7 +53,7 @@ which provides the following features: Travis-CI --------- -`Travis-CI `_ is a distributed CI server which builds tests +`Travis-CI `_ is a distributed CI server which builds tests for open source projects for free. It provides multiple workers to run Python tests on and seamlessly integrates with Github. You can even have it comment on your Pull Requests whether this particular changeset breaks the build or not. So if you are @@ -83,6 +83,6 @@ notifications, before and after steps and much more. The `travis-ci docs `_ explain all of those and are very thorough. -In order to activate testing for your project, go to `the travis-ci site `_ +In order to activate testing for your project, go to `the travis-ci site `_ and login with your Github account. Then activate your project in your profile settings and that's it. From now on, your project's tests will be run on every push to Github. From 920aa3725c88a82101ad29502e8a8b4242bfbf9f Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:26:15 -0700 Subject: [PATCH 04/24] Use Wayback Machine to resolve a dead link. --- docs/scenarios/db.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/db.rst b/docs/scenarios/db.rst index 5d12c2a51..6d6d6ce7a 100644 --- a/docs/scenarios/db.rst +++ b/docs/scenarios/db.rst @@ -11,7 +11,7 @@ Nearly all Python database modules such as `sqlite3`, `psycopg` and Tutorials that explain how to work with modules that conform to this interface can be found `here `__ and -`here `__. +`here `__. SQLAlchemy ---------- From c52c9187ae4dc9b7436a15426f8fda8f1eda5a12 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:27:22 -0700 Subject: [PATCH 05/24] Add Qt link. --- docs/scenarios/gui.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/gui.rst b/docs/scenarios/gui.rst index 7f502b37d..94b190345 100644 --- a/docs/scenarios/gui.rst +++ b/docs/scenarios/gui.rst @@ -4,7 +4,7 @@ GUI Applications Qt -- -Qt is a cross-platform application framework that is widely used for developing +`Qt `_ is a cross-platform application framework that is widely used for developing software with a GUI but can also be used for non-GUI applications. PySide From 1e38672e668a6c629d8154ce5dfab95fa7a55131 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:42:32 -0700 Subject: [PATCH 06/24] Update Gunicorn help link. --- docs/scenarios/web.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/web.rst b/docs/scenarios/web.rst index 588dbb285..dd6418bc1 100644 --- a/docs/scenarios/web.rst +++ b/docs/scenarios/web.rst @@ -152,7 +152,7 @@ lightweight, easy to use, and uses many UNIX idioms. Gunicorn is not designed to face the internet -- it was designed to run behind Nginx which buffers slow requests and takes care of other important considerations. A sample setup for Nginx + Gunicorn can be found in the -`Gunicorn help `_. +`Gunicorn help `_. .. _uwsgi-ref: From 0b897088fcde12b99d5b1727b0b9f664105d8e92 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:44:32 -0700 Subject: [PATCH 07/24] Update link to Gondor documentation. --- docs/scenarios/web.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/scenarios/web.rst b/docs/scenarios/web.rst index dd6418bc1..99b3dfc6b 100644 --- a/docs/scenarios/web.rst +++ b/docs/scenarios/web.rst @@ -235,9 +235,7 @@ and Pinax applications. Gondor supports Django versions 1.2 and 1.3 on Python version 2.7, and can automatically configure your Django site if you use ``local_settings.py`` for site-specific configuration information. -Gondor publishes guides to deploying `Django projects -`_ and `Pinax projects -`_ on their platform. +Gondor has a guide on deploying `Django projects `_. Templating From c5e37675ce06ed310560a254d7f672c8ae0b6eca Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:49:59 -0700 Subject: [PATCH 08/24] Update virtualenvwrapper documentation links. --- docs/dev/virtualenvs.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dev/virtualenvs.rst b/docs/dev/virtualenvs.rst index ee6ace244..c08f1118e 100644 --- a/docs/dev/virtualenvs.rst +++ b/docs/dev/virtualenvs.rst @@ -60,7 +60,7 @@ where they were placed. virtualenvwrapper ----------------- -`virtualenvwrapper `_ +`virtualenvwrapper `_ provides a set of commands which makes working with virtual environments much more pleasant. It also places all your virtual environments in one place. @@ -72,7 +72,7 @@ To install (make sure **virtualenv** is already installed): $ export WORKON_HOME=~/Envs $ source /usr/local/bin/virtualenvwrapper.sh -(`Full virtualenvwrapper install instructions `_.) +(`Full virtualenvwrapper install instructions `_.) For Windows, you can use the `virtualenvwrapper-powershell `_ clone. @@ -136,7 +136,7 @@ Other useful commands ``lssitepackages`` Shows contents of ``site-packages`` directory. -`Full list of virtualenvwrapper commands `_. +`Full list of virtualenvwrapper commands `_. autoenv ------- From 8bd2c129658fd3bfd48e1b60f5bf6f3d1a4a5a46 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:54:40 -0700 Subject: [PATCH 09/24] Update link to 'A Byte of Python'. --- docs/intro/learning.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/intro/learning.rst b/docs/intro/learning.rst index 63d6d04fb..27e770def 100644 --- a/docs/intro/learning.rst +++ b/docs/intro/learning.rst @@ -85,7 +85,7 @@ A free introductory book that teaches python at the beginner level, it assumes n previous programming experience. `A Byte of Python for Python 2.x `_ - `A Byte of Python for Python 3.x `_ + `A Byte of Python for Python 3.x `_ Advanced @@ -130,7 +130,7 @@ A Primer on Scientific Programming with Python ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A Primer on Scientific Programming with Python, written by Hans Petter Langtangen, -mainly covers python's usage in scientific field. In the book, examples are +mainly covers python's usage in scientific field. In the book, examples are choosen from mathematics and the natural sciences. `A Primer on Scientific Programming with Python `_ @@ -138,7 +138,7 @@ choosen from mathematics and the natural sciences. Numerical Methods in Engineering with Python ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Numerical Methods in Engineering with Python,written by Jaan Kiusalaas, attempts to +Numerical Methods in Engineering with Python,written by Jaan Kiusalaas, attempts to emphasis on numerical methods and how to implement them in python. `Numerical Methods in Engineering with Python `_ From 4cc1d119f14c207b17e2c2a157bda954a854fba9 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:56:16 -0700 Subject: [PATCH 10/24] Add link to 'Python in a Nutshell'. --- docs/intro/learning.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/intro/learning.rst b/docs/intro/learning.rst index 27e770def..0cb397b2f 100644 --- a/docs/intro/learning.rst +++ b/docs/intro/learning.rst @@ -153,6 +153,8 @@ Python in a Nutshell, written by Alex Martelli, covers most cross-platform python's usage, from its syntax to built-in libraries to advanced topics such as writing C extensions. + `Python in a Nutshell `_ + The Python Language Reference ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From bbbb24d3e50198018e23f9dc549fc98536d68669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Blech?= Date: Thu, 29 Aug 2013 20:29:42 -0300 Subject: [PATCH 11/24] Add xmltodict --- docs/scenarios/xml.rst | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docs/scenarios/xml.rst b/docs/scenarios/xml.rst index df89d580a..1f8db9c4c 100644 --- a/docs/scenarios/xml.rst +++ b/docs/scenarios/xml.rst @@ -32,3 +32,42 @@ and then you can get the child elements name like this: untangle also supports loading XML from a string or an URL. +xmltodict +--------- + +`xmltodict `_ is another simple +library that aims at making xml feel like working with json. + +An xml file like this: + +.. code-block:: xml + + + + elements + more elements + + + element as well + + + +can be loaded into a python dict like this: + +.. code-block:: python + + import xmltodict + obj = xmltodict.parse('path/to/file.xml') + +and then you can access elements, attributes and values like this: + +.. code-block:: python + + doc['mydocument']['@has'] # == u'an attribute' + doc['mydocument']['and']['many'] # == [u'elements', u'more elements'] + doc['mydocument']['plus']['@a'] # == u'complex' + doc['mydocument']['plus']['#text'] # == u'element as well' + +xmltodict also lets you roundtrip back to xml with the unparse function, +has a streaming mode suitable for handling files that don't fit in memory +and supports namespaces. From 0d259afbda87f5283bcf10c22b62494f8c32125a Mon Sep 17 00:00:00 2001 From: eluck Date: Fri, 30 Aug 2013 01:27:54 -0700 Subject: [PATCH 12/24] fix broken tornado link in web.rst --- docs/scenarios/web.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/web.rst b/docs/scenarios/web.rst index 588dbb285..3e40f16cb 100644 --- a/docs/scenarios/web.rst +++ b/docs/scenarios/web.rst @@ -92,7 +92,7 @@ Support can be found on its `mailing list `_ is a scalable, non-blocking web server and web application framework with +`Tornado `_ is a scalable, non-blocking web server and web application framework with a relative simple usage. Tornado is known for his high performance. It was initially developed for `friendfeed `_ , a real time chat and blog system. From eafdcd9a61ea96e3b1685ea06f18162308bdc9a3 Mon Sep 17 00:00:00 2001 From: Jeff Paine Date: Sat, 14 Sep 2013 00:39:31 -0400 Subject: [PATCH 13/24] Update brew installation commands --- docs/starting/install/osx.rst | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/docs/starting/install/osx.rst b/docs/starting/install/osx.rst index 0711b1928..53323cb8a 100644 --- a/docs/starting/install/osx.rst +++ b/docs/starting/install/osx.rst @@ -54,19 +54,7 @@ line at the bottom of your ``~/.bashrc`` file Now, we can install Python 2.7: :: - $ brew install python --framework - -This will take a minute or two. Once that's complete, you'll have to add the -new Python scripts directory to your ``PATH`` - -.. code-block:: console - - export PATH=/usr/local/share/python:$PATH - -The ``--framework`` option tells Homebrew to compile a Framework-style Python -build, rather than a UNIX-style build. The outdated version of Python that -Snow Leopard comes packaged with is built as a Framework, so this helps avoid -some future module installation bugs. + $ brew install python Distribute & Pip From 4842bbb1a184f0c27b7e6d2bf4af4568929ea402 Mon Sep 17 00:00:00 2001 From: Jeff Paine Date: Sun, 15 Sep 2013 09:59:04 -0400 Subject: [PATCH 14/24] Add back export PATH=/usr/local/share/python:$PATH section --- docs/starting/install/osx.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/starting/install/osx.rst b/docs/starting/install/osx.rst index 53323cb8a..dc6676733 100644 --- a/docs/starting/install/osx.rst +++ b/docs/starting/install/osx.rst @@ -56,6 +56,13 @@ Now, we can install Python 2.7: :: $ brew install python +This will take a minute or two. Once that's complete, you'll have to add the +new Python scripts directory to your ``PATH`` + +.. code-block:: console + + export PATH=/usr/local/share/python:$PATH + Distribute & Pip ---------------- From 56924481c2006be27168546eded9748844d737aa Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:21:46 -0700 Subject: [PATCH 15/24] Update Buildbot URL. --- docs/scenarios/ci.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/scenarios/ci.rst b/docs/scenarios/ci.rst index 3a80c70b3..d9fc431ab 100644 --- a/docs/scenarios/ci.rst +++ b/docs/scenarios/ci.rst @@ -26,7 +26,7 @@ engine. Use it. Buildbot -------- -`Buildbot `_ is a Python system to +`Buildbot `_ is a Python system to automate the compile/test cycle to validate code changes. @@ -85,4 +85,4 @@ thorough. In order to activate testing for your project, go to `the travis-ci site `_ and login with your Github account. Then activate your project in your profile settings and that's -it. From now on, your project's tests will be run on every push to Github. +it. From now on, your project's tests will be run on every push to Github. From e094175bd6ae59f979845e0e85e14f81422ff015 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:22:47 -0700 Subject: [PATCH 16/24] Update tox URL. --- docs/scenarios/ci.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/ci.rst b/docs/scenarios/ci.rst index d9fc431ab..1bb2af534 100644 --- a/docs/scenarios/ci.rst +++ b/docs/scenarios/ci.rst @@ -38,7 +38,7 @@ Mule? Tox --- -`tox `_ is an automation tool providing +`tox `_ is an automation tool providing packaging, testing and deployment of Python software right from the console or CI server. It is a generic virtualenv management and test command line tool which provides the following features: From 8b9e3bb877411f86e56cb1d31fb0e05ef167053d Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:23:15 -0700 Subject: [PATCH 17/24] Update Travis CI URL because always https. --- docs/scenarios/ci.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/scenarios/ci.rst b/docs/scenarios/ci.rst index 1bb2af534..6e2025d91 100644 --- a/docs/scenarios/ci.rst +++ b/docs/scenarios/ci.rst @@ -53,7 +53,7 @@ which provides the following features: Travis-CI --------- -`Travis-CI `_ is a distributed CI server which builds tests +`Travis-CI `_ is a distributed CI server which builds tests for open source projects for free. It provides multiple workers to run Python tests on and seamlessly integrates with Github. You can even have it comment on your Pull Requests whether this particular changeset breaks the build or not. So if you are @@ -83,6 +83,6 @@ notifications, before and after steps and much more. The `travis-ci docs `_ explain all of those and are very thorough. -In order to activate testing for your project, go to `the travis-ci site `_ +In order to activate testing for your project, go to `the travis-ci site `_ and login with your Github account. Then activate your project in your profile settings and that's it. From now on, your project's tests will be run on every push to Github. From edf7f04e491e7b4aa799e655ea0cf92369f501c8 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:26:15 -0700 Subject: [PATCH 18/24] Use Wayback Machine to resolve a dead link. --- docs/scenarios/db.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/db.rst b/docs/scenarios/db.rst index 5d12c2a51..6d6d6ce7a 100644 --- a/docs/scenarios/db.rst +++ b/docs/scenarios/db.rst @@ -11,7 +11,7 @@ Nearly all Python database modules such as `sqlite3`, `psycopg` and Tutorials that explain how to work with modules that conform to this interface can be found `here `__ and -`here `__. +`here `__. SQLAlchemy ---------- From 709823707823db459e8c02d9343495eb4ecedd37 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 01:27:22 -0700 Subject: [PATCH 19/24] Add Qt link. --- docs/scenarios/gui.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/gui.rst b/docs/scenarios/gui.rst index 4dbc650b8..d85a83663 100644 --- a/docs/scenarios/gui.rst +++ b/docs/scenarios/gui.rst @@ -4,7 +4,7 @@ GUI Applications Qt -- -Qt is a cross-platform application framework that is widely used for developing +`Qt `_ is a cross-platform application framework that is widely used for developing software with a GUI but can also be used for non-GUI applications. PySide From 55fc9b08e41516eddb856c83ba441883f0a7781d Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:42:32 -0700 Subject: [PATCH 20/24] Update Gunicorn help link. --- docs/scenarios/web.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scenarios/web.rst b/docs/scenarios/web.rst index 3e40f16cb..d074752bb 100644 --- a/docs/scenarios/web.rst +++ b/docs/scenarios/web.rst @@ -152,7 +152,7 @@ lightweight, easy to use, and uses many UNIX idioms. Gunicorn is not designed to face the internet -- it was designed to run behind Nginx which buffers slow requests and takes care of other important considerations. A sample setup for Nginx + Gunicorn can be found in the -`Gunicorn help `_. +`Gunicorn help `_. .. _uwsgi-ref: From 788390e74f1fbd3c4457d8b981134ed9e2a5d501 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:44:32 -0700 Subject: [PATCH 21/24] Update link to Gondor documentation. --- docs/scenarios/web.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/scenarios/web.rst b/docs/scenarios/web.rst index d074752bb..4574096e7 100644 --- a/docs/scenarios/web.rst +++ b/docs/scenarios/web.rst @@ -235,9 +235,7 @@ and Pinax applications. Gondor supports Django versions 1.2 and 1.3 on Python version 2.7, and can automatically configure your Django site if you use ``local_settings.py`` for site-specific configuration information. -Gondor publishes guides to deploying `Django projects -`_ and `Pinax projects -`_ on their platform. +Gondor has a guide on deploying `Django projects `_. Templating From cf93e79274c467d7ea82fa2b31c0561fffe54e4a Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:49:59 -0700 Subject: [PATCH 22/24] Update virtualenvwrapper documentation links. --- docs/dev/virtualenvs.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dev/virtualenvs.rst b/docs/dev/virtualenvs.rst index ee6ace244..c08f1118e 100644 --- a/docs/dev/virtualenvs.rst +++ b/docs/dev/virtualenvs.rst @@ -60,7 +60,7 @@ where they were placed. virtualenvwrapper ----------------- -`virtualenvwrapper `_ +`virtualenvwrapper `_ provides a set of commands which makes working with virtual environments much more pleasant. It also places all your virtual environments in one place. @@ -72,7 +72,7 @@ To install (make sure **virtualenv** is already installed): $ export WORKON_HOME=~/Envs $ source /usr/local/bin/virtualenvwrapper.sh -(`Full virtualenvwrapper install instructions `_.) +(`Full virtualenvwrapper install instructions `_.) For Windows, you can use the `virtualenvwrapper-powershell `_ clone. @@ -136,7 +136,7 @@ Other useful commands ``lssitepackages`` Shows contents of ``site-packages`` directory. -`Full list of virtualenvwrapper commands `_. +`Full list of virtualenvwrapper commands `_. autoenv ------- From f51141c973d2fcd6abd5d45be503917756de96e4 Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:54:40 -0700 Subject: [PATCH 23/24] Update link to 'A Byte of Python'. --- docs/intro/learning.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/intro/learning.rst b/docs/intro/learning.rst index 852e786cb..e5d074259 100644 --- a/docs/intro/learning.rst +++ b/docs/intro/learning.rst @@ -92,7 +92,7 @@ A free introductory book that teaches python at the beginner level, it assumes n previous programming experience. `A Byte of Python for Python 2.x `_ - `A Byte of Python for Python 3.x `_ + `A Byte of Python for Python 3.x `_ Advanced From 2cd385e61c758661cf43518b5080dcdc7267cf1e Mon Sep 17 00:00:00 2001 From: kuyan Date: Sat, 24 Aug 2013 11:56:16 -0700 Subject: [PATCH 24/24] Add link to 'Python in a Nutshell'. --- docs/intro/learning.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/intro/learning.rst b/docs/intro/learning.rst index e5d074259..b8e31c499 100644 --- a/docs/intro/learning.rst +++ b/docs/intro/learning.rst @@ -162,7 +162,6 @@ as writing C extensions. `Python in a Nutshell `_ - The Python Language Reference ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~