{ "info": { "author": "Chris Bednarski", "author_email": "chris@cbednarski.com", "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 :: 2.7", "Programming Language :: Python :: 3.6" ], "description": "Icecake\n=======\n\nA cool and easy static site builder.\n\nJinja templates. Markdown. Pygments source code higlighting. Blog-aware.\nAtom feeds. Live preview. Clean URLs. MIT license. Minimal design.\nWords. Dots.\n\n|Build Status|\n\nDesigned for Simplicity\n-----------------------\n\nIcecake aims to be simple. It has a simple license. It does not support\nlots of features. For example, it does not support plugins, themes,\ndifferent templating backends, or any of a long list of other features.\n\nIcecake is less than 750 lines of python and still has everything you\nneed to have a pleasant time writing and updating your personal website\nor blog.\n\nI hope that this simplicity makes it easy for you to read the code and\nadd any feature(s) you can't live without.\n\nIf you are already familiar with how static site builders work and\nyou're comfortable with Jinja templates, you can use the following\ncommands to get started:\n\n::\n\n pip install icecake\n icecake init mysite.com\n cd mysite.com\n icecake preview\n\nIf these topics are new to you, keep reading for more details!\n\nInstallation\n------------\n\n::\n\n pip install icecake\n\n How do I get ``pip``?\n\n``pip`` usually comes with Python. If it's missing, you can get it\n`here `__.\nSince python 2 is nearing end of life, you probably want to use\n``python3`` to run ``get-pip`` to make sure ``pip`` uses ``python3``\nunder the hood.\n\nCreating a Website\n==================\n\nFirst, we'll setup a site:\n\n::\n\n icecake init mysite\n cd mysite\n\nIt will look something like this:\n\n::\n\n .\n \u251c\u2500\u2500 content\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 articles\n \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 hello-world.md\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 articles.html\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 atom.xml\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 index.html\n \u251c\u2500\u2500 layouts\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 basic.html\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 markdown.html\n \u251c\u2500\u2500 output (empty for now)\n \u2514\u2500\u2500 static\n \u2514\u2500\u2500 css\n \u251c\u2500\u2500 main.css\n \u2514\u2500\u2500 syntax.css\n\nThe starter site includes a minimal theme and the articles folder will\nhelp you start blogging right away (if you want to do that).\n\nRun ``icecake preview`` to view the site. The site will be automatically\nregenerated when you make changes.\n\nGenerating the Site\n-------------------\n\nYou can run ``icecake build`` to build your site. Icecake will generate\neach page and then exit (or error). If you get an error you can use\n``icecake build --debug`` to get some more detailed information about\nwhat is happening.\n\nInternally, there is a 3 step process for generating the site.\n\n1. Icecake reads all of the files under ``content`` and renders them.\n Markdown is converted to HTML and Jinja templates are evaluated.\n2. Icecake writes all of the rendered files into ``output``.\n ``articles/hello-world.md`` becomes\n ``articles/hello-world/index.html`` so you get nice URLs on any\n hosting platform.\n3. Files from ``static`` are copied as-is to ``output`` (using the same\n directory structure as the originals).\n\nA page's URL is based on the filename, without the file extension. For\nexample, ``articles/hello-world.md`` becomes ``articles/hello-world/``.\nThere is a special exception for files named ``index.html`` or\n``index.md``. We usually don't want these to end up as e.g.\n``articles/index/``. If you do actually want \"index\" to be in the URL\nyou can explicitly set this by specifying the ``slug``.\n\nWhen you're ready, you can use ``rsync`` or ``s3cmd`` or an FTP client\nto publish ``output`` to the web.\n\nEditing Content\n---------------\n\nYou can write content in either\n`Markdown `__ or\nHTML. Markdown files (idenfified by ``.md`` or ``.markdown``) are\nautomatically parsed and rendered using the ``markdown.html`` template.\nSource code blocks are highlighted using\n`Pygments `__.\n\nHTML files are evaluating using Jinja. Refer to the `Jinja Template\nDesigner\ndocumentation `__\nfor details. We will also highlight some important Icecake-specific\nfeatures related to templates below.\n\nMarkdown files are handled as a special case inside Icecake, so you\ncan't mix Markdown and Jinja in the same file. However, you can\ncustomize the markdown template by editing ``markdown.html`` or by\noverriding the ``template`` metadata field and specifying a new\ntemplate. See the **Page Metadata** section for more info.\n\nPage Metadata\n-------------\n\nAt the top of each file you can add some metadata. You should add this\nto all your markdown pages. Metadata is usually not needed for HTML\npages.\n\n::\n\n title = Installing Ruby the Correct Way\n date = 2013-03-27\n tags = ruby bundler rbenv ruby-build\n slug = installing-ruby\n template = custom-markdown.html\n ++++\n\n Your content starts here!\n\n- ``title`` (required) The title of your page\n- ``date`` (required) The date your page is published (for display\n only)\n- ``tags`` (optional) Space-separated list of tags, which can be used\n to categorize your page.\n- ``slug`` (optional) This will be used instead of the filename in the\n URL\n- ``template`` (optional) This overrides the template\n (``markdown.html`` by default) used to render the page\n\nSome other metadata are generated for you automatically:\n\n- ``filepath`` Relative path of the file inside ``content``, such as\n ``articles/hello-world.md``\n- ``folder`` Just the folder part like ``articles/``\n- ``ext`` The file extension (``.html`` or ``.md`` for example)\n- ``url`` The path part of the URL, such as ``/articles/hello-world/``\n\nThese metadata are important not just to make your page display\ncorrectly, but also to query other pages in your templates. You will do\nthis to make a list of all your pages, for example.\n\nRendering Metadata\n~~~~~~~~~~~~~~~~~~\n\nWhenever you are writing a template the current page's metadata are\navailable via their names, so you can show the page title via\n``{{ title }}`` or the publish date via ``{{ date }}``. You can also\nwrite ``if`` statements that reference this information.\n\nTo show a list of tags for your page you can write something like this:\n\n::\n\n

{{ title }}

\n\n

Tagged\n {% for tag in tags %}\n {{ tag }}\n {% endfor %}\n

\n\nWhen Is Metadata **Required**?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMetadata is only required if you reference it somewhere, such as using\n``{{ title }}`` or when using ``site`` (see below). I recommend always\nusing it on Markdown files and only using it on HTML if you have to. The\ndefault Markdown templates assume that you have provided titles, tags,\nand publish dates in your metadata and won't work properly if these are\nmissing.\n\nThere are a lot of things you can accomplish via Jinja template\nvariables so you don't necessarily need to use metadata make your site\nto show up the way you want.\n\n**Warning:** if you try to query a page using ``site`` (below) and a\npiece of metadata is missing, your query will fail.\n\nSite Helpers\n============\n\nSite helpers are special features available in templates that allow you\nto query all pages and tags across your site. For example, if you want\nto incldue a list of your 5 latest blog entries on your homepage, the\nsite helpers can do this for you.\n\nQuerying Pages\n--------------\n\nYou can search across the pages on your site using ``site.pages``.\n\n::\n\n site.pages(option=value, ...)\n\nWith no arguments, ``site.pages`` includes *all* pages on your site. You\ncan filter this list using the following filter options:\n\n- ``path`` Filter the list of pages based on the path under\n ``content/``. The ``path`` string is compared using ``startswith()``\n so ``cake`` will match ``cake/chocolate`` but not ``chocolate/cake``.\n- ``tag`` Filter based on a tag. If a page has the tag you specified,\n it will be included.\n- ``order`` Sort the list of results by the specified field, like\n ``date`` or ``title``. Use ``-date`` to reverse the order.\n- ``limit`` Limit the number of items you get back. The limit you\n specify can be higher that the number of actual results; you'll just\n get as many as are available.\n\nYou can combine these options much like SQL. They are evaluated in the\norder listed above, so a ``path`` filter is applied first, second\n``tag``, third ``order``, and finally ``limit``.\n\nWarning: If you try to sort based on a metadata property that is not\nspecified on every item, sort will fail! Icecake does not enforce that\nall of your pages have the same metadata so this is up to you. Use\n``icecake build --debug`` if you're having trouble figuring out which\nfile(s) are missing which field(s).\n\nWe'll show two examples of how to use this below.\n\nList Articles Tagged \"Blog\"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can use this to create a blog index page, for example:\n\n::\n\n {% for page in site.pages(tag=\"blog\", order=\"title\") %}\n {{ title }}\n {% endfor %}\n\nList 5 Recent Articles\n~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n {% for page in site.pages(path=\"articles/\", order=\"-date\", limit=5) %}\n {{ title }}\n {% endfor %}\n\nIf you want to match a folder named ``articles/`` but not a file named\n``articles.html``, make sure to include ``/`` at the end!\n\nGenerating an Atom Feed\n-----------------------\n\nYou can use ``site.atom`` to create an Atom feed for specific pages on\nyour site. The query behavior works exactly the same way as\n``site.pages`` so please refer to that for details.\n\nUnlike ``site.pages`` the atom feed is simply printed out -- you don't\nneed to iterate over it.\n\n::\n\n {{\n site.atom(\n path=\"articles/\",\n order=\"-date\",\n site_url=\"http://example.com\",\n feed_url=\"http://example.com\"+url,\n feed_title=\"My Blog\",\n feed_subtitle=None,\n author=\"Me!\"\n )\n }}\n\nObviously you should fill in your name and site URL above. Note that\nmost of these options are required in order for the feed to work\ncorrectly, but if you want to skip one you can specify ``None`` as the\nvalue. Also, you can use ``\"https://yoursite\"+url`` to automatically set\nthe feed URL to point to the current page.\n\nListing Tags\n------------\n\nYou can use ``site.tags`` to list all of the tags in use on your site.\nYou cannot currently query or filter the list of tags.\n\n::\n\n {% for tag in site.tags() %}\n ...\n {% endfor %}\n\nDon't confuse this with ``tags``!\n\nQuestions? Problems? Suggestions?\n---------------------------------\n\nOpen an issue! https://github.com/cbednarski/icecake/issues\n\n.. |Build Status| image:: https://travis-ci.org/cbednarski/icecake.svg?branch=master\n :target: https://travis-ci.org/cbednarski/icecake\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cbednarski/icecake", "keywords": "static site generator builder icecake", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "icecake", "package_url": "https://pypi.org/project/icecake/", "platform": "", "project_url": "https://pypi.org/project/icecake/", "project_urls": { "Homepage": "https://github.com/cbednarski/icecake" }, "release_url": "https://pypi.org/project/icecake/0.6.1/", "requires_dist": null, "requires_python": "", "summary": "An easy and cool static site generator", "version": "0.6.1" }, "last_serial": 5173524, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6f86b6c662bc666d3f210343e9d4c0df", "sha256": "9136e743cff6144f98289aac4837e5138a35d120c878add7bde6a212d3042cb0" }, "downloads": -1, "filename": "icecake-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6f86b6c662bc666d3f210343e9d4c0df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5544, "upload_time": "2016-03-24T05:11:30", "url": "https://files.pythonhosted.org/packages/0a/1d/47e6c714670540a994d55e6d21976e9dbab5652767b94c749e087a69cbc6/icecake-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1f0aef79ea98862af9f4cd8c7c9c2a50", "sha256": "9df4ff027563f4f74d2a050b0720bddb736e7aae73fce0a87ba955ec8f3c1e11" }, "downloads": -1, "filename": "icecake-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1f0aef79ea98862af9f4cd8c7c9c2a50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13697, "upload_time": "2016-03-24T16:50:06", "url": "https://files.pythonhosted.org/packages/09/fc/eb687063843596686f31e3f93574448f63bf46fb61ecf7e3de9ce75d041f/icecake-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "abdf492b76bc7fa6ee8bd1b0af7b28e5", "sha256": "479fd9276091614a3e2ac5163c6f2780f223f672a99db012cd11dc0e37679c7f" }, "downloads": -1, "filename": "icecake-0.2.1.tar.gz", "has_sig": false, "md5_digest": "abdf492b76bc7fa6ee8bd1b0af7b28e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19018, "upload_time": "2016-03-24T17:04:45", "url": "https://files.pythonhosted.org/packages/43/84/c4fd99aae610ee89d6d76044dcad259f7a50a9c690cee88996da3ce2bc88/icecake-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "0454df8e2701866087057948e81f9dab", "sha256": "daf9f9fcb776af593a8f9dbcf559581fdeefe6b85cfe1daedf37daacd646a3ef" }, "downloads": -1, "filename": "icecake-0.2.2.tar.gz", "has_sig": false, "md5_digest": "0454df8e2701866087057948e81f9dab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19014, "upload_time": "2016-03-24T17:17:14", "url": "https://files.pythonhosted.org/packages/79/8e/2d3f95453c8fa9841f641ba0a90cd25e7a75ac6403228aa06d8ee711f478/icecake-0.2.2.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "aa3dbcd0c8e23635399413c88447b23e", "sha256": "80ecb11f90fd146704d7ac1aa6c28be7d3c287efa9de06ff2e67d0fa9e0e1b66" }, "downloads": -1, "filename": "icecake-0.3.1.tar.gz", "has_sig": false, "md5_digest": "aa3dbcd0c8e23635399413c88447b23e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21212, "upload_time": "2016-03-29T20:34:37", "url": "https://files.pythonhosted.org/packages/fd/ea/e6e6db02c94c709425bfef5ba20fcc25b4d29fe8178708425dbe43712926/icecake-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "d4a1d54ccfc15ead187d7caa3f491fce", "sha256": "0e1e448b39918d82908cc3bdd6cdef1140e0a3e7faa2b062c81a919ae55b820d" }, "downloads": -1, "filename": "icecake-0.3.2.tar.gz", "has_sig": false, "md5_digest": "d4a1d54ccfc15ead187d7caa3f491fce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21230, "upload_time": "2016-03-29T20:46:18", "url": "https://files.pythonhosted.org/packages/13/32/735daacc87c6582ccde34fbd7005bd105357b2a296a1e8535553dae58b26/icecake-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "a1f751beb3a24c5c915f34d689ba2eda", "sha256": "76530c5bbd454f37c50dcfebdb00e1edd6f9d7bf34c0cc52b0fbdc3e1553283f" }, "downloads": -1, "filename": "icecake-0.3.3.tar.gz", "has_sig": false, "md5_digest": "a1f751beb3a24c5c915f34d689ba2eda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21237, "upload_time": "2016-03-29T21:54:54", "url": "https://files.pythonhosted.org/packages/5e/92/73da7f83091a5503b252078ac06c4e057990c1fd4e78c449136d356d6523/icecake-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "b503b540d881ee6927fb428a8ed14c84", "sha256": "bd90b136e97bcc821741f697706345a7dd7dba493a38401ab245c8efb3765a50" }, "downloads": -1, "filename": "icecake-0.3.4.tar.gz", "has_sig": false, "md5_digest": "b503b540d881ee6927fb428a8ed14c84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21252, "upload_time": "2016-03-29T22:18:06", "url": "https://files.pythonhosted.org/packages/66/c9/2fe9c76839e6a41526598959be63526d7821b6d893afc905c35b56b88abe/icecake-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "7c22873e74e602abf99cf6d264c5a92d", "sha256": "96a33ed3017fa5732e3a7f90b73296f8d4aa702deb99d9d0887e9ccadbea37bd" }, "downloads": -1, "filename": "icecake-0.4.0.tar.gz", "has_sig": false, "md5_digest": "7c22873e74e602abf99cf6d264c5a92d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22228, "upload_time": "2016-04-04T08:25:10", "url": "https://files.pythonhosted.org/packages/1e/d0/48a7f1e6f174ec2dcf5ca4edd2c9af003cc2192dd8cb023e5d8f561b6a80/icecake-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "180f7284ed51b332bcac7aa85f763869", "sha256": "bcd1c269424cf65d6f64f7f5792a6537c291fafdd48ca0684b242e9e47aafae0" }, "downloads": -1, "filename": "icecake-0.5.0.tar.gz", "has_sig": false, "md5_digest": "180f7284ed51b332bcac7aa85f763869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22628, "upload_time": "2016-04-15T01:58:27", "url": "https://files.pythonhosted.org/packages/b8/57/bce8d7f75b67b10c37962ae954eda27ef1ba8d633077b083fa3ed14ae410/icecake-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "7925df42fa2e4cbb83e47ecab89b4bc0", "sha256": "9806fc0b7a470adc5756aac3ef1a6b5b468905bbc7e1d2ebc2e55825435b6022" }, "downloads": -1, "filename": "icecake-0.6.0.tar.gz", "has_sig": false, "md5_digest": "7925df42fa2e4cbb83e47ecab89b4bc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24467, "upload_time": "2016-05-12T05:22:41", "url": "https://files.pythonhosted.org/packages/60/a5/db3001699ed8b48adc3683d92e664d7d89631eeab4b83eadcce6c636d501/icecake-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "eaf92a7cd3deea6d81e31fcff39a1859", "sha256": "c1f2090acb3a93610035a3a319758aed3d391753e5459f4582e17cdb45269826" }, "downloads": -1, "filename": "icecake-0.6.1.tar.gz", "has_sig": false, "md5_digest": "eaf92a7cd3deea6d81e31fcff39a1859", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22075, "upload_time": "2019-04-22T16:38:46", "url": "https://files.pythonhosted.org/packages/f8/4e/a1acd273b8670c8766e99e950182da6a72eb954c125209a1c5fa280113c0/icecake-0.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "eaf92a7cd3deea6d81e31fcff39a1859", "sha256": "c1f2090acb3a93610035a3a319758aed3d391753e5459f4582e17cdb45269826" }, "downloads": -1, "filename": "icecake-0.6.1.tar.gz", "has_sig": false, "md5_digest": "eaf92a7cd3deea6d81e31fcff39a1859", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22075, "upload_time": "2019-04-22T16:38:46", "url": "https://files.pythonhosted.org/packages/f8/4e/a1acd273b8670c8766e99e950182da6a72eb954c125209a1c5fa280113c0/icecake-0.6.1.tar.gz" } ] }