{ "info": { "author": "Derek Anderson", "author_email": "public@kered.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3" ], "description": ".. figure:: https://user-images.githubusercontent.com/2049665/34214474-37c285c6-e568-11e7-963e-407533d01d80.png\n :alt: image\n\n image\n\nBottle-React\n============\n\n***NOW SUPPORTS FLASK!*** See\n`examples/hello\\_world/run\\_flask.py `__.\n\nDescription\n-----------\n\nThis library allows you to return react components from either Bottle or\nFlask. Originally created for https://www.hvst.com/.\n\nExample (Hello World)\n---------------------\n\nAssume you have a normal JSX file ``hello_world.jsx``:\n\n.. code:: js\n\n var HelloWorld = React.createClass({\n render: function() {\n return (\n
\n

Hello {this.props.name}!

\n
\n Thanks for trying bottle-react!\n
\n
\n );\n }\n })\n bottlereact._register('HelloWorld', HelloWorld)\n\nAnd some python code:\n\n.. code:: python\n\n app = bottle.Bottle()\n br = BottleReact(app)\n\n @app.get('/')\n def root():\n return br.render_html(\n br.HelloWorld({'name':'World'})\n )\n\nWhen your route is called the react component will be rendered. See\n`examples/hello\\_world `__ for details.\n\nPrinciples\n----------\n\nWhy did we develop this? We had several goals:\n\n- [x] Don't cross-compile javascript during development.\n\nCompiling with ``webpack`` is too slow for non-trivial applications.\n(One of the niceties about web developement it ``alt-Tab``/``ctrl-R`` to\nsee your changes.) And it causes too many subtle bugs between dev and\nprod that waste developer resources.\n\n- [x] Don't merge all javascript into one ginormous bundle.\n\nMaking your user download a 1.5Mb ``kitchensink.min.js`` every\ndeployment is horrible. And 99% of it isn't used on most pages. Loading\n40kb total from multiple resources with HTTP keep-alive takes just a few\nms per file and is much faster in practice.\n\n- [x] React components should be composable from Python.\n\nA lot of our routes look like this:\n\n.. code:: python\n\n @app.get('/something')\n def something():\n user = bottle.request.current_user\n return br.render_html(\n br.HvstApp({'user':user.to_dict()}, [\n br.HelloWorld({'name':user.name}),\n ])\n )\n\nThe React component ``HvstApp`` (which renders the title bar and left\nnav) is taking two parameters. The first is a ``dict`` that will be\npassed as the JSON props to the React component. The second is a\n``list`` that will become the children. This list can (and usually does)\ncontain other React components.\n\nInstall\n-------\n\n.. code:: python\n\n sudo pip install bottle-react\n\nNGINX Integration\n-----------------\n\nBy default (in production mode) ``bottle-react`` writes to\n``/tmp/bottlereact/hashed-assets/``. To make NGINX serve these files\ndirectly, use the following:\n\n::\n\n location ^~ /__br_assets__/ {\n alias /tmp/bottlereact/hashed-assets/;\n expires max;\n }\n\nServer Side Rendering\n---------------------\n\nTo use server side rendering, please install the npm package\n```node-jsdom`` `__ with:\n\n::\n\n $ sudo npm install -g node-jsdom\n\nThen pass either ``True`` or a callable into the ``render_server``\nparameter. For example:\n\n.. code:: python\n\n def render_server():\n ua = bottle.request.environ.get('HTTP_USER_AGENT')\n return util.is_bot(ua)\n\nBTW... Before enabling it for everyone, run some benchmarks. We find\nthat it has very little impact on total page load time, at a\nconsiderable CPU expense and double the downloaded HTML size. So we only\ndo it for search bots (as you can see in the example above).\n\nYou will also likely have to shim some missing browser features. At\nminimum, React likes to put itself under ``window`` when run inside\n``nodejs``, so we have:\n\n.. code:: javascript\n\n // react in nodejs will put itself under window\n if(typeof React == 'undefined') {\n React = window.React;\n }\n\nIn our ``application.js``, since all our code expects it to be a global.\nLikewise, for things ``node-jsdom`` hasn't yet implemented, you'll\nlikely find a few checks are needed, like:\n\n.. code:: javascript\n\n if (typeof DOMParser=='undefined') {\n // i guess we're not using DOMParser inside nodejs...\n }\n\nDocumentation\n-------------\n\nSee the `full documentation `__.\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/keredson/bottle-react", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "bottle-react", "package_url": "https://pypi.org/project/bottle-react/", "platform": "", "project_url": "https://pypi.org/project/bottle-react/", "project_urls": { "Homepage": "https://github.com/keredson/bottle-react" }, "release_url": "https://pypi.org/project/bottle-react/16.2.4/", "requires_dist": null, "requires_python": "", "summary": "A microframework for Bottle+React projects.", "version": "16.2.4" }, "last_serial": 3865463, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "7888bd05839742ce2416ef2fdaa6685b", "sha256": "2bab9cef64a37dbc653a1db1a793491543d3e5cddd854a2babdccdaad8d183ff" }, "downloads": -1, "filename": "bottle-react-0.0.1.tar.gz", "has_sig": false, "md5_digest": "7888bd05839742ce2416ef2fdaa6685b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1224, "upload_time": "2016-11-21T23:07:44", "url": "https://files.pythonhosted.org/packages/10/c7/2bfb4c9ce14ae18f40940a68810c94d8e201a28e3d348a2f8d81662ac4ef/bottle-react-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "70b0d1f3de8391d121e313e48a602f42", "sha256": "0d25a06d98a03294cc37276d226207c62adfdff2118038c0749f1d4b97650303" }, "downloads": -1, "filename": "bottle-react-0.1.0.tar.gz", "has_sig": false, "md5_digest": "70b0d1f3de8391d121e313e48a602f42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6472, "upload_time": "2016-11-22T22:12:26", "url": "https://files.pythonhosted.org/packages/3c/e6/fcf506351d791cce46cdf35bf4daabf7686210c572a7c0a4764e1c3608c4/bottle-react-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "ddaa1023be486a278381838884115a0c", "sha256": "aeb6cb5cd4a1cc0b0073a79b6cab1ed6ec56a48e8374934300313f1aabbf735d" }, "downloads": -1, "filename": "bottle-react-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ddaa1023be486a278381838884115a0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6471, "upload_time": "2016-11-22T23:24:11", "url": "https://files.pythonhosted.org/packages/39/3c/c020ee02cfea25ed3bd5afee7d1d6d96cfe118b3db7d2fbab469bfb4631c/bottle-react-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "7360194219b0ab647319bfadf478ba65", "sha256": "4cfef235b9c575e3a77ca2750aa4a93c315f551676e15118a163e388b0752c68" }, "downloads": -1, "filename": "bottle-react-0.1.2.tar.gz", "has_sig": false, "md5_digest": "7360194219b0ab647319bfadf478ba65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6471, "upload_time": "2016-11-23T16:11:41", "url": "https://files.pythonhosted.org/packages/f8/aa/4cf497bf5adab7f94280daf59894fd6be13823f2b1884cba808f0165fdfb/bottle-react-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "60e65366a952abc7186cb21f60a728b7", "sha256": "a0f196529c8ca5f3470f67cb7519ab656405360c029f1bb491639b91d8a91521" }, "downloads": -1, "filename": "bottle-react-0.1.3.tar.gz", "has_sig": false, "md5_digest": "60e65366a952abc7186cb21f60a728b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6484, "upload_time": "2016-11-23T17:00:45", "url": "https://files.pythonhosted.org/packages/9d/67/b4bc3e65d33192660ab67dbef0b2d2113cfe9ec5408db6618b04349b037a/bottle-react-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "953c6bf7c6b7700cd6ae87adfad2152d", "sha256": "e49d9ddfd4172048e4d48b224ea354fa6482271e5f59f5a8e284c11cc8ae3d90" }, "downloads": -1, "filename": "bottle-react-0.2.0.tar.gz", "has_sig": false, "md5_digest": "953c6bf7c6b7700cd6ae87adfad2152d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6771, "upload_time": "2017-01-03T18:35:57", "url": "https://files.pythonhosted.org/packages/09/fd/5c0af1d3e058dae6aa7383c7bb21a132e23a9c6219692dff0a752bdc8817/bottle-react-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "949e7f7657561ddfa1dd0a942d1bb7d0", "sha256": "285aa3a9b181021c2af17ab95c5a03ef32b23b9c3f63578b66606efd82249642" }, "downloads": -1, "filename": "bottle-react-0.3.0.tar.gz", "has_sig": false, "md5_digest": "949e7f7657561ddfa1dd0a942d1bb7d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6868, "upload_time": "2017-01-04T22:28:39", "url": "https://files.pythonhosted.org/packages/8d/c2/2777d919a9271e48d23c47383d599069ffcadd534cc8065b316dab0299b3/bottle-react-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "4b541a4d4f5d8a1d836128ada4d67063", "sha256": "02e6bfccdacc1135b158ab303633918938b58c88f4134d282f0e04fec5bea61e" }, "downloads": -1, "filename": "bottle-react-0.4.0.tar.gz", "has_sig": false, "md5_digest": "4b541a4d4f5d8a1d836128ada4d67063", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6894, "upload_time": "2017-02-02T19:17:14", "url": "https://files.pythonhosted.org/packages/bc/86/f076eacba182a7eee080a9a474d061e36df428891f211cfe4d65a3c197b3/bottle-react-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "b7c15ade9b6f81161c8e3cab100e0625", "sha256": "d54b222e9ff0422eb0b38c3bd864f211be98d36e9064fae51efe152948b151bc" }, "downloads": -1, "filename": "bottle-react-0.4.1.tar.gz", "has_sig": false, "md5_digest": "b7c15ade9b6f81161c8e3cab100e0625", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7095, "upload_time": "2017-02-13T19:23:59", "url": "https://files.pythonhosted.org/packages/f7/61/f286debbc28f9ce7bc8443d270db45642c2c53d4bdbc69f996ebea3b3158/bottle-react-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "bade1d22ad8fa8266e02364d9fd16b82", "sha256": "41608251aef6186364e781968f7445b403d614ce168de09757ca5d27aae4801d" }, "downloads": -1, "filename": "bottle-react-0.4.2.tar.gz", "has_sig": false, "md5_digest": "bade1d22ad8fa8266e02364d9fd16b82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7122, "upload_time": "2017-03-03T15:51:35", "url": "https://files.pythonhosted.org/packages/30/31/4b0a9693fcd8b23995a8aec13b9d9fc3cbe4e48d690d3ae3fb5c3e576d3c/bottle-react-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "cb15daeb3526503397fb214dea39624a", "sha256": "8bca15636e27eaffa728826a206b3da7dce38f56508c8437538136d9a5306759" }, "downloads": -1, "filename": "bottle-react-0.4.3.tar.gz", "has_sig": false, "md5_digest": "cb15daeb3526503397fb214dea39624a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7123, "upload_time": "2017-04-27T20:06:24", "url": "https://files.pythonhosted.org/packages/96/f5/03d62af6ddfafaac7fa203e61fbd9ec805285ed41804c064d88e822d6c7c/bottle-react-0.4.3.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "6f02769273be1f859a3e2ceb3b92d301", "sha256": "91e9d36d13054fead2b686af5351588a2378ff51ddc774d8a3d978f5dc8b16e6" }, "downloads": -1, "filename": "bottle-react-0.5.0.tar.gz", "has_sig": false, "md5_digest": "6f02769273be1f859a3e2ceb3b92d301", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7358, "upload_time": "2017-05-01T22:49:36", "url": "https://files.pythonhosted.org/packages/be/0b/deb8e322fc7ba97c0e48df3fdaf56381adebb3de3aac958ecefb69c980cf/bottle-react-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "239042a7994b4fde99d14eb62803138a", "sha256": "4ea79dc3076221e0a645a746f37dc1c8b636436f80946108b3b29ff6dc3e832e" }, "downloads": -1, "filename": "bottle-react-0.6.0.tar.gz", "has_sig": false, "md5_digest": "239042a7994b4fde99d14eb62803138a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6812, "upload_time": "2017-05-10T21:15:39", "url": "https://files.pythonhosted.org/packages/3f/1f/1fe1312932727c021bde1479826c6291ab0946994488c86895ae74ec2a05/bottle-react-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "43bfd077355da1c256c5807bb9eb6335", "sha256": "030c07df701b88b8620eec8f2729cef6e0227e9982ea623fe6e7e6b701bcdf04" }, "downloads": -1, "filename": "bottle-react-0.6.1.tar.gz", "has_sig": false, "md5_digest": "43bfd077355da1c256c5807bb9eb6335", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6818, "upload_time": "2017-05-11T20:54:45", "url": "https://files.pythonhosted.org/packages/b2/73/7b1927bc17a679e15c7028e13fe89f2457559c719360c91524a274f8b3ca/bottle-react-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "586eeb461d58495096f9fc9d745c3659", "sha256": "1ffe59a3bf3ab7e01d66c6b99881855e8aacbb97a962130864f1a84853956733" }, "downloads": -1, "filename": "bottle-react-0.6.2.tar.gz", "has_sig": false, "md5_digest": "586eeb461d58495096f9fc9d745c3659", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6812, "upload_time": "2017-05-11T23:09:49", "url": "https://files.pythonhosted.org/packages/77/fd/71408614398baa67c93c21ee0a76a803f735c5f0235e609a12dabfd4d48d/bottle-react-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "f5ae9726732a6e41dffa6e29e1022cd3", "sha256": "9fe2925e04536f69c3dbafa26131c306d402ebd8fd79119ae08ce370fbf4b661" }, "downloads": -1, "filename": "bottle-react-0.6.3.tar.gz", "has_sig": false, "md5_digest": "f5ae9726732a6e41dffa6e29e1022cd3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6799, "upload_time": "2017-05-12T14:28:58", "url": "https://files.pythonhosted.org/packages/75/fb/ff98901c572df687df43080d8234e6ce9b289799fff73663e7579eb304ba/bottle-react-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "84656bcf468050cc55f0aa16feb9f9ea", "sha256": "3ef36ebef38cd34497be56c14e088cda94bca8e227a48616a8036dea121341f9" }, "downloads": -1, "filename": "bottle-react-0.6.4.tar.gz", "has_sig": false, "md5_digest": "84656bcf468050cc55f0aa16feb9f9ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6883, "upload_time": "2017-05-12T17:35:16", "url": "https://files.pythonhosted.org/packages/50/d2/826b0f637867e8b1aa1f9513848b43e6e2a4d31face7e236fc0130b849e7/bottle-react-0.6.4.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "7a0362ef96ff23fb0a60933556c2b333", "sha256": "ca50dcf1a04fc53a19e46ae76796d86faa5840029fd5e56d2a0a6d116c2150db" }, "downloads": -1, "filename": "bottle-react-0.7.0.tar.gz", "has_sig": false, "md5_digest": "7a0362ef96ff23fb0a60933556c2b333", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10479, "upload_time": "2017-12-13T20:42:02", "url": "https://files.pythonhosted.org/packages/ef/1a/726a9abaa2588fd8a513674f7ab25244ab3953c88f147de4a231100da417/bottle-react-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "37601b96ebd87b48e6c5ff98de95a233", "sha256": "b026237858ca0d01435fef56d2ea43ac6889c0b92b9b3866b75fd7d0d6b299ad" }, "downloads": -1, "filename": "bottle-react-0.7.1.tar.gz", "has_sig": false, "md5_digest": "37601b96ebd87b48e6c5ff98de95a233", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11154, "upload_time": "2017-12-14T19:18:02", "url": "https://files.pythonhosted.org/packages/4e/a2/08aa8682823f8f527f14683f50352161c39fe7b76ff668aba7fe5450e692/bottle-react-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "03de41793c6ab9b8ca430d77cfd9bd99", "sha256": "6e9b8fed5094abb8992439cb0ddc904ba7ff47b021f14c5a2d75ee706253e100" }, "downloads": -1, "filename": "bottle-react-0.7.2.tar.gz", "has_sig": false, "md5_digest": "03de41793c6ab9b8ca430d77cfd9bd99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10910, "upload_time": "2018-02-05T22:56:14", "url": "https://files.pythonhosted.org/packages/48/22/10acf801e51d359676516ab7700d8f4547d5b92de65f0082d46c0a282102/bottle-react-0.7.2.tar.gz" } ], "16.2.0": [ { "comment_text": "", "digests": { "md5": "162518e9249d45af9aaa05a35625be69", "sha256": "c2a8ab3b7cf0004c7d40f24b023724f0d99c48f59f573f187a572d617ff17dad" }, "downloads": -1, "filename": "bottle-react-16.2.0.tar.gz", "has_sig": false, "md5_digest": "162518e9249d45af9aaa05a35625be69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10232, "upload_time": "2018-03-20T22:01:45", "url": "https://files.pythonhosted.org/packages/e0/5b/4de1a0481809550a1d391930afb52c05865472658d50c460920cb9f22642/bottle-react-16.2.0.tar.gz" } ], "16.2.1": [ { "comment_text": "", "digests": { "md5": "c540fe16b9faf7675a75c64f11b2c6cd", "sha256": "c484033c5cf7d044bb5d352e127673822972b7112ef2d0e8b43734441f17ea34" }, "downloads": -1, "filename": "bottle-react-16.2.1.tar.gz", "has_sig": false, "md5_digest": "c540fe16b9faf7675a75c64f11b2c6cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10263, "upload_time": "2018-03-27T19:16:33", "url": "https://files.pythonhosted.org/packages/66/53/3b0019ec2919c2c1cd22486e75acf6100fb9d88216ea0be3542b3ad23a0d/bottle-react-16.2.1.tar.gz" } ], "16.2.2": [ { "comment_text": "", "digests": { "md5": "2f63507b62d0dc801f6537b9727b5105", "sha256": "b397c70038e9cf9f04ec980a3e74f0ad6266ab5a0d2341ed95c10e13681b0048" }, "downloads": -1, "filename": "bottle-react-16.2.2.tar.gz", "has_sig": false, "md5_digest": "2f63507b62d0dc801f6537b9727b5105", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10304, "upload_time": "2018-03-29T16:58:34", "url": "https://files.pythonhosted.org/packages/87/d3/f2afcfa5fa10e80b5c0a92a009ce48917ca814f3905d446cf58b4e34b9d5/bottle-react-16.2.2.tar.gz" } ], "16.2.3": [ { "comment_text": "", "digests": { "md5": "69c483451ce27ce28a968921253da538", "sha256": "4427cf940e083716e448b93dc0e166f11c3675ab59ce57671266309b4ffce332" }, "downloads": -1, "filename": "bottle-react-16.2.3.tar.gz", "has_sig": false, "md5_digest": "69c483451ce27ce28a968921253da538", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10285, "upload_time": "2018-05-14T18:09:16", "url": "https://files.pythonhosted.org/packages/8f/25/911ca8cc573e5aca425045efb4de7af8bb3a6aec08967544af80c07fe9b3/bottle-react-16.2.3.tar.gz" } ], "16.2.4": [ { "comment_text": "", "digests": { "md5": "9349ac7f237c6258ba66d9349c68c010", "sha256": "6caf4416393ad333d609520dda288da45fd6998593dacbc8ce2264b0c6cd6d20" }, "downloads": -1, "filename": "bottle-react-16.2.4.tar.gz", "has_sig": false, "md5_digest": "9349ac7f237c6258ba66d9349c68c010", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10288, "upload_time": "2018-05-15T17:17:57", "url": "https://files.pythonhosted.org/packages/d3/93/cde6103aefafa09185801358e04359d5f4c042a3e134e3b79ee777d4922a/bottle-react-16.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9349ac7f237c6258ba66d9349c68c010", "sha256": "6caf4416393ad333d609520dda288da45fd6998593dacbc8ce2264b0c6cd6d20" }, "downloads": -1, "filename": "bottle-react-16.2.4.tar.gz", "has_sig": false, "md5_digest": "9349ac7f237c6258ba66d9349c68c010", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10288, "upload_time": "2018-05-15T17:17:57", "url": "https://files.pythonhosted.org/packages/d3/93/cde6103aefafa09185801358e04359d5f4c042a3e134e3b79ee777d4922a/bottle-react-16.2.4.tar.gz" } ] }