{ "info": { "author": "Colin T.A. Gray", "author_email": "colinta@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Internet", "Topic :: Internet :: WWW/HTTP :: Site Management", "Topic :: Software Development", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Code Generators", "Topic :: Text Processing" ], "description": "======================\nThe Strange Case of...\n======================\n\nIt's yet another static site generator. Have you seen `jekyll`_?\n`hyde`_? Yup. Like those.\n\nBut this one is:\n\n1. Written in python, unlike ``jekyll``\n2. **NOT** complicated, unlike ``hyde``. And I mean *really* **NOT** complicated.\n\nI just read about `nanoc`_, and realized that it is the Ruby equivalent to\nStrangeCase. I commend them! I had considered porting StrangeCase to Ruby\n(and maybe I will some day, just for kicks), but for now, I would say to\nRubyists: use `nanoc`_.\n\n\n------------\nINSTALLATION\n------------\n\n::\n\n $ pip install StrangeCase\n $ scase # generates the site\n $ scase --watch # generates the site and watches\n # for changes to source files\n\n\n-----\nHELP!\n-----\n\nAlready!? Geez::\n\n #strangecase @ irc.freenode.net\n\n (i'm colinta)\n\n\n-----------\nQUICK START\n-----------\n\n1. In your project folder, make a ``site/`` and ``public/`` folder.\n2. Put ``index.j2`` in ``site/``, and put some html in there.\n3. Add YAML front matter to that file. It looks like this::\n\n ---\n title: My first StrangeCase site\n ---\n \n ...\n\n4. Use that YAML in your page using `Jinja2`_'s template language syntax::\n\n ---\n title: My first StrangeCase site\n ---\n \n

{{ title }}

\n\n5. Run strange case:\n ``$ scase``\n\n6. Open ``public/index.html``. You might want to hold onto your jaw, lest it\n drop to the floor. Yeah, it's not gonna say ``{{ title }}``, it's gonna say\n ``My First Page`` in big letters.\n\n\n------------\nSLOWER START\n------------\n\nWhoopity freakin' do, right? Let's add a layout and create a site.\n\nAt this point this demo site looks like this::\n\n project\n \u251c\u2500\u2500 public\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 index.html\n \u2514\u2500\u2500 site\n \u2514\u2500\u2500 index.j2\n\nAdd a layouts folder, and put a layout in there::\n\n project\n \u251c\u2500\u2500 layouts\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 base.j2\n \u251c\u2500\u2500 public\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 index.html\n \u2514\u2500\u2500 site\n \u2514\u2500\u2500 index.j2\n\n``layouts/base.j2`` looks like this::\n\n \n \n {{ title or \"Nifty Wow!\" }}\n \n \n {% block content %}\n {% endblock %}\n \n\nAnd update ``index.j2`` to use this layout::\n\n ---\n title: My first StrangeCase site\n ---\n {% extends \"layouts/base.j2\" %}\n {% block content %}\n

{{ title }}

\n {% endblock %}\n\nYou can run StrangeCase again. ``public/index.html`` will now have ````\nand ```` tags surrounding it.\n\nIf you're lost at this point, you should read up on Jinja. We haven't really\ndone anything more than run ``index.j2`` through jinja and wrote the output to\n``index.html``.\n\nNow let's add a projects folder and a couple projects. When you add *content*\nto your site, put it in the ``site/`` folder. Most simple projects will pretty\nmuch only use the ``site/`` folder and a ``layouts/`` folder wth one or two\nlayouts in there.\n\nI'm going to throw a curveball into the project file names. StrangeCase orders\nfiles by sorting them by file name. This is important when you go to display\nimages or blogs in order by date. If you want to have them ordered by anything\nother than filename, you can use a couple different naming schemes at the\nbeginning of the file name. jekyll does a similar thing, btw.\n\nI'm going to add *two* prefixes so we can see what happens when we process\nfiles this way.\n\n::\n\n project\n \u251c\u2500\u2500 layouts\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 base.j2\n \u251c\u2500\u2500 public\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 ...\n \u2514\u2500\u2500 site\n \u251c\u2500\u2500 index.j2\n \u2514\u2500\u2500 projects\n \u251c\u2500\u2500 001_2012_02_27_first_project.j2 #\n \u251c\u2500\u2500 002_2012_02_28_second_project.j2 # look over here!\n \u2514\u2500\u2500 003_2012_02_27_third_project.j2 #\n\nAnd here is what each project template looks like::\n\n {% extends \"layouts/base.j2\" %}\n\n {% block content %}\n

{{ title }}

\n

Project number #{{ order }} started on {{ created_at | date }}

\n {% endblock %}\n\nA little shorter than our original ``index.j2``. Notice I've left out the YAML\nfront matter, and yet I am using the variables `title`, `order`, and\n`created_at`. Where do they get their value from?\n\nThe file name, and configurators.\n\n::\n\n 001_2012_02_27_first_project\n \\+/ \\---+----/ \\-----+-----/\n | | |\n | | +-title\n | |\n | +-created_at\n |\n +-order\n\nIn this way, you get some variables for free just by naming your files with a\ndate and/or order prefix. We are looking at the by-product of \u201cconfigurators\u201d.\nThey are passed the source file name and the config dictionary. There are some\nthat *have* to run, and some that are optional but enabled by default.\n\nAnyway, if you tried to run StrangeCase right now, you would get the following\nerror::\n\n $ scase\n ...\n jinja2.exceptions.TemplateAssertionError: no filter named 'date'\n\nNo worries, there is a `date` filter built into StrangeCase. It's just not\nenabled. So add a config.yaml file to the project root::\n\n project\n \u251c\u2500\u2500 config.yaml\n \u251c\u2500\u2500 layouts\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 base.j2\n \u251c\u2500\u2500 public\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 ...\n \u2514\u2500\u2500 site\n \u251c\u2500\u2500 index.j2\n \u2514\u2500\u2500 projects\n \u251c\u2500\u2500 001_2012_02_27_first_project.j2\n \u251c\u2500\u2500 002_2012_02_28_second_project.j2\n \u2514\u2500\u2500 003_2012_02_27_third_project.j2\n\nand add the date filter::\n\n filters:\n date: strange_case.extensions.date.date\n\n*Now* you can run StrangeCase with no errors, which will generate::\n\n \n \n Nifty Wow!\n \n \n\n

\n

Project number #1 started on 27 Feb 2012

\n\n \n\nMoving along. Now let's create a project listing at ``projects/index.j2``. We\nneed a way to \"fetch\" the project pages. This is going to be very easy,\nbecause really all that StrangeCase *does* is build a resource tree. And we\ncan walk that tree using the node names. So if we just iterate over the\n``projects/`` folder, we'll have our project nodes.\n\nAdd ``index.j2`` to ``site/projects/`` ::\n\n project\n \u251c\u2500\u2500 config.yaml\n \u251c\u2500\u2500 layouts\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 base.j2\n \u251c\u2500\u2500 public\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 ...\n \u2514\u2500\u2500 site\n \u251c\u2500\u2500 index.j2\n \u2514\u2500\u2500 projects\n \u251c\u2500\u2500 index.j2 # <===\n \u251c\u2500\u2500 001_2012_02_27_first_project.j2\n \u251c\u2500\u2500 002_2012_02_28_second_project.j2\n \u2514\u2500\u2500 003_2012_02_27_third_project.j2\n\n``index.j2``::\n\n {% extends \"layouts/base.j2\" %}\n\n {% block content %}\n {% for project in site.projects %}\n

{{ project.title }}

\n {% endfor %}\n {% endblock %}\n\nIterating over folders is a very easy thing to do in StrangeCase. It's how you\ndo things like create an index page, as we saw here, or create a photo blog\n(``for photo in site.images.my_fun_trip``). It is the thing that I wanted to be\n*really* easy, because I couldn't figure out, at a glance, how to do it in\njekyll or hyde (it is possible in hyde, I think).\n\nNotice that when we iterate over the ``site.projects`` folder, it doesn't\ninclude the ``index.html`` file. Makes sense, though, right? The index page\nis considered to be the same \"page\" as the folder. Even though they are\nseperate nodes, they have the same URL.\n\nTo wrap things up, let's make a link to the project page from the home page.\nEvery node has a ``url`` property, and you can access pages by their name.\n\"name\" is whatever is \"leftover\" after the created_at date, order and extension\nhave been pulled out. I'll add a link to the second project to demonstrate\nthis::\n\n ---\n title: My first StrangeCase site\n ---\n {% extends \"layouts/base.j2\" %}\n {% block content %}\n

{{ title }}

\n

Projects

\n

My favorite project: My second project

\n {% endblock %}\n\n\nThis wraps up the tutorial! Now, I'll explain the inner workings.\n\n---------------\nTIPS AND TRICKS\n---------------\n\nHere are some quick little neat things.\n\n1. You'll need a good, solid config.yaml. Just copy and paste this when you\n start a new site::\n\n extensions:\n - strange_case.extensions.misaka.MarkdownExtension\n filters:\n date: strange_case.extensions.date.date\n markdown: strange_case.extensions.misaka.markdown\n json: json.dumps\n sha: strange_case.extensions.hashlib.sha\n processors:\n - strange_case.extensions.image\n - strange_case.extensions.category\n - strange_case.extensions.paginated\n - strange_case.extensions.scss\n\n2. Iterate over a folder of pages, or a folder of assets, using\n ``{% for page in site.folder.subfolder %}``. There is no \"easy\" way to\n iterate over a folder that contains folders - what you really want there is\n to get the index file of the folder, it will contain the meta data (title,\n created_at, etc) that you probably want to display in the listing. I will\n try and fix this, but probably won't until someone asks for it.\n\n3. Do not mix pages and assets. You *can* do it, but things get goofy when you\n try and iterate over the folder. If you ``{% for page in site.folder %}``,\n you will end up with *both* types of file. If you *really* want to mix them,\n you can iterate over just the pages (and exclude index.html files) using\n ``iter_pages``, introduced in v4.3.0.\n\n4. You can assign \"pointers\" in your YAML front matter. They look like this::\n\n page ->: site.other.page\n\n If your asset folders are getting unwieldy\n (``site.static.images.posts.pics_of.kittens``), use this trick to shorten it\n down in your template. In this case you *must* prefix the pointer with\n ``my.``, because jinja will not know how to lookup \"page ->\" when you say\n only \"page\", and I have not devised a workaround yet::\n\n ---\n pics ->: site.static.images.posts.pics_of.kittens\n ---\n {% for pic in my.pics %}\n \n {% endfor %}\n\n5. Page content is simply not available during template generation. For that, I\n can't help you. That would introduce page dependencies, which would suck.\n\n If you want a \"blurb\" or \"summary\" of a page's content, you'll just have to\n add it to the page front matter::\n\n ---\n title: my post\n summary: |\n I think this post is great. It's all about code:\n\n print \"like this\"\n ---\n\n Back in your listing, you can run that summary through markdown using a\n filter::\n\n {% for post in site.posts %}\n

{{ post.title }}

\n {% if post.summary -%}\n
\n Summary:
\n {{ post.summary|markdown }}\n
\n {% endif %}\n\n6. As of v4.5.0, you do not have to have a ``CONFIG`` dict in your config.py\n file. Instead, you can create or import functions into that file, and then\n reference them from your project's config.yaml. For instance, to add a\n ``pluralize`` filter to your project::\n\n # config.py\n import inflect ; inflect = inflect.engine()\n\n pluralize = inflect.plural\n\n # config.yaml\n filters:\n pluralize: config.pluralize\n\n Interestingly, this was a complete accident. But I've added a test for it,\n so it's here to stay! :-)\n\n7. Sometimes you will want to override values, but ``dont_inherit`` gets in the\n way. In those instances, you can add values to ``override``, usually in a\n folder ``config.yaml``. One common case is to set a folder of images'\n ``title`` to ``\"\"``. The default configurators would set the title based\n on the name of the file (``title_from_name`` configurator), but it will *not*\n if the title is set to anything, even ``\"\"``.\n\n8. ??? I'll add to this list as needed.\n\n--------------------\nSTRANGECASE OVERVIEW\n--------------------\n\nStrangeCase parses all the files and directories in ``site/`` and builds a tree\nof nodes. At its big, squishy heart, that's what StrangeCase does. Then it\nruns ``generate`` on every node.\n\n* Files/Folders that match ``ignore`` are not processed at all.\n* Folders become ``FolderNode`` objects (``site/``, though, is a ``RootNode``)\n and scanned recursively.\n* Pages (html and jinja files) become ``JinjaNode(FileNode)`` objects.\n* Assets (javascript, css, images) become ``AssetNode(FileNode)`` objects.\n* These can be overridden using the ``type`` config.\n* Additional nodes can be created by including the appropriate processor and\n setting the node's ``type`` to use that processor. These are things like\n pagination, tags, images, and categories.\n\nThe nodes are placed in a tree::\n\n (root, aka site) # RootNode\n | static/ # FolderNode\n | | css/ # FolderNode\n | | + style.css # AssetNode\n | \\ image/ # FolderNode\n | | img1.png # AssetNode (or possibly ImageNode)\n | | img2.png # AssetNode\n | + img3.png # AssetNode\n | robots.txt # PageNode\n | index (index.j2 => index.html) # PageNode\n \\ blogs/ # FolderNode\n | test1 (test1.j2 => test1.html) # PageNode\n + test2 (test2.j2 => test2.html) # PageNode\n\n-------------------\nSOO? WHA' HAPPENED?\n-------------------\n\n1 - Build stage\n~~~~~~~~~~~~~~~\n\nIn the build stage, StrangeCase is looking at the files and folders in site/.\nFirst a root node is created::\n\n root_node = build_node(config, site_path, deploy_path, '')[0]\n\nThe ``build_node`` method **configures** and **processes** the node.\n**configures** means that it passes the ``source_path`` and ``config`` to each\nof the ``configurators`` (we saw these working in the tutorial above:\n``created_at_from_name``, ``order_from_name``, and ``title_from_name`` in\nparticular). **processes** means that one or more nodes are instantiated and\nadded to the node tree. The ``root_node`` sits at the top, and in your\ntemplates you access it using ``{{ site }}``.\n\nThis process continues recursively for every file and folder in site (except\n``ignore``-d files).\n\n1.a - Configuration\n~~~~~~~~~~~~~~~~~~~\n\nWhen you run StrangeCase, it starts building a config object, a dictionary\n(actually an instance of ``ConfigDict``, which extends ``dict``). This object\n(and clones of it) will be used throughout the generation of your site, so it is\nimportant to understand what it does, and how you control it.\n\nFirst, ``strange_case_config.py`` establishes the initial defaults. Look at\nthat file, or read about the defaults below. Next, the project config file is\nmerged in. This is the ``config.yaml`` file that sits at the top of your\nproject. Then command-line arguments are processed. **Finally**, if a function\nis assigned to ``config_hook``, it will be passed the configuration, and it is\nexpected to throw errors or make changes to that object as needed. This is how\n\"scaffolding\" is accomplished, which is actually just a StrangeCase extension\nand a few handy ``site/`` folders.\n\nWhen a new node is being built, it is given a copy of the config dictionary and\npassed through the configurators. These add properties to the config dict that\nare specific to the node that is going to be built, including specifying *what\ntype* of node will be built. The default list of configurators is in\n``strange_case_config.py``.\n\nNodes inherit all the configuration of the parent node except for the keys that\nare in ``dont_inherit`` (``name``, ``target_name``, ``type``, and most of the\nproperties that are assigned by configurators).\n\nIf the node is a folder, the special file config.yaml will be merged into that\nnode if it exists. If it is a file node, the parent folder's config is checked\nfor a ``files`` entry, and if the current file is in there, that config is\nmerged in.\n\n``page`` types can have YAML front matter, which we've read all about already.\n\nSee the section below that outlines the default config, and how those options\naffect processing. Know this: everything is controlled using config. If you're\ntrying to do something complicated and having trouble, please create an issue.\nI'd like to compile a list of HOWTOs/FAQs.\n\n1.b - Processors\n~~~~~~~~~~~~~~~~\n\nDuring the build stage, page, folder, and asset nodes are created using\n**processors**. There are four built-in processors, and more available as\nextensions. One important thing to note here is that assets and pages are\ndifferentiated only by the fact that one of them is passed through Jinja2. If\nyou want to process a JavaScript file through Jinja2, you should associate\n``*.js`` with the ``page`` type, or set ``type: page`` in the parent folder\nconfig.yaml file (using the ``files:`` dictionary)::\n\n file_types:\n - [page, '*.js']\n # or, if you want to only process a couple files:\n - [page, ['special.js', 'special-2.js']]\n\n # or assign the 'page' processor\n files:\n special.js: { type: page }\n\n``type`` is not inherited, but ``file_types`` is, so you can set a whole folder\nof assets to become page nodes using this config.\n\nProcessors are kind of tricky to build, because they need to have a firm\nunderstanding of the build process. If you're feeling industrious, there are\nplenty of existing extensions (category and pagination) that can push you in the\nright direction.\n\n2 - Populating\n~~~~~~~~~~~~~~\n\nIf you are using the category processor this stage is important. If you're not,\nit won't matter so much.\n\nSome nodes can't know what content they will generate until the entire site is\nscanned. Like categories! We need to know *all* the pages in the site before\nwe know what all the categories are, and how many pages have that category.\n\nThese nodes are stored as ``Processor``s, and they are nodes that say \"hold\non, I'm not ready yet...\". They must implement a ``populate`` method, which\nwhen called *removes* the processor node from the tree and replaces itself with\nnodes (or it can insert nodes elsewhere in the tree, or do nothing I suppose).\n\nIf you are writing your own processor, and need to access a node's config, you\nmight want to use the item-index operators, ``[]``. If the configuration is not\nset, you'll get ``None`` instead of an ``AttributeError``. ::\n\n node.thingy # => AttributeError\n node['thingy'] # => None\n\nAfter the tree is populated, the site is ready to generate. You will have a\ntree of nodes, with the root node at the top, and it is always named ``\"site\"``.\n\n3 - Generating\n~~~~~~~~~~~~~~\n\nThe ``generate`` method is called on the root node, and recursively on all the\nchildren. This is where folders are created, pages are generated, and assets\nare copied over. If you are using the image processor, you might also have\nthumbnails created using `Pillow`_.\n\n---------\nTEMPLATES\n---------\n\nIn your templates, you have access to anything in the inherited config and in\nper-page metadata:\n\n``/config.yaml``::\n\n meta:\n author:\n name: \"Colin\"\n\n``/site/index.j2``::\n\n ---\n title: test\n ---\n\n

{{ meta.author.name }}

\n

{{ title }}

\n

{{ my.title }}

\n\nGenerates::\n\n

Colin

\n

test

\n

test

\n\nNode properties\n~~~~~~~~~~~~~~~\n\nNodes have a number of useful properties, roughly grouped into:\n\n* config/metadata like name, title, created_at. This is the big one.\n* website-specific - ``url``, ``index``, ``is_{page,asset,folder}``\n* traversal - parents, children, siblings, iterable\n\n**Config**\n\nHopefully by now the importance of the config object has been bored into your\nhead. StrangeCase is all about the config object. That, and the node tree.\nAnd that's it. Nothing else. Oh, and templating. Templating, config, and the\nnode tree. That's all it needs. That's it, that's... and this lamp. That's\nall.\n\nIn your templates, the configuration is simply \"there\". The properties of the\ncurrent node and all the configuration it has inherited is given to jinja2 as\nthe context. There is, however, *one* exception to this, which are \"pointer\"\nconfigurations::\n\n ---\n images ->: site.static.images\n ---\n {{ images|length }} # wrong\n {{ my.images|length }} # right\n\nI have not bothered to fix this, since I *prefer* the second syntax. I use the\n``my`` prefix anytime I'm referring to the YAML front matter - kind of keeps\nthings sane for me. If people clamor for the pointer thing to get fixed it\nwouldn't be too difficult.\n\n**Website**\n\nThe most used is, of course, ``node.url``. URLs are created by appending the\ncurrent node's URL to the parent URL. The URL of the site node is assigned\nby the ``set_url`` configurator, and defaults to ``/``. If you want your static\nsite to be in a subfolder, assign something else to the ``root_url`` config.\n\nThere are other configs used internally, like ``is_page`` and ``index``. These\nare worth looking at. ``is_page`` returns True when the node was processed\nusing Jinja - it does not mean that the page is an HTML page, so ``robots.txt``\nand ``sitemap.xml`` will be included in there, too. BUT hey! You can fix that!\nAdd::\n\n ---\n is_page: false\n ---\n\nAnd that node will be excluded, it will considered to be an asset instead. An\nasset is any file that is not a page. If you want to set ``is_asset: true``\nabove, that is supported, and an infinite loop is avoided, but the \"official\"\nstance is that ``is_asset := ! is_page``.\n\nAccessing any node by name\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis is a common thing to do in StrangeCase. The ``name``, if it is not\nexplicitly declared, is detemined by the file name. The default configurators\nwill remove ordering (``order_from_name``) and created_at\n(``created_at_from_name``) from the front of the file name, and then the default\nname (``setdefault_name``) will be the file name with non-alphanumerics replaced\nwith underscores, lowercased, and the html extension is removed. All other\nextensions will remain. Examples:\n\n``This is a file name - DUH.j2`` becomes ``this_is_a_file_name___duh``\n\n``WHAT, a great image?.jpg`` becomes ``what__a_great_image_jpg``\n\nExample of accessing the \"Best blog ever\" page's URL::\n\n Best blog ever.\n\nAll nodes except the root node (``site`` is the root node, if you haven't\nnoticed) have ``siblings`` nodes, a ``next`` node, and a ``prev`` node. If this\nis the first / last node, ``prev`` / ``next`` returns None. ``siblings`` always\nreturns a list, and at the minimum the current node will be in there (even the\nroot node, but why you would call ``site.siblings`` is beyond me).\n\nThere is also an ``ancestors`` property, which returns all the parent pages of\nthe node. BUT, in order to be the most useful, this method looks for a node\ncalled ``index`` on the parents, so instead of getting a list of folder nodes,\nyou will get list of index pages. If you're building a breadcrumb trail,\n``ancestors`` is your friend, and you'll be glad that the index pages are\nreturned instead of folder nodes.\n\nIterating over folders\n~~~~~~~~~~~~~~~~~~~~~~\n\nWe've already seen this, but I'll include it again for completeness::\n\n {% for blog in site.blogs %}\n

{{ loop.index }}. {{ blog.title }}

\n {% endfor %}\n\n=> ::\n\n

1. Blog Title

\n

2. Blog Title

\n\n**Note:** Files named ``index.html`` will not be included in this list. This is\na very reasonable design decision, but I can imagine a situation where you have\na file (think ``robots.txt``) that *also* doesn't belong in the iterable pages\nlist. So ``iterable: false`` is available as a config setting.\n\nIterate over a folder of images\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n {% for image in site.static.image %}\n \n {% endfor %}\n\n**BAM**, how's that for an image listing! This might be my favorite thing in\nStrangeCase: that folders are iterable. It makes things that were weird in\njekyll (``site.categories.blablabla``) very easy, and intuitive, I think, since\nyou only have to know the folder name of your images/blogs/projects/*whatever*.\n\nYou might want to check out the image processor, explained below. It uses\n`Pillow`_ to make thumbnail images.\n\nYou can check what kind of node you're working with using the ``type`` property\n(\"page\", \"folder\", \"asset\") or the ``is_page``, ``is_folder``, ``is_asset``\nmethods. Internally ``is_page`` is used a lot, and if you mix your page and\nasset files in the same folders, these are useful for filtering those out in a\nfor loop.\n\nLastly, the ``.all()`` method, and its more specific variants, are very useful\nif you need to make a sitemap, or to grab the entire node tree at some point.\nThe ``all()`` method definition says it all I think::\n\n def all(self, recursive=False, folders=None, pages=None, assets=None, processors=None):\n \"\"\"\n Returns descendants, ignoring iterability. Folders, assets, and\n pages can all be included or excluded as the case demands.\n\n If you specify any of folders, pages, assets or processors, only those objects\n will be returned.\n Otherwise all node types will be returned.\n\n recursive, though, defaults to False. calling all(True) is the same as all(recursive=True)\n \"\"\"\n\nThe variants are all subsets of ``all()``::\n\n def pages(self, recursive=False):\n return self.all(recursive=recursive, pages=True)\n\n def folders(self, recursive=False):\n return self.all(recursive=recursive, folders=True)\n\n def assets(self, recursive=False):\n return self.all(recursive=recursive, assets=True)\n\n def files(self, recursive=False):\n return self.all(recursive=recursive, pages=True, assets=True)\n\n def processors(self, recursive=False):\n return self.all(recursive=recursive, processors=True)\n\n------\nOK, SO\n------\n\nMostly random thoughts here. Most of what you might want to know about StrangeCase *should* be here, so expect some repetition.\n\n* In your project folder (where you execute StrangeCase), you can have\n ``config.yaml`` and/or ``config.py``, and you *definitely* have a ``site/``\n folder, where your site content is stored. There are probably Jinja2 layouts,\n includes, and who knows what else in the root folder, too.\n\n* ``site/`` stores site content: templates, assets, folders, and maybe some\n \"special\" files like category pages. These are processed, rendered, copied, or\n ignored, as the case may be (dot-files are ignored, btw!).\n\n* When StrangeCase is done it places your static site in ``public/``.\n\n* There are only two special folders: site and public. They can be changed in\n config (``site_path`` and ``dest_path``).\n\n* ``config.yaml`` stores context variables. It is merged with the default\n config. Child folders and pages inherit all the config settings of their\n parent except the variables in ``dont_inherit``:\n\n + ``type``\n + ``name``\n + ``target_name``\n + ``title``\n + ``created_at``\n + ``order``\n\n* Template files (.html, .txt, .md) can contain YAML front matter. If the first\n line is a bunch of dashes (``^[-]{3,}$``), all lines up to the matching dashes\n will be treated as YAML and added to that files context variables.\n\n* Binary files can have front matter, too, but since you can't place it *in* the\n file, it is stored in a special ``files:`` setting in the parent folder's\n config.yaml file. It should be a dictionary with the key corresponding to the\n name of the file, and the value is the front matter for that file. ``files:``\n entries in ``config.yaml`` are not inherited.\n\n* Everything in ``config.yaml`` and YAML front matter is available as a context\n variable in your templates.\n\n* Templates are rendered using Jinja2_.\n\n* StrangeCase points Jinja to your project folder, so you can use any\n directories you want in there to store layouts, macros, and partials.\n\n * layouts that are in ``layouts/`` are extended using ``{% extends 'layouts/file.j2' %}``\n * includes in ``anywhere/`` are included using ``{% include 'anywhere/file.j2' %}``\n * I suppose the convention is to have layouts/ and includes/ folders.\n\n* In the project root, ``config.py`` is where you can place runtime things,\n like...\n\n * if you need to calculate a value (e.g. ``datetime.time``)\n * fetch some data from a database (*ewww!*)\n * import jinja extensions (or use 'extensions' in config.yaml)\n * import jinja filters (or use 'filters' in config.yaml)\n * register StrangeCase processors (or use 'processors' in config.yaml)\n\n* If you need a page to be processed differently, set ``type`` to the desired\n file type in the config for that file/folder. For instance, the category index\n page should be ``type: categories``.\n\n* You can prefix variables on a page with ``my.`` (e.g. ``my.title`` or\n ``my.parent``). I think it looks better in some places because it makes it\n clear where the content comes from (e.g. ``{{ my.title }}`` as opposed to just\n ``{{ title }}``). Totally optional.\n\n* Based on the file name, config.yaml, and YAML front matter, some config\n settings get changed during the build stage. See ``configurators.py`` for\n these methods. See ``strange_case_config.py`` for the order.\n\n--------------\nDEFAULT CONFIG\n--------------\n\nYou should study this to learn a lot about how StrangeCase works. The reason I\nboast that StrangeCase is simple is because *everything it does* can be\ncontrolled using the config.\n\nIf you go looking in ``strange_case_config`` for these settings, you won't find\nthem. They have been broken up into ``configurators``. In the early life of\nStrangeCase, all configuration was done in one file. Now they are broken up\ninto a list of configurator functions, and each function can add defaults. More\ncomplicated, but more extensible.\n\n::\n\n config_file: 'config.yaml' # name of file that contains config\n ignore: ['config.yaml', '.*'] # which files to ignore altogether while building the site\n dont_inherit: # nodes will not inherit these properties\n - type\n - name\n - target_name\n - title\n - created_at\n - order\n - iterable\n - is_index\n - url\n - skip\n file_types: # how files should be processed. some processors add to this list, like to associate images\n - [page, ['*.j2', '*.jinja2', '*.jinja', '*.html', '*.txt', '*.xml']], # with the image processor\n default_type: asset # if this is falsey, unassociated nodes will be ignored.\n default_root_type: root # you probably shouldn't change this!\n default_folder_type: folter # you probably shouldn't change this!\n rename_extensions: # which extensions to rename, and to what\n '.j2': '.html',\n '.jinja2': '.html'\n '.jinja': '.html',\n '.md': '.html',\n index.html: index.html # determines which file is the index file, which in turn determines \"iterability\" (index pages are not iterable)\n html_extension: '.html' # files with this extension are html files (`page.is_page` => `True`)\n\n # PROTECTED\n # these can only be assigned in the root config file, otherwise they will\n # be treated as plain ol' file data\n site_path: 'site/' # where to find site content\n deploy_path: 'public/' # where to put the generated site\n remove_stale_files: true # removes files that were not generated.\n dont_remove: ['.*'] # list of glob patterns to ignore when removing stale files\n extensions: [] # list of Jinja2 extension classes as a dot-separated import path\n filters: {} # dictionary of `filter_name: filter.method`.\n processors: [] # additional processors. Processors register themselves as a certain type.\n configurators: [ # list of configurators. The built-ins do very important things, so overriding this does *bad things*\n meta_before, # assigns defaults from the configurators ``.defaults`` property\n file_types, # checks 'file_types' for a pattern that matches the file name\n page_types, # if you want to use your own template engine, you'll need to add it to this list\n merge_files_config, # merges files[filename] with filename\n folder_config_file, # processes folder/config.yaml. If the folder config contains `ignore: true`, the folder is skipped\n front_matter_config, # processes YAML front matter. Again, the file can be ignored using `ignore: true`\n setdefault_name, # if 'name' isn't assigned explicitly, this assigns it based on the file name and extension\n setdefault_target_name, # similarly for target_name\n is_index, # compares the file name with the 'index.html' config. if they are the same, it is an index page.\n setdefault_iterable, # index files are not iterable\n ignore, # ignores files based on the 'ignore' setting\n created_at_from_name, # Gets the date from the file name, and strips it from name.\n order_from_name, # Gets the order from the file name, and strips it from name.\n title_from_name, # Assigns the \"title\" property based on the name.\n set_url, # Assigns the \"local\" part of the URL. The entire URL is a property of the node object\n ]\n\n--------------------\nCOMMAND LINE OPTIONS\n--------------------\n\nYou can override configuration - or add to it - via the command-line.\nHere are all the command line arguments:\n\n -p, --project: project_path\n -s, --site: site_path\n -d, --deploy: deploy_path\n -r, --remove: remove_stale_files = true (default, but this can override -n)\n -n, --no-remove: remove_stale_files = false\n -c, --config: config_file\n\n(and of course)\n\n -w, --watch: watch files for changes\n\nYou can set/add arbitrary configuration using any number of ``key:value``\narguments::\n\n key:value any key/value pair\n\nI use this to implement a simple code generator for my Sublime Text 2 plugins.\nI run::\n\n scase --deploy ../NewProject project:new_project desc:'A great new package'\n\nSee `My PackageTemplate `_\nfor an example of how this can be used.\n\n---------------------------\nAND THAT'S (pretty much) IT\n---------------------------\n\nJinja2 makes it easy to put pretty complicated logic in templates, which is\nreally the only place for them in this static generator context...\n\n\\...or is it !? I\u2019m wondering what kind of spaghetti nonsense these templates\ncould end up with (it's like PHP all over again!), and how that could be fixed.\n\nWhich leads right into...\n\n------------------------\nREALLY COMPLICATED STUFF\n------------------------\n\nThis relates to the ``config.py`` and ``config.yaml`` files mentioned above.\n\nTake a glance at the colinta.com repository. It does most things that can be\ndone.\n\nYou can define ``extensions``, ``filters``, \"configurators\", and ``processors``.\n\n``filters`` is a dictionary of ``filter_name: package.path``.\n\n``extensions`` is a list of ``package.paths``.\n\nIf you specify these in config.py, you can import the extension/filter and\nassign it to the list. Otherwise, in config.yaml, use a dot-separated path,\nsimilar to how you would write an ``import`` statement, but include the class\nname.\n\nThere are a couple built-in processors that are not imported & registered by\ndefault: categories and image.\n\nIn config.py, you can add context variables that need the **POWER OF PYTHON**.\nThings like ``time.time(), datetime.datetime.now()``.\n\nExample of all this nonsense using ``config.py``::\n\n # import the processors you want to use. you don't have to do anything with them,\n # it is enough just to import them.\n from strange_case.extensions import image, categories\n\n # import the extensions and filters. we still need to add these to CONFIG\n from strange_case.extensions.markdown import MarkdownExtension, markdown\n from time import time\n\n CONFIG.update({\n 'extensions': [MarkdownExtension],\n 'filters': {\n 'markdown': markdown,\n },\n 'time': int(time()),\n })\n\nEquivalent in the root ``config.yaml``::\n\n extensions:\n - strange_case.extensions.misaka.MarkdownExtension\n filters:\n markdown: strange_case.extensions.markdown\n processors:\n - strange_case.extensions.image\n - strange_case.extensions.categories\n # cannot assign time to datetime.time. DANG.\n\n``extensions/category.py`` has an explanation of how processors work, and how it\nwas written. I made it up as I went along, and ended up adding a ``Processor``\nclass that extends ``Node``, and a concept of \"populating\" the tree after the\ninitial build. Read more in that file. I think it's a good system, but I'm\nopen to friendly suggestions.\n\nLast but not least: configurators. These are really the work horses of\nStrangeCase. They look at YAML front matter, ignore files, set default\nprocessors, and so on. If you need to do the equivalent of a context processor\nin django, this is where you would do that.\n\nEvery configurator in ``config['configurators']`` is given the node config. If\nit returns nothing, the node is ignored. Otherwise, you can modify the config,\nor create a whole new one, and return it.\n\nSee ``created_at_from_name`` for a good example of modifying the config based on\nthe file name.\n\n-------------\nJINJA FILTERS\n-------------\n\nStrangeCase includes several Jinja filters that you can use in your templates.\nRemember that in order to use a filter you must first enable it in your\nconfiguration. For example to enable the date filter you must add::\n\n filters:\n date: strange_case.extensions.date.date\n\nThis will register a filter named *date* which is implemented by the function\n`date` in the module ``strange_case.extensions.date``.\n\nstrange_case.extensions.date.date\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis filter formats a date. The input can be any string readble by the\n`dateutil`_ ``parse()`` method, or the string ``\"now\"`` for the current date. If\nno format is specified it is printed as '01 Jan 2000'.\n\n::\n\n

The date is {{ 'now'|date }}.

\n

The date is 06 May 2012.

\n\nstrange_case.extensions.inflect.pluralize\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nPluralizes a variable::\n\n

Category - {{ title|pluralize }}\n\n::\n\n filters:\n pluralize: strange_case.extensions.inflect.pluralize\n\nstrange_case.extensions.uuid.uuid\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis filter generates a UUID based on the provided input. The UUID is\ngenerated by taking a SHA1 hash of the input combined with a namespace\nidentifier. The available namespaces are:\n\n* ``dns`` for fully-qualified domain names as input\n* ``url`` for URLs (default)\n* ``oid`` for ISO OID input\n* ``X500`` for X.500 DNs in either DER or text format\n\n::\n\n {{ 'http://myhost.com/articles'|uuid('url') }}\n\n\nstrange_case.extensions.uuid.urn\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis filter generates a UUID URN based on the provided input. This is often\nuseful when needing to generate unique identifies that must be URIs, for\nexample when generating an Atom feed.\n\nThe UUID is generated by taking a SHA1 hash of the input combined with a\nnamespace identifier. The available namespaces are:\n\n* ``dns`` for fully-qualified domain names as input\n* ``url`` for URLs (default)\n* ``oid`` for ISO OID input\n* ``X500`` for X.500 DNs in either DER or text format\n\n::\n\n {{ 'http://myhost.com/articles'|uuid('url') }}\n\n---------------\nIMAGE PROCESSOR\n---------------\n\nThe image processor uses Pillow to create thumbnails. The usual way to do this is\nto specify the thumbnail size in a parent folder config, and then set `type:\nimage` on all the image files. This is done in the image folder's config.yaml\nfile::\n\n thumbnails:\n thumb: '480x480'\n file_types:\n - [image, '*.jpg']\n files:\n img_0001.jpg:\n alt: a great picture\n img_0002.jpg:\n ...\n\nIt registers all images to be processed by the image processor, so you don't\nhave to write an entry for every file in the folder.\n\nAnd of course, enable the image processor in your ``config.yaml``::\n\n processors:\n - strange_case.extensions.image\n\n------------------\nCATEGORY PROCESSOR\n------------------\n\nThis processor scans your site pages, looking for pages that have a \"category\"\nproperty in their config. For every category, it builds a ``category_detail``\npage that can list the pages, and a ``category_index`` page to list the\ncategories.\n\nEnable the category processor in your ``config.yaml``::\n\n processors:\n - strange_case.extensions.category\n\nAnd build ``categories.j2`` and ``category_detail.j2``. The ``category_detail``\npage can be named anything (it will get renamed based on the category), but the\n``categories`` page will keep its name/title/etc, so give it a sensible name.\n\nIn categories.j2 you can use the ``categories`` property to iterate over the\ncategory_detail pages::\n\n ---\n type: category_index\n ---\n {% extends 'layouts/base.j2' %}\n\n {% for category in my.categories %}\n

  • {{ category.title }} ({{ category.count }})
  • \n {% endfor %}\n\nIn category_detail.j2 you'll have a ``pages`` property::\n\n ---\n type: category_detail\n ---\n {% extends 'layouts/header.j2' %}\n\n {% block content %}\n \n {% endblock %}\n\n-------------------\nPAGINATED PROCESSOR\n-------------------\n\nThis processor can break up a large folder of pages. It is designed so that\nconverting from an index.j2 file to a paginated file is easy. Let's say your\nexisting blogs/index.j2 lookes like this::\n\n {% extends 'layouts/base.j2' %}\n\n {% block content %}\n \n {% endblock content %}\n\nWe'll change this to use pagination.\n\nEnable the paginated processor in your ``config.yaml``::\n\n processors:\n - strange_case.extensions.paginated\n\nAnd change the ``type`` to ``paginated``, and update the HTML to use pagination::\n\n ----\n type: paginated\n ----\n {% extends 'layouts/base.j2' %}\n\n {% block content %}\n \n\n
    \n {% if my.page.prev %}‹ {{ my.page.prev.title }} |\n {% else %}‹\n {% endif %}\n {{ my.page }}\n {% if my.page.next %}| {{ my.page.next.title }} ›\n {% else %}›\n {% endif %}\n
    \n {% endblock content %}\n\n-----------------------------\nSCSS AND CLEVERCSS PROCESSORS\n-----------------------------\n\nThese two get associated with ``.scss`` and ``.clevercss`` files and compile them to CSS files.\n\n::\n\n processors:\n - strange_case.extensions.scss\n - strange_case.extensions.clevercss\n\n-------\nTESTING\n-------\n\nI am currently (as of version 4.0.2) including tests::\n\n > pip install pytest\n > py.test\n\n-------\nLICENSE\n-------\n\n:Author: Colin T.A. Gray\n:Copyright: 2012 Colin T.A. Gray \n\nCopyright (c) 2012, Colin T.A. Gray\nAll rights reserved.\n\nSee LICENSE_ for more details (it's a simplified BSD license).\n\n.. _jekyll: https://github.com/mojombo/jekyll\n.. _hyde: http://ringce.com/hyde\n.. _Jinja2: http://jinja.pocoo.org/\n.. _LICENSE: https://github.com/colinta/StrangeCase/blob/master/LICENSE\n.. _PIL: http://www.pythonware.com/products/pil/\n.. _nanoc: http://nanoc.stoneship.org/\n.. _dateutil: http://labix.org/python-dateutil\n.. _pillow: https://pillow.readthedocs.io/en/stable/", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/colinta/StrangeCase", "keywords": "strange_case static site generator", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "StrangeCase", "package_url": "https://pypi.org/project/StrangeCase/", "platform": "any", "project_url": "https://pypi.org/project/StrangeCase/", "project_urls": { "Homepage": "https://github.com/colinta/StrangeCase" }, "release_url": "https://pypi.org/project/StrangeCase/4.6.8/", "requires_dist": null, "requires_python": ">3.0.0", "summary": "A straightforward python static site generator.", "version": "4.6.8" }, "last_serial": 5579437, "releases": { "4.6.0": [ { "comment_text": "", "digests": { "md5": "eff060b7b81e4f4e4a932530ef7cacd7", "sha256": "aa29deb65e0af3733753d84c75720126c5b9a334f01565d3a765dc258129dec6" }, "downloads": -1, "filename": "StrangeCase-4.6.0.tar.gz", "has_sig": false, "md5_digest": "eff060b7b81e4f4e4a932530ef7cacd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86120, "upload_time": "2013-01-19T20:49:45", "url": "https://files.pythonhosted.org/packages/8f/00/4a968bbea68df4fb3e51df70321a547379b6f0c1b1e23cfbbcf6e06279a4/StrangeCase-4.6.0.tar.gz" } ], "4.6.1": [ { "comment_text": "", "digests": { "md5": "b5d804fe92c0250abc2d29559cae6159", "sha256": "1b5af0b975f6669671f447e020c075d0a8098df8ceb71ecf07954d4e89603da3" }, "downloads": -1, "filename": "StrangeCase-4.6.1.tar.gz", "has_sig": false, "md5_digest": "b5d804fe92c0250abc2d29559cae6159", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86128, "upload_time": "2013-01-19T20:50:53", "url": "https://files.pythonhosted.org/packages/c9/e7/c9703c5a01fd15915529ac213642e119ad28e779181a8f2231674ba116c4/StrangeCase-4.6.1.tar.gz" } ], "4.6.2": [ { "comment_text": "", "digests": { "md5": "929f6b43ac41da831babe15fc076e28f", "sha256": "cd98dd942f892fa23de81b5d93e8d5f38ab65372567b66090af45cc661705276" }, "downloads": -1, "filename": "StrangeCase-4.6.2.tar.gz", "has_sig": false, "md5_digest": "929f6b43ac41da831babe15fc076e28f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 86130, "upload_time": "2013-01-19T20:53:47", "url": "https://files.pythonhosted.org/packages/ae/d2/e417a0bb491ede0bf94abf10d97ee3c642a6636e59769e17601567ed9611/StrangeCase-4.6.2.tar.gz" } ], "4.6.3": [ { "comment_text": "", "digests": { "md5": "14571bd04ad01490fd3d8b126d5a7f95", "sha256": "71b86c236113d3e6adee8550b1c43d40bd045febf0687a4a6cf398db753792f8" }, "downloads": -1, "filename": "StrangeCase-4.6.3.tar.gz", "has_sig": false, "md5_digest": "14571bd04ad01490fd3d8b126d5a7f95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85824, "upload_time": "2013-03-12T20:32:56", "url": "https://files.pythonhosted.org/packages/0e/10/48c8a55b100d2229b939b1d266c71b588d69567e7e650795c5d5bd0138e8/StrangeCase-4.6.3.tar.gz" } ], "4.6.5": [ { "comment_text": "", "digests": { "md5": "834d62257d3960bc63f17063f85f77e2", "sha256": "e74263d1b9cc0824c50522e1e0a1bae6b73ff4d4c5dff83c44d01903ad93ca8e" }, "downloads": -1, "filename": "StrangeCase-4.6.5.tar.gz", "has_sig": false, "md5_digest": "834d62257d3960bc63f17063f85f77e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85838, "upload_time": "2014-01-28T02:14:27", "url": "https://files.pythonhosted.org/packages/09/7a/3e7694af82e5c2372aebf4f33a7e8537d3083e07abd4e6b28e842f60ee97/StrangeCase-4.6.5.tar.gz" } ], "4.6.6": [ { "comment_text": "", "digests": { "md5": "263037b4ea157cf9cb987c653756f8f2", "sha256": "a91ba5231797689367b69be131c9be59fc30c402722f41c40e68dd80fdea02de" }, "downloads": -1, "filename": "StrangeCase-4.6.6.tar.gz", "has_sig": false, "md5_digest": "263037b4ea157cf9cb987c653756f8f2", "packagetype": "sdist", "python_version": "source", "requires_python": ">3.0.0", "size": 85588, "upload_time": "2019-07-17T16:08:17", "url": "https://files.pythonhosted.org/packages/ae/74/52f57955ccce1552d2164a4303a840681cd3d6ad91d33035635f8b40c549/StrangeCase-4.6.6.tar.gz" } ], "4.6.7": [ { "comment_text": "", "digests": { "md5": "093995f63d18699519d56a330ee453c5", "sha256": "b86d85ccb4466c55386a20e7f2c52b633eb2796a30ecab7b88235c55fd8c213f" }, "downloads": -1, "filename": "StrangeCase-4.6.7.tar.gz", "has_sig": false, "md5_digest": "093995f63d18699519d56a330ee453c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">3.0.0", "size": 85592, "upload_time": "2019-07-17T16:19:39", "url": "https://files.pythonhosted.org/packages/e3/01/4efbfa10974a88d8028232a12488bccf527b19bc1b4cddc6ea4ca8bad864/StrangeCase-4.6.7.tar.gz" } ], "4.6.8": [ { "comment_text": "", "digests": { "md5": "052c966eec73aae2ea43fcce657ce5a5", "sha256": "81761b08dec519d0a97bb58cf7923c4dd2ce1bbc332341762c97953f2f5a4da2" }, "downloads": -1, "filename": "StrangeCase-4.6.8.tar.gz", "has_sig": false, "md5_digest": "052c966eec73aae2ea43fcce657ce5a5", "packagetype": "sdist", "python_version": "source", "requires_python": ">3.0.0", "size": 85583, "upload_time": "2019-07-24T19:45:07", "url": "https://files.pythonhosted.org/packages/03/97/0f8d27da4fcf805895d9657a885d131245da80eb305b7db226ecf45aa2d9/StrangeCase-4.6.8.tar.gz" } ], "v2.1.1": [ { "comment_text": "", "digests": { "md5": "eaf7a1a1aa49abf9985e2044cab7a4d3", "sha256": "57d000c41138206733fd73ccd86f6d848bb7e8250dee58efbd55ec588a032a02" }, "downloads": -1, "filename": "StrangeCase-v2.1.1.tar.gz", "has_sig": false, "md5_digest": "eaf7a1a1aa49abf9985e2044cab7a4d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23883, "upload_time": "2012-02-28T21:46:04", "url": "https://files.pythonhosted.org/packages/d5/0c/8696de2be7ec41eb8a4db255bf063ad83ab40f0a38daab0d1599ff9abe4b/StrangeCase-v2.1.1.tar.gz" } ], "v2.1.2": [ { "comment_text": "", "digests": { "md5": "038208d1fdfd312a99131ca48d2823a5", "sha256": "5ece7a2a77b3dcfe555d20b8cbae6221874ec5bd8ee4a2b6898a8e755c4a3d3a" }, "downloads": -1, "filename": "StrangeCase-v2.1.2.tar.gz", "has_sig": false, "md5_digest": "038208d1fdfd312a99131ca48d2823a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30456, "upload_time": "2012-02-29T07:08:28", "url": "https://files.pythonhosted.org/packages/2f/98/883666ad83c2c0da8fa82264a18f3e27f8957facdea427ba00909647cd83/StrangeCase-v2.1.2.tar.gz" } ], "v2.1.3": [ { "comment_text": "", "digests": { "md5": "951d3459a82d85c66cddd270e5a6bf14", "sha256": "18cc103cd5092d3478d9d4b0679cd2acd4d1f0a58f522e53f2c9ee4bbbcf0459" }, "downloads": -1, "filename": "StrangeCase-v2.1.3.tar.gz", "has_sig": false, "md5_digest": "951d3459a82d85c66cddd270e5a6bf14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30572, "upload_time": "2012-02-29T07:19:05", "url": "https://files.pythonhosted.org/packages/48/14/b5ee3cf10094462e67d255dc7a8ea365a6cbb85862f11aa118ae2c4d8b42/StrangeCase-v2.1.3.tar.gz" } ], "v2.1.4": [ { "comment_text": "", "digests": { "md5": "5caf4d8ec790881fb1b2e8d888e26d39", "sha256": "a6d5fc2dc6d28f7e49514d4538f6e88554098bb312582cef9db2e94200a17475" }, "downloads": -1, "filename": "StrangeCase-v2.1.4.tar.gz", "has_sig": false, "md5_digest": "5caf4d8ec790881fb1b2e8d888e26d39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34542, "upload_time": "2012-02-29T21:50:05", "url": "https://files.pythonhosted.org/packages/35/38/31950c8a13271547b1b100da755e56107e55ef33e4337b56c0a1778c6912/StrangeCase-v2.1.4.tar.gz" } ], "v2.1.5": [ { "comment_text": "", "digests": { "md5": "f7c24f50010c7830f4eca6de100ab4bf", "sha256": "963e3ea409f530cc63249977d557b6038744ea4cb5b26bd2c0af80bbe4f5fa5b" }, "downloads": -1, "filename": "StrangeCase-v2.1.5.tar.gz", "has_sig": false, "md5_digest": "f7c24f50010c7830f4eca6de100ab4bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34073, "upload_time": "2012-02-29T22:09:16", "url": "https://files.pythonhosted.org/packages/a5/ea/5da03bed33efe073b2fbe72b7239c5137615777d4272f1c654252047e88b/StrangeCase-v2.1.5.tar.gz" } ], "v2.2.0": [ { "comment_text": "", "digests": { "md5": "63919ee14867c6180a7b5403b5dd6d4f", "sha256": "5015511efc3c345ee6bcecf4c2f2c21d6d8531284f13a1962072a23352e13ad6" }, "downloads": -1, "filename": "StrangeCase-v2.2.0.tar.gz", "has_sig": false, "md5_digest": "63919ee14867c6180a7b5403b5dd6d4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34520, "upload_time": "2012-03-01T20:14:46", "url": "https://files.pythonhosted.org/packages/9a/ba/6e5786d6514d464e8f1ecfb63d805796004bae3a18e7cb69e92a03831536/StrangeCase-v2.2.0.tar.gz" } ], "v2.2.1": [ { "comment_text": "", "digests": { "md5": "5de1c8cda8962be3c19fc5c29b8ce414", "sha256": "ef82fd409ff2378eae3a92fe230efbcf6555e638dfe5b843994b5dd61cffbf9b" }, "downloads": -1, "filename": "StrangeCase-v2.2.1.tar.gz", "has_sig": false, "md5_digest": "5de1c8cda8962be3c19fc5c29b8ce414", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34742, "upload_time": "2012-03-01T20:17:40", "url": "https://files.pythonhosted.org/packages/63/42/1f9c75143b89e8cc840a0eb7e0f4d6911e8911bd55dd507e66b196f3dca0/StrangeCase-v2.2.1.tar.gz" } ], "v2.2.2": [ { "comment_text": "", "digests": { "md5": "7344db02575f2674b55c06f8ed50e182", "sha256": "6f9f52ee6f62dc93a2ee9d7f1dab0a5a73f475c649cb6bd30fb54de699638530" }, "downloads": -1, "filename": "StrangeCase-v2.2.2.tar.gz", "has_sig": false, "md5_digest": "7344db02575f2674b55c06f8ed50e182", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34750, "upload_time": "2012-03-02T19:30:05", "url": "https://files.pythonhosted.org/packages/42/9e/2400f3791924f299cbc678f57b6f87c4ede005681446921aabd8fc0ffca3/StrangeCase-v2.2.2.tar.gz" } ], "v2.3.0": [ { "comment_text": "", "digests": { "md5": "025d2d00bf4f2788621b101897e6a069", "sha256": "8d548c832017018a9bd21d2d388bdbd3fef5a25154496f20fdb422f7323bb850" }, "downloads": -1, "filename": "StrangeCase-v2.3.0.tar.gz", "has_sig": false, "md5_digest": "025d2d00bf4f2788621b101897e6a069", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35963, "upload_time": "2012-03-06T19:05:58", "url": "https://files.pythonhosted.org/packages/15/91/891803ad78c3f8ff572b96be2d3f7a6d458f9b49aaa04b720a6cd7764c7d/StrangeCase-v2.3.0.tar.gz" } ], "v2.3.1": [ { "comment_text": "", "digests": { "md5": "64b219cc43fb9511698aefd229851b0f", "sha256": "4eb9302cd2ab3f582bfffb1c3b80215382b168d07984dfc1c6ff22ff368315d4" }, "downloads": -1, "filename": "StrangeCase-v2.3.1.tar.gz", "has_sig": false, "md5_digest": "64b219cc43fb9511698aefd229851b0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37655, "upload_time": "2012-03-06T19:38:18", "url": "https://files.pythonhosted.org/packages/d8/9b/0cd1d59b325ec4fcbf8c17bf74182b26a9059787887055088dd2a1732863/StrangeCase-v2.3.1.tar.gz" } ], "v2.4": [ { "comment_text": "", "digests": { "md5": "7a64dc3f063241f7f030931477582688", "sha256": "d1e52861e8768a6fa0478e1393867ab8029af0925ffe981a247e42ea067e2d0d" }, "downloads": -1, "filename": "StrangeCase-v2.4.tar.gz", "has_sig": false, "md5_digest": "7a64dc3f063241f7f030931477582688", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39319, "upload_time": "2012-03-11T20:13:26", "url": "https://files.pythonhosted.org/packages/2a/62/696d24cc7466ec911b3602d1e91340a236cfcf2258ec955e3a87472b0216/StrangeCase-v2.4.tar.gz" } ], "v2.4.1": [ { "comment_text": "", "digests": { "md5": "589e3ad939675033de0a019e3ecb7c13", "sha256": "ebdd5faa444e2c1352546f5a0a9031a8039aede176e22eccd84287907d2c6082" }, "downloads": -1, "filename": "StrangeCase-v2.4.1.tar.gz", "has_sig": false, "md5_digest": "589e3ad939675033de0a019e3ecb7c13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48948, "upload_time": "2012-03-12T17:37:57", "url": "https://files.pythonhosted.org/packages/5e/ee/db66b84544445032d6f08928f4914e3524cefb38cbae3e6cfb6dca1685c2/StrangeCase-v2.4.1.tar.gz" } ], "v3.0.0": [ { "comment_text": "", "digests": { "md5": "b4c9c1a8c11ee0b66ca915e69c2672c8", "sha256": "7ecac12d93d7365ef84256552c10e9ce55117d0c99d4a920b1000c7228b7f86d" }, "downloads": -1, "filename": "StrangeCase-v3.0.0.tar.gz", "has_sig": false, "md5_digest": "b4c9c1a8c11ee0b66ca915e69c2672c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50679, "upload_time": "2012-03-14T06:02:27", "url": "https://files.pythonhosted.org/packages/80/ea/cb11fea8092b4b00a6e4011dfbab8d944f59e9c0c595f444502429924417/StrangeCase-v3.0.0.tar.gz" } ], "v3.0.1": [ { "comment_text": "", "digests": { "md5": "c3dc04744a355afbe364d44702bcbfde", "sha256": "d31064d4d59053af12448ac35ec29ba4f5a394b2e17beda55c37fc4ef4d0029a" }, "downloads": -1, "filename": "StrangeCase-v3.0.1.tar.gz", "has_sig": false, "md5_digest": "c3dc04744a355afbe364d44702bcbfde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50683, "upload_time": "2012-03-14T06:05:39", "url": "https://files.pythonhosted.org/packages/64/3d/700e1d19ac750878768e582e356b5b6d5e39ac9b5c5feb8dfd52ae7c7150/StrangeCase-v3.0.1.tar.gz" } ], "v3.0.2": [ { "comment_text": "", "digests": { "md5": "767bb873b3e800b6a23b1020fe62ef22", "sha256": "d8463f68ccd24e77e8c2a48c063553b33e1d358344aeb78ed0ce8180e8403643" }, "downloads": -1, "filename": "StrangeCase-v3.0.2.tar.gz", "has_sig": false, "md5_digest": "767bb873b3e800b6a23b1020fe62ef22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50689, "upload_time": "2012-03-14T06:08:58", "url": "https://files.pythonhosted.org/packages/21/b5/5ce64776f47bfc8729a0e1cbf28d74bbe1221aa6a0ec3344bd00d6668122/StrangeCase-v3.0.2.tar.gz" } ], "v3.1.0": [ { "comment_text": "", "digests": { "md5": "841ab7d98807aec73cff4aeea14a398b", "sha256": "f6b057e985bf82cee7eefb168801986bab824514b6add7bdf6f06077a0371ed1" }, "downloads": -1, "filename": "StrangeCase-v3.1.0.tar.gz", "has_sig": false, "md5_digest": "841ab7d98807aec73cff4aeea14a398b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51654, "upload_time": "2012-03-22T17:58:01", "url": "https://files.pythonhosted.org/packages/63/a2/7cc43bf63d59c84beb10b11f653602cb6664e464ca9ed3885f459ecd94a5/StrangeCase-v3.1.0.tar.gz" } ], "v3.1.1": [ { "comment_text": "", "digests": { "md5": "b26c48f4c7119a5ddadd3a950cb8cab5", "sha256": "d2341bca4d2b521a2e8847966883d58d8b8ee34d50f2f6387d6d1bdf7d651c27" }, "downloads": -1, "filename": "StrangeCase-v3.1.1.tar.gz", "has_sig": false, "md5_digest": "b26c48f4c7119a5ddadd3a950cb8cab5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51711, "upload_time": "2012-03-22T18:28:51", "url": "https://files.pythonhosted.org/packages/ed/ea/a167a1e3a7aaba4db5c8375fbc0c2735d3232ea0f21aeb57db36d05185a6/StrangeCase-v3.1.1.tar.gz" } ], "v3.1.2": [ { "comment_text": "", "digests": { "md5": "d28dc8271c4ddade83630188c8855541", "sha256": "48ec6d4a56996589f07f22f2c78d85222d4cc2dcebde6f04ac7c2e6350c735d3" }, "downloads": -1, "filename": "StrangeCase-v3.1.2.tar.gz", "has_sig": false, "md5_digest": "d28dc8271c4ddade83630188c8855541", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51731, "upload_time": "2012-03-22T22:20:49", "url": "https://files.pythonhosted.org/packages/01/42/b05058cb6c58a6ce6fd357acf42a457bd677b2534b5a91a192d321ce966b/StrangeCase-v3.1.2.tar.gz" } ], "v3.2.0": [ { "comment_text": "", "digests": { "md5": "1193c0f7e5e3e8b13b54a22863a34fdd", "sha256": "3838f4c164d53b5047a89860b6300813b9ba9fd2ba1a6c5040df31cfbcee2806" }, "downloads": -1, "filename": "StrangeCase-v3.2.0.tar.gz", "has_sig": false, "md5_digest": "1193c0f7e5e3e8b13b54a22863a34fdd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52922, "upload_time": "2012-03-30T06:18:24", "url": "https://files.pythonhosted.org/packages/8f/ca/4273c594924ad481282e2d1ee27ed6a707dff9bf4a32bda5e9ec873b30e7/StrangeCase-v3.2.0.tar.gz" } ], "v3.2.1": [ { "comment_text": "", "digests": { "md5": "f4a01a0bc6a393d04ca6626086f5a9b9", "sha256": "23070929cf9a63d72ef3b4ba9ee3abc8fec3a6b201bfc1a800d403679e9535dd" }, "downloads": -1, "filename": "StrangeCase-v3.2.1.tar.gz", "has_sig": false, "md5_digest": "f4a01a0bc6a393d04ca6626086f5a9b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55049, "upload_time": "2012-03-30T06:53:31", "url": "https://files.pythonhosted.org/packages/38/12/41f50a75746dcf38cc550f6052c08fe7dd9215cd9b84e816f37ed6c29635/StrangeCase-v3.2.1.tar.gz" } ], "v3.4.0": [ { "comment_text": "", "digests": { "md5": "d7f47a8e17a906959fdafe77cf30529b", "sha256": "a8cc950dc700e986c16551e4a4a636ca8300226697c9fdb7c7d42e6f12300d9e" }, "downloads": -1, "filename": "StrangeCase-v3.4.0.tar.gz", "has_sig": false, "md5_digest": "d7f47a8e17a906959fdafe77cf30529b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55217, "upload_time": "2012-04-04T04:04:39", "url": "https://files.pythonhosted.org/packages/df/c2/e0e8c901dc4e54418de129f2904cfbc8f4aa5340463c7aff9102ed4a4720/StrangeCase-v3.4.0.tar.gz" } ], "v4.0.1": [ { "comment_text": "", "digests": { "md5": "0790d709c0cb4ac63a66f896793ed84c", "sha256": "eda2c5f4309b58f865f159ef06584b543718ec2d465aeae9be0fe785c9700f06" }, "downloads": -1, "filename": "StrangeCase-v4.0.1.tar.gz", "has_sig": false, "md5_digest": "0790d709c0cb4ac63a66f896793ed84c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55737, "upload_time": "2012-04-26T05:14:50", "url": "https://files.pythonhosted.org/packages/c2/45/670c1d0e96ce47fc61be08dd456849b798dbbf2e0adda8d188ff773548e8/StrangeCase-v4.0.1.tar.gz" } ], "v4.0.10": [ { "comment_text": "", "digests": { "md5": "a106bf714be83cbd1a47282228818f87", "sha256": "4ea1fc17e43735f112505ce78b87b2243ac57e507f059a755c4bc01839f0c3bf" }, "downloads": -1, "filename": "StrangeCase-v4.0.10.tar.gz", "has_sig": false, "md5_digest": "a106bf714be83cbd1a47282228818f87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67811, "upload_time": "2012-04-27T19:09:13", "url": "https://files.pythonhosted.org/packages/52/38/41ab93bd0e2c1365a996b365b37489c51a80b33199f5f44ca5c4360aa28d/StrangeCase-v4.0.10.tar.gz" } ], "v4.0.11": [ { "comment_text": "", "digests": { "md5": "c25f94fe203ceaa23c0620be660c0d90", "sha256": "7ba9a42b6b3e558de7ad8500ee02f35a8a923d5495fedb5bb1e2d395ef32f08f" }, "downloads": -1, "filename": "StrangeCase-v4.0.11.tar.gz", "has_sig": false, "md5_digest": "c25f94fe203ceaa23c0620be660c0d90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67981, "upload_time": "2012-04-27T20:17:53", "url": "https://files.pythonhosted.org/packages/7c/48/a4b04fe7bcdc7cfee17bacd1dae5e49372d29030f627297d4b1d480b3adc/StrangeCase-v4.0.11.tar.gz" } ], "v4.0.12": [ { "comment_text": "", "digests": { "md5": "4a20eb804dd52a88b24483c6bee18aee", "sha256": "488efdad947eaddf92e349ca8e1d17cf868de570a481855cb4c0d6fb330f7231" }, "downloads": -1, "filename": "StrangeCase-v4.0.12.tar.gz", "has_sig": false, "md5_digest": "4a20eb804dd52a88b24483c6bee18aee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68098, "upload_time": "2012-04-27T22:15:43", "url": "https://files.pythonhosted.org/packages/0b/32/74f8ae9b45e5094a52aab26ddde07ec4beb230a11ff3c101e48cf25494c7/StrangeCase-v4.0.12.tar.gz" } ], "v4.0.13": [ { "comment_text": "", "digests": { "md5": "1a82f33fda05dff974d708b0e99a1b2d", "sha256": "da5227dc1403cf8695f9a6f7f32906afdd0806363cd1d4e64e2166c319a5b17a" }, "downloads": -1, "filename": "StrangeCase-v4.0.13.tar.gz", "has_sig": false, "md5_digest": "1a82f33fda05dff974d708b0e99a1b2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68097, "upload_time": "2012-05-02T00:15:29", "url": "https://files.pythonhosted.org/packages/a5/07/5a0e5b175064df8597bbcedf97cf59537de0e0ee57e20645168cf705f683/StrangeCase-v4.0.13.tar.gz" } ], "v4.0.14": [ { "comment_text": "", "digests": { "md5": "c72d745af3df3df24463d46733301839", "sha256": "5bc62af02dab1c5358146a4283b1dbe75377fb303200da0b45782dec1ad85cc3" }, "downloads": -1, "filename": "StrangeCase-v4.0.14.tar.gz", "has_sig": false, "md5_digest": "c72d745af3df3df24463d46733301839", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68098, "upload_time": "2012-05-02T00:18:47", "url": "https://files.pythonhosted.org/packages/9e/79/a8534e907b001526c90c480427d7ad0cb9674e6ea280d460011a19023c69/StrangeCase-v4.0.14.tar.gz" } ], "v4.0.15": [ { "comment_text": "", "digests": { "md5": "7708b111107b37b130a93db58d50595b", "sha256": "2e9d628b039587c37de344a539f7a580e5452aaf87714395731b4ba7e927e0c1" }, "downloads": -1, "filename": "StrangeCase-v4.0.15.tar.gz", "has_sig": false, "md5_digest": "7708b111107b37b130a93db58d50595b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68100, "upload_time": "2012-05-02T00:20:30", "url": "https://files.pythonhosted.org/packages/0d/11/476ce469d0f3e49ae66f18e113b731ff7183af5f945dadbee27ed6f53bed/StrangeCase-v4.0.15.tar.gz" } ], "v4.0.16": [ { "comment_text": "", "digests": { "md5": "0d8bebf23ba6993c38c25e5756278e4d", "sha256": "37cd8268216548eba9f14645f530673151681ab3e6e6075a465e39a5fa1d0476" }, "downloads": -1, "filename": "StrangeCase-v4.0.16.tar.gz", "has_sig": false, "md5_digest": "0d8bebf23ba6993c38c25e5756278e4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69078, "upload_time": "2012-05-02T03:57:01", "url": "https://files.pythonhosted.org/packages/27/83/aecbc9833c34c421ba1a6c701aa32641b69171a69c3c98ce34090a69cc3c/StrangeCase-v4.0.16.tar.gz" } ], "v4.0.17": [ { "comment_text": "", "digests": { "md5": "2e67faf307f617128b2ad97321ccfbaf", "sha256": "5cf7adfb67d85649290250f39d131b4a12a9ed5a2259332095eea024b3fb2d24" }, "downloads": -1, "filename": "StrangeCase-v4.0.17.tar.gz", "has_sig": false, "md5_digest": "2e67faf307f617128b2ad97321ccfbaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 65114, "upload_time": "2012-05-03T17:18:33", "url": "https://files.pythonhosted.org/packages/a9/ab/fd617e387353e7fcd9595964fed445a2e98ff2876270614626bc921a8f34/StrangeCase-v4.0.17.tar.gz" } ], "v4.0.2": [ { "comment_text": "", "digests": { "md5": "58d2308300530e6275064d57283ee1c6", "sha256": "942a3ef853c8c6d00d06bb9c9952b1d3abe4566c17a1fde2f2388e7178eadd94" }, "downloads": -1, "filename": "StrangeCase-v4.0.2.tar.gz", "has_sig": false, "md5_digest": "58d2308300530e6275064d57283ee1c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55903, "upload_time": "2012-04-26T05:24:19", "url": "https://files.pythonhosted.org/packages/7d/52/86ebc4404aedb623aa50a43131d5d627b84d9cbb189813ad6d6506b8ae5f/StrangeCase-v4.0.2.tar.gz" } ], "v4.0.3": [ { "comment_text": "", "digests": { "md5": "056a154c0faca5567f8057207890d0b9", "sha256": "c8c7a9de9fbf18bdf3efb6f5c3e6abaf687fc2cdcbe34081af0c6cd9d17d57e3" }, "downloads": -1, "filename": "StrangeCase-v4.0.3.tar.gz", "has_sig": false, "md5_digest": "056a154c0faca5567f8057207890d0b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55969, "upload_time": "2012-04-26T15:38:47", "url": "https://files.pythonhosted.org/packages/97/2c/99c66416433517b591ba830882c5194935bbb0ad5d05ca406cf8b9f16af8/StrangeCase-v4.0.3.tar.gz" } ], "v4.0.4": [ { "comment_text": "", "digests": { "md5": "1d9e172b313e5f7fb535bbaa2e47b302", "sha256": "ad71c7adafa1f2a0a5c2368241cc67932cf6e988354f2474b6dd47e0f3d6efcf" }, "downloads": -1, "filename": "StrangeCase-v4.0.4.tar.gz", "has_sig": false, "md5_digest": "1d9e172b313e5f7fb535bbaa2e47b302", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58137, "upload_time": "2012-04-26T19:52:46", "url": "https://files.pythonhosted.org/packages/cf/49/d2a2b6496b35524a1227cff88191611ecb2aac3a9a025880e94d5eca4c96/StrangeCase-v4.0.4.tar.gz" } ], "v4.0.5": [ { "comment_text": "", "digests": { "md5": "5ee83229235e0c1e972bccc0fd607184", "sha256": "a19f6718c9d9d29d82b20b7634bb98ecc4edf7c9c33027e76d2db6910800a10a" }, "downloads": -1, "filename": "StrangeCase-v4.0.5.tar.gz", "has_sig": false, "md5_digest": "5ee83229235e0c1e972bccc0fd607184", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58133, "upload_time": "2012-04-26T19:55:22", "url": "https://files.pythonhosted.org/packages/41/c6/da779773e47ead2a5989433b074b6550ba637ec2329f33187352dce05032/StrangeCase-v4.0.5.tar.gz" } ], "v4.0.6": [ { "comment_text": "", "digests": { "md5": "5b63eb1674723907bb76a88eccd62f0e", "sha256": "c5220d7755ec0213e83d86aaed072ee38da610bfca91df0c19fef3aa92104fe9" }, "downloads": -1, "filename": "StrangeCase-v4.0.6.tar.gz", "has_sig": false, "md5_digest": "5b63eb1674723907bb76a88eccd62f0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66931, "upload_time": "2012-04-26T20:18:00", "url": "https://files.pythonhosted.org/packages/c2/22/84b09ff5238d8af12d9c529c46685b348c88134205ccc238150511ae9ff4/StrangeCase-v4.0.6.tar.gz" } ], "v4.0.7": [ { "comment_text": "", "digests": { "md5": "f1cae9ff592d3eb41c14211ef9b15049", "sha256": "46d25f339cf7590a3af71054f5464a2d8b31d68f5889b5518a6d03123f52c724" }, "downloads": -1, "filename": "StrangeCase-v4.0.7.tar.gz", "has_sig": false, "md5_digest": "f1cae9ff592d3eb41c14211ef9b15049", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67060, "upload_time": "2012-04-26T21:06:12", "url": "https://files.pythonhosted.org/packages/fc/e9/b07fb87f9947bc8562b7d7a69160ad6735d71ba685c39e77cc5432ae6204/StrangeCase-v4.0.7.tar.gz" } ], "v4.0.8": [ { "comment_text": "", "digests": { "md5": "54863bb0b9132cbf5e37bb6a88eea491", "sha256": "64adb001605667590fc2110db3b65e756f9c7b466fa2b572b92972f59f8c39ff" }, "downloads": -1, "filename": "StrangeCase-v4.0.8.tar.gz", "has_sig": false, "md5_digest": "54863bb0b9132cbf5e37bb6a88eea491", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67140, "upload_time": "2012-04-27T00:45:16", "url": "https://files.pythonhosted.org/packages/f1/7c/ed74179d7d5710e2526b85c84dd2e0a721c19bfea5faea257863e63ed4bd/StrangeCase-v4.0.8.tar.gz" } ], "v4.0.9": [ { "comment_text": "", "digests": { "md5": "ce79b5d56d8d5dd5b67a6ad4f92f67b3", "sha256": "cc1db54b9f2b85a8c2acfd5b1e1b767695b983bb005ccc5dde8a9731ae9f635c" }, "downloads": -1, "filename": "StrangeCase-v4.0.9.tar.gz", "has_sig": false, "md5_digest": "ce79b5d56d8d5dd5b67a6ad4f92f67b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67152, "upload_time": "2012-04-27T00:48:32", "url": "https://files.pythonhosted.org/packages/74/a8/0094e450934893ef26bf3127fa3c35878b208da627feb1cdbe0525751c03/StrangeCase-v4.0.9.tar.gz" } ], "v4.1.0": [ { "comment_text": "", "digests": { "md5": "51eb5c3ac74a17fcc05f2a2359fcceaf", "sha256": "c2000f24c9f563a350a905cc28e002b5e02247e3f27726b710c4600e36a95ed0" }, "downloads": -1, "filename": "StrangeCase-v4.1.0.tar.gz", "has_sig": false, "md5_digest": "51eb5c3ac74a17fcc05f2a2359fcceaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 65950, "upload_time": "2012-05-03T22:20:36", "url": "https://files.pythonhosted.org/packages/00/6a/5ed5eb2b759cc53fec1e85cfecd40d0cfc71e3a68393e5a0edced1bb9bd0/StrangeCase-v4.1.0.tar.gz" } ], "v4.1.2": [ { "comment_text": "", "digests": { "md5": "b0fc3ece6eabd89f638339c86aa3187f", "sha256": "a471c5ad9a2dd6b706f30c191b301f34d7d2fec4d9789a738aa047b974136271" }, "downloads": -1, "filename": "StrangeCase-v4.1.2.tar.gz", "has_sig": false, "md5_digest": "b0fc3ece6eabd89f638339c86aa3187f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66026, "upload_time": "2012-05-04T00:18:19", "url": "https://files.pythonhosted.org/packages/a0/c0/a3dbf33915fbaad321288cfd387c97b77a58ac113a40a8242d0232f2bb55/StrangeCase-v4.1.2.tar.gz" } ], "v4.1.3": [ { "comment_text": "", "digests": { "md5": "2ee307df40d7845b1d8cb4b57722c8bd", "sha256": "143a48926e8a924394459f54a8827e94ceed732ad98537ffe15140b9c207f26c" }, "downloads": -1, "filename": "StrangeCase-v4.1.3.tar.gz", "has_sig": false, "md5_digest": "2ee307df40d7845b1d8cb4b57722c8bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66070, "upload_time": "2012-05-04T00:23:19", "url": "https://files.pythonhosted.org/packages/03/67/f67815e2287a884d6d14d20049aa88a73e6a09a8f29b629b752aa9540d8f/StrangeCase-v4.1.3.tar.gz" } ], "v4.1.4": [ { "comment_text": "", "digests": { "md5": "108c43f6a086648bb9f0828a8002f35f", "sha256": "89ae9f318b7752f949fcd389408bc058ef7472f073aa0668fda4f46401ef37bf" }, "downloads": -1, "filename": "StrangeCase-v4.1.4.tar.gz", "has_sig": false, "md5_digest": "108c43f6a086648bb9f0828a8002f35f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66336, "upload_time": "2012-05-04T19:54:33", "url": "https://files.pythonhosted.org/packages/4f/66/6c30ad033edd71be0374e7134b286686b888b7449311e7152f2baf80fbb6/StrangeCase-v4.1.4.tar.gz" } ], "v4.1.5": [ { "comment_text": "", "digests": { "md5": "985de0bb49c7547a925a6b486c60fb10", "sha256": "313c965f629f246e51d0956a23c382b49f5ff505cd112817a27c7fa954b64743" }, "downloads": -1, "filename": "StrangeCase-v4.1.5.tar.gz", "has_sig": false, "md5_digest": "985de0bb49c7547a925a6b486c60fb10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68517, "upload_time": "2012-05-06T01:04:07", "url": "https://files.pythonhosted.org/packages/71/25/dfbaab923614f4fffed89958f69c54b37361ef6e32aaac804101bc54497c/StrangeCase-v4.1.5.tar.gz" } ], "v4.1.6": [ { "comment_text": "", "digests": { "md5": "81d2bd46dc4a07adb55ed957001d6691", "sha256": "0211d8f83e12b55bb0d55e2f7f0cd6a8ac6276893be8753b6a571713de36c16c" }, "downloads": -1, "filename": "StrangeCase-v4.1.6.tar.gz", "has_sig": false, "md5_digest": "81d2bd46dc4a07adb55ed957001d6691", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69916, "upload_time": "2012-05-06T17:14:15", "url": "https://files.pythonhosted.org/packages/67/87/8bab1ecaa2e19a548e86811f4abe3f002ce516ef0dce1bf751e8ff1e2f79/StrangeCase-v4.1.6.tar.gz" } ], "v4.1.7": [ { "comment_text": "", "digests": { "md5": "3b52c65a11e28da274e45d3174f62fe1", "sha256": "20c32d00441677d9b41700813547daee75b0509237c358f55d61f9c54858070d" }, "downloads": -1, "filename": "StrangeCase-v4.1.7.tar.gz", "has_sig": false, "md5_digest": "3b52c65a11e28da274e45d3174f62fe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71751, "upload_time": "2012-05-07T17:30:54", "url": "https://files.pythonhosted.org/packages/90/45/643f4689aeb448a2ab3945ffa36916f7660c7370be78d6979ba960e20ca1/StrangeCase-v4.1.7.tar.gz" } ], "v4.1.8": [ { "comment_text": "", "digests": { "md5": "d0811d5ddd585e1b3199823b5fbcd08a", "sha256": "b5db5e0fbedea989a81cbe7f2a3f5de1ba9a96be5bb85a74978cfda8aef05ebe" }, "downloads": -1, "filename": "StrangeCase-v4.1.8.tar.gz", "has_sig": false, "md5_digest": "d0811d5ddd585e1b3199823b5fbcd08a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71868, "upload_time": "2012-05-08T00:05:49", "url": "https://files.pythonhosted.org/packages/8a/ac/48c74c653f4bbeabe1365dadf16547d4cc3e3c967d6ba182c20d48d6a07c/StrangeCase-v4.1.8.tar.gz" } ], "v4.1.9": [ { "comment_text": "", "digests": { "md5": "1f7c8834e3fc8807b5044cdc4ea0514a", "sha256": "07395e74139c984df9891a5468e868714e39bd176e4e4f2a0ce975993b2c4722" }, "downloads": -1, "filename": "StrangeCase-v4.1.9.tar.gz", "has_sig": false, "md5_digest": "1f7c8834e3fc8807b5044cdc4ea0514a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72579, "upload_time": "2012-05-09T18:48:55", "url": "https://files.pythonhosted.org/packages/41/23/9a927bfc72f60a1c6879c1b7a9b974a0f4ccb84448c3d26914d7cfc4a241/StrangeCase-v4.1.9.tar.gz" } ], "v4.2.0": [ { "comment_text": "", "digests": { "md5": "c8a601da356e85682d22ed190a4b73fa", "sha256": "1fed21f05e8748aa2bab384fd24f9694a444a5d85bdaacc75668e702b211eb8f" }, "downloads": -1, "filename": "StrangeCase-v4.2.0.tar.gz", "has_sig": false, "md5_digest": "c8a601da356e85682d22ed190a4b73fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72830, "upload_time": "2012-05-09T22:39:14", "url": "https://files.pythonhosted.org/packages/04/a4/569890e1aa43094f85da4f218f6886ddca48a6f6d33a44a5e6dd64142b8e/StrangeCase-v4.2.0.tar.gz" } ], "v4.2.1": [ { "comment_text": "", "digests": { "md5": "ff994d24b52b0fa60f64189fc2c5dedc", "sha256": "cbacc48b66da419db7268c37eb3e735d6712160ed2be9ffe9b531f81c2267a5e" }, "downloads": -1, "filename": "StrangeCase-v4.2.1.tar.gz", "has_sig": false, "md5_digest": "ff994d24b52b0fa60f64189fc2c5dedc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72813, "upload_time": "2012-05-09T22:41:31", "url": "https://files.pythonhosted.org/packages/2b/53/394292f420a7245532b1c43690bb5c17bd29806070d801afc4c5f2ba9657/StrangeCase-v4.2.1.tar.gz" } ], "v4.3.0": [ { "comment_text": "", "digests": { "md5": "4dacb927fbd2a5818d29091aab833f54", "sha256": "a14431c4fcadd1da039d07ae64db1d6185c85e925f2aba3400cd0761e7a08313" }, "downloads": -1, "filename": "StrangeCase-v4.3.0.tar.gz", "has_sig": false, "md5_digest": "4dacb927fbd2a5818d29091aab833f54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 72868, "upload_time": "2012-05-10T07:53:34", "url": "https://files.pythonhosted.org/packages/3d/29/c84d3a3b7f9d476c732d13de6377aa1acc847df250b1e8312fe0759a9296/StrangeCase-v4.3.0.tar.gz" } ], "v4.3.1": [ { "comment_text": "", "digests": { "md5": "a6a6b2da059d5b99535cc63a21968f56", "sha256": "6a359e62fe1eee44e832088235f7846dbac6e7ac2cfae7a4bfc37fcf953aaf13" }, "downloads": -1, "filename": "StrangeCase-v4.3.1.tar.gz", "has_sig": false, "md5_digest": "a6a6b2da059d5b99535cc63a21968f56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76021, "upload_time": "2012-05-10T18:59:13", "url": "https://files.pythonhosted.org/packages/c1/4c/854d1e2a9bc5f5dce366cb69ea0e093de44c1a63641d5621f672b4b7de72/StrangeCase-v4.3.1.tar.gz" } ], "v4.4.0": [ { "comment_text": "", "digests": { "md5": "c8fa888b7f6ebe99b803c5f81703de9f", "sha256": "a200eda0a9645e1a2512a0d9c5ad56d1321f7a2df89167ec3602abe3595f5aa7" }, "downloads": -1, "filename": "StrangeCase-v4.4.0.tar.gz", "has_sig": false, "md5_digest": "c8fa888b7f6ebe99b803c5f81703de9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76575, "upload_time": "2012-05-11T17:56:20", "url": "https://files.pythonhosted.org/packages/58/64/799094366b5bb2c823a27fb6041195a6694acba08ab16372b1716aaf213a/StrangeCase-v4.4.0.tar.gz" } ], "v4.5.0": [ { "comment_text": "", "digests": { "md5": "0919f584c131d7a3fee4be715e7ea560", "sha256": "3cebf5c584cbb555fcfa2ca671b1a76f13a74cc167bb2b44e12b9e3bcefebd53" }, "downloads": -1, "filename": "StrangeCase-v4.5.0.tar.gz", "has_sig": false, "md5_digest": "0919f584c131d7a3fee4be715e7ea560", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 77268, "upload_time": "2012-05-11T21:11:52", "url": "https://files.pythonhosted.org/packages/22/fb/31d75b0ea5921184c003a89f008db6ff4f29c65b3482fb8270f27ef46975/StrangeCase-v4.5.0.tar.gz" } ], "v4.5.1": [ { "comment_text": "", "digests": { "md5": "fd6ee344edca5feab95c0196d2b1e9f6", "sha256": "a42637a9e5facfe8997f98d1debebc2eff76b0818d7639ec259048ad814d83af" }, "downloads": -1, "filename": "StrangeCase-v4.5.1.tar.gz", "has_sig": false, "md5_digest": "fd6ee344edca5feab95c0196d2b1e9f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81576, "upload_time": "2012-05-12T18:14:08", "url": "https://files.pythonhosted.org/packages/5f/00/e8495bfc20a9d2bd12e4f7fbc0f6b15bbe7229285b6c636f00b45aa2852a/StrangeCase-v4.5.1.tar.gz" } ], "v4.5.10": [ { "comment_text": "", "digests": { "md5": "54a072399f886577e4afeaf510099117", "sha256": "21d00abb673128a026aa4bcea752a62851f08070d83e70e38852eb08a9c7d493" }, "downloads": -1, "filename": "StrangeCase-v4.5.10.tar.gz", "has_sig": false, "md5_digest": "54a072399f886577e4afeaf510099117", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83439, "upload_time": "2012-06-11T16:55:26", "url": "https://files.pythonhosted.org/packages/d6/e9/5f68122867d487c92895714a13fa92fdd9df596b78352063960deeae2f98/StrangeCase-v4.5.10.tar.gz" } ], "v4.5.11": [ { "comment_text": "", "digests": { "md5": "afa206b6a1cdbe3770401cde25d10044", "sha256": "862ac84351029d4a8b44383c0b6e8184964df9ebd29debe168a48561333664ab" }, "downloads": -1, "filename": "StrangeCase-v4.5.11.tar.gz", "has_sig": false, "md5_digest": "afa206b6a1cdbe3770401cde25d10044", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83677, "upload_time": "2012-06-14T21:12:14", "url": "https://files.pythonhosted.org/packages/91/04/92d1eb803de6024e474ce32e46b96dd382ee05fe974f8f858e81e4e77111/StrangeCase-v4.5.11.tar.gz" } ], "v4.5.12": [ { "comment_text": "", "digests": { "md5": "87d7bbecf1d335f7480e15857a176f3e", "sha256": "519d7d9e5dccf354d3df1252a03acb006ca75f165522e02930e8e36d59d1d371" }, "downloads": -1, "filename": "StrangeCase-v4.5.12.tar.gz", "has_sig": false, "md5_digest": "87d7bbecf1d335f7480e15857a176f3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83561, "upload_time": "2012-06-19T18:25:27", "url": "https://files.pythonhosted.org/packages/36/3e/ba04685a2f533df4dea7b4925cf406d4d59f1ed0848d802191cd5d88ffef/StrangeCase-v4.5.12.tar.gz" } ], "v4.5.13": [ { "comment_text": "", "digests": { "md5": "b0c6eeb9895569d3ea7144a4eaab2eab", "sha256": "679c714ffe6029b67aff6af606050060e871eb7aad0ebd205de515282d43de42" }, "downloads": -1, "filename": "StrangeCase-v4.5.13.tar.gz", "has_sig": false, "md5_digest": "b0c6eeb9895569d3ea7144a4eaab2eab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83586, "upload_time": "2012-06-19T22:38:23", "url": "https://files.pythonhosted.org/packages/3b/ba/3ea1a2f18b70852cf272ac653c00d66788c31abac606bc8c1e2b32ae7770/StrangeCase-v4.5.13.tar.gz" } ], "v4.5.14": [ { "comment_text": "", "digests": { "md5": "a5f4220f00b41fc001e1bf9e9b1a9ac3", "sha256": "d085631537e67b9c001b84478c076427fd8710970f7e4dd8b7f8ae8d38ab5378" }, "downloads": -1, "filename": "StrangeCase-v4.5.14.tar.gz", "has_sig": false, "md5_digest": "a5f4220f00b41fc001e1bf9e9b1a9ac3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83578, "upload_time": "2012-06-19T22:39:35", "url": "https://files.pythonhosted.org/packages/dc/b4/d2dd77c3080d4b26825b3753fa9c6c7fe17b99fb19a839356cc9c5a5d729/StrangeCase-v4.5.14.tar.gz" } ], "v4.5.15": [ { "comment_text": "", "digests": { "md5": "daf86fbb745dc4abc6c907b1db72149c", "sha256": "6ac071e4f62b1fc93831c74bb695b3ca9851afa84f178f0656870f41228a9487" }, "downloads": -1, "filename": "StrangeCase-v4.5.15.tar.gz", "has_sig": false, "md5_digest": "daf86fbb745dc4abc6c907b1db72149c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83577, "upload_time": "2012-06-19T22:52:00", "url": "https://files.pythonhosted.org/packages/f0/8c/9fff8362f3780382c8065235ba55e501643c73010740b7199771fd2e4c75/StrangeCase-v4.5.15.tar.gz" } ], "v4.5.16": [ { "comment_text": "", "digests": { "md5": "0ddc5bdd98bb82fca3cd8bf73b46cb29", "sha256": "fd263b652a37ce99507f12a727af141f97dcd58a58332f6a8383b41e9a99b922" }, "downloads": -1, "filename": "StrangeCase-v4.5.16.tar.gz", "has_sig": false, "md5_digest": "0ddc5bdd98bb82fca3cd8bf73b46cb29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84707, "upload_time": "2012-07-24T00:58:39", "url": "https://files.pythonhosted.org/packages/74/2e/37643e467d5586bff1990886c01d316f74aafb21b661d990e5df01cfac39/StrangeCase-v4.5.16.tar.gz" } ], "v4.5.17": [ { "comment_text": "", "digests": { "md5": "cb6eb447e7fc1d1c3cfb71920ed1e3f7", "sha256": "bc4c0436ad4b31f8373e76046422deedc9ff73e177a21dfcacb2e8c701708243" }, "downloads": -1, "filename": "StrangeCase-v4.5.17.tar.gz", "has_sig": false, "md5_digest": "cb6eb447e7fc1d1c3cfb71920ed1e3f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84731, "upload_time": "2012-08-14T17:09:25", "url": "https://files.pythonhosted.org/packages/34/e4/ebd7975beed5cb5131f45506028a881d9fc3ad21178cf00d1bc073c656db/StrangeCase-v4.5.17.tar.gz" } ], "v4.5.18": [ { "comment_text": "", "digests": { "md5": "58ac8cdfb92505271c266507210d43a6", "sha256": "67d7ccd9264a9f2d120c1734f0bbbc9976da5e64e6f40f261936264db286ab68" }, "downloads": -1, "filename": "StrangeCase-v4.5.18.tar.gz", "has_sig": false, "md5_digest": "58ac8cdfb92505271c266507210d43a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85083, "upload_time": "2012-08-16T16:53:32", "url": "https://files.pythonhosted.org/packages/db/c9/ebf40e01f1e81e12f49ac3cbaa8974099a3be6e312d8b0e4043e9e262f8f/StrangeCase-v4.5.18.tar.gz" } ], "v4.5.19": [ { "comment_text": "", "digests": { "md5": "39ba3c66af806d441fd944fd616d0256", "sha256": "4c5c0ff930458793b7ad7f42965896faa09b38ef303e78ea85ed92762a8fc199" }, "downloads": -1, "filename": "StrangeCase-v4.5.19.tar.gz", "has_sig": false, "md5_digest": "39ba3c66af806d441fd944fd616d0256", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85140, "upload_time": "2012-09-06T14:05:14", "url": "https://files.pythonhosted.org/packages/f3/df/684eec3a6fdd74359bbc7123173e4d91031d039b0687ac61265bf3188016/StrangeCase-v4.5.19.tar.gz" } ], "v4.5.2": [ { "comment_text": "", "digests": { "md5": "b780904d447c8399d96cb0fa08d6fe6b", "sha256": "f2d6847811cdd266f9ed806d5b68540602dad8088f1e08ef375aea6f9d9d10a8" }, "downloads": -1, "filename": "StrangeCase-v4.5.2.tar.gz", "has_sig": false, "md5_digest": "b780904d447c8399d96cb0fa08d6fe6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82058, "upload_time": "2012-05-12T18:56:19", "url": "https://files.pythonhosted.org/packages/f0/56/e8b0e8e9b77bd0c503e1c836f50be7a66ff7f9dca25075953f396d22f0f0/StrangeCase-v4.5.2.tar.gz" } ], "v4.5.20": [ { "comment_text": "", "digests": { "md5": "54b93579917c795e0dd30a63e3b5e21c", "sha256": "3788c438b68c66d8143ee99e1664aa79115251e962c4f509d70bae3d648c8613" }, "downloads": -1, "filename": "StrangeCase-v4.5.20.tar.gz", "has_sig": false, "md5_digest": "54b93579917c795e0dd30a63e3b5e21c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85110, "upload_time": "2012-09-06T17:01:27", "url": "https://files.pythonhosted.org/packages/38/e6/7aaff29c02bc2bca20319bef060e6bfdea472184a28848ae574cf7e6b468/StrangeCase-v4.5.20.tar.gz" } ], "v4.5.21": [ { "comment_text": "", "digests": { "md5": "c82344adef86966c610afd3e2af8702b", "sha256": "df498931b0ff7a718e418e0726c9b509131cc0f8240d90d5adb981a84b0441c4" }, "downloads": -1, "filename": "StrangeCase-v4.5.21.tar.gz", "has_sig": false, "md5_digest": "c82344adef86966c610afd3e2af8702b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85176, "upload_time": "2012-10-01T20:52:28", "url": "https://files.pythonhosted.org/packages/a5/16/499f862febabf90cdf42e6c08b4e89b030b9c02a5b253fd72fa3b1561a8a/StrangeCase-v4.5.21.tar.gz" } ], "v4.5.22": [ { "comment_text": "", "digests": { "md5": "b3858796fa17abf911e479b80f39b4de", "sha256": "3ba3824d3c43b935f7752e4ebedea0e1192a104bde8b745c3ab8e8f975174e47" }, "downloads": -1, "filename": "StrangeCase-v4.5.22.tar.gz", "has_sig": false, "md5_digest": "b3858796fa17abf911e479b80f39b4de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85192, "upload_time": "2012-10-24T22:02:56", "url": "https://files.pythonhosted.org/packages/0c/44/3a6e536ca6a4d8ea8fd8fb28b08a7a4846789a93c2c44102ea027c7c93b7/StrangeCase-v4.5.22.tar.gz" } ], "v4.5.4": [ { "comment_text": "", "digests": { "md5": "edd9e0edcd0de5721032e101ad0e5abe", "sha256": "14fb1a61dac7ae51fd73838f807d4bb5e3e4a996bab759f83db2fdfaf3c16990" }, "downloads": -1, "filename": "StrangeCase-v4.5.4.tar.gz", "has_sig": false, "md5_digest": "edd9e0edcd0de5721032e101ad0e5abe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83158, "upload_time": "2012-05-14T19:08:01", "url": "https://files.pythonhosted.org/packages/38/1e/90ae400c9ad82fc5005733536aaf8565af966e571eef3bf930c542f79462/StrangeCase-v4.5.4.tar.gz" } ], "v4.5.5": [ { "comment_text": "", "digests": { "md5": "f48876d5f909465b131e32447a36c937", "sha256": "01b9275db60861a687ba0ca166b6d66147de8e1bffe9710d827df7fae4b29933" }, "downloads": -1, "filename": "StrangeCase-v4.5.5.tar.gz", "has_sig": false, "md5_digest": "f48876d5f909465b131e32447a36c937", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82887, "upload_time": "2012-05-15T04:48:29", "url": "https://files.pythonhosted.org/packages/82/f7/f7a73c2f9fcea999eb56542fad18bb86779d05e8413347522275f4c10307/StrangeCase-v4.5.5.tar.gz" } ], "v4.5.6": [ { "comment_text": "", "digests": { "md5": "66aeb7f9cdc9946858ead479e19216c1", "sha256": "2d455d41c92f0ebf2ccc68392c66eeadea3758616f32476eeb8b95fae3705f3e" }, "downloads": -1, "filename": "StrangeCase-v4.5.6.tar.gz", "has_sig": false, "md5_digest": "66aeb7f9cdc9946858ead479e19216c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83415, "upload_time": "2012-05-16T06:55:47", "url": "https://files.pythonhosted.org/packages/0b/2a/c45d2691222fe9f0abe27a5fa41872e7b8969d0b4e058cdfef2731399e2b/StrangeCase-v4.5.6.tar.gz" } ], "v4.5.7": [ { "comment_text": "", "digests": { "md5": "9a26b9a1010850679c4144bbaa9d7a5d", "sha256": "ad5f79a2e7eede39e12c226977bc8639b40cbf8a387fbbdf3c4d1a18598d65d5" }, "downloads": -1, "filename": "StrangeCase-v4.5.7.tar.gz", "has_sig": false, "md5_digest": "9a26b9a1010850679c4144bbaa9d7a5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83275, "upload_time": "2012-05-24T02:30:10", "url": "https://files.pythonhosted.org/packages/36/fd/b92c21c03a468fd5859fa19eaf3b98bae392d7bb7b8d123b9d260d052134/StrangeCase-v4.5.7.tar.gz" } ], "v4.5.8": [ { "comment_text": "", "digests": { "md5": "79f97564aff63e197892e89914979442", "sha256": "b6296e1fa67f07a968bd44a0a1410498eaf6c8d67915392a0f2b9ff5a2262f5d" }, "downloads": -1, "filename": "StrangeCase-v4.5.8.tar.gz", "has_sig": false, "md5_digest": "79f97564aff63e197892e89914979442", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83325, "upload_time": "2012-06-05T17:51:14", "url": "https://files.pythonhosted.org/packages/7d/3c/0762cb4f3ab5af70c645a2d91df5c0f391ce40a065e5f56f9ac2fbc794da/StrangeCase-v4.5.8.tar.gz" } ], "v4.5.9": [ { "comment_text": "", "digests": { "md5": "3d8d311165d657cafe01db0b9c5dd375", "sha256": "bfecfe5022109fb15d876efaca797ee2a765c06a797be2ceff607d948490b86d" }, "downloads": -1, "filename": "StrangeCase-v4.5.9.tar.gz", "has_sig": false, "md5_digest": "3d8d311165d657cafe01db0b9c5dd375", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83445, "upload_time": "2012-06-05T18:21:53", "url": "https://files.pythonhosted.org/packages/11/b9/43750573e33209552f4379c05f5c49412b3719a0d72a06859ee59f57d892/StrangeCase-v4.5.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "052c966eec73aae2ea43fcce657ce5a5", "sha256": "81761b08dec519d0a97bb58cf7923c4dd2ce1bbc332341762c97953f2f5a4da2" }, "downloads": -1, "filename": "StrangeCase-4.6.8.tar.gz", "has_sig": false, "md5_digest": "052c966eec73aae2ea43fcce657ce5a5", "packagetype": "sdist", "python_version": "source", "requires_python": ">3.0.0", "size": 85583, "upload_time": "2019-07-24T19:45:07", "url": "https://files.pythonhosted.org/packages/03/97/0f8d27da4fcf805895d9657a885d131245da80eb305b7db226ecf45aa2d9/StrangeCase-4.6.8.tar.gz" } ] }