{
"info": {
"author": "Nokia",
"author_email": "",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 3 - Alpha",
"Environment :: Console",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"Intended Audience :: Telecommunications Industry",
"License :: OSI Approved :: BSD License",
"Operating System :: POSIX",
"Operating System :: Unix",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Software Development",
"Topic :: Software Development :: Build Tools",
"Topic :: Software Development :: Testing",
"Topic :: System :: Networking"
],
"description": "[](https://pypi.org/project/moler/)\n[](https://pypi.org/project/moler/)\n[](https://travis-ci.org/nokia/moler)\n[](https://coveralls.io/github/nokia/moler?branch=master)\n[](https://bettercodehub.com/)\n[](https://www.codacy.com/app/mplichta/moler?utm_source=github.com&utm_medium=referral&utm_content=nokia/moler&utm_campaign=Badge_Grade)\n[](./LICENSE)\n\n# Table of Contents\n1. [Changelog](#changelog)\n2. [Moler info](#moler)\n3. [Moler usage examples](#moler-usage-examples)\n4. [API design reasoning](#api-design-reasoning)\n5. [Designed API](#designed-api)\n\n# Changelog\nView our [chronological list](./CHANGELOG.md) of user-facing changes, large and small, made to the Moler project.\n\n\n# Moler\nMoler ([name origin](https://github.com/nokia/moler/wiki#moler-name-origin)) is Python library\nthat provides \"bricks\" for building automated tests.\nAll these \"bricks\" have clearly defined responsibilities, have similar API,\nfollow same construction pattern (so new ones are easy to create).\n\nHere they are:\n* Commands as self-reliant object\n * to allow for command triggering and parsing encapsulated in single object (lower maintenance cost)\n* Event observers & callbacks (alarms are events example)\n * to allow for online reaction (not offline postprocessing)\n* Run observers/commands in the background\n * to allow for test logic decomposition into multiple commands running in parallel\n * to allow for handling unexpected system behavior (reboots, alarms)\n* State machines -> automatic auto-connecting after dropped connection\n * to increase framework auto-recovery and help in troubleshooting \"what went wrong\"\n* Automatic logging of all connections towards devices used by tests\n * to decrease investigation time by having logs focused on different parts of system under test\n\n# Moler usage examples\nLet's see Moler in action. Here is hypothetical use case: \"find PIDs of all python processes\":\n\n```python\n\n from moler.config import load_config\n from moler.device.device import DeviceFactory\n\n load_config(config='my_devices.yml') # description of available devices\n my_unix = DeviceFactory.get_device(name='MyMachine') # take specific device out of available ones\n ps_cmd = my_unix.get_cmd(cmd_name=\"ps\", # take command of that device\n cmd_params={\"options\": \"-ef\"})\n\n processes_info = ps_cmd() # run the command, it returns result\n for proc_info in processes_info:\n if 'python' in proc_info['CMD']:\n print(\"PID: {info[PID]} CMD: {info[CMD]}\".format(info=proc_info))\n```\n\n* To have command we ask device \"give me such command\".\n* To run command we just call it as function (command object is callable)\n* What command returns is usually dict or list of dicts - easy to process\n\nAbove code displays:\n\n```bash\n\n PID: 1817 CMD: /usr/bin/python /usr/share/system-config-printer/applet.py\n PID: 21825 CMD: /usr/bin/python /home/gl/moler/examples/command/unix_ps.py\n```\n\nHow does it know what `'MyMachine'` means? Code loads definition from `my_devices.yml` configuration file:\n\n```yaml\n\n DEVICES:\n\n MyMachine:\n DEVICE_CLASS: moler.device.unixlocal.UnixLocal\n\n RebexTestMachine:\n DEVICE_CLASS: moler.device.unixremote.UnixRemote\n CONNECTION_HOPS:\n UNIX_LOCAL: # from state\n UNIX_REMOTE: # to state\n execute_command: ssh # via command\n command_params: # with params\n expected_prompt: demo@\n host: test.rebex.net\n login: demo\n password: password\n set_timeout: False # remote doesn't support: export TMOUT\n```\n\nWe have remote machine in our config. Let's check if there is 'readme.txt' file\non that machine (and some info about the file):\n\n```python\n\n remote_unix = DeviceFactory.get_device(name='RebexTestMachine') # it starts in local shell\n remote_unix.goto_state(state=\"UNIX_REMOTE\") # make it go to remote shell\n\n ls_cmd = remote_unix.get_cmd(cmd_name=\"ls\", cmd_params={\"options\": \"-l\"})\n\n remote_files = ls_cmd()\n\n if 'readme.txt' in remote_files['files']:\n print(\"readme.txt file:\")\n readme_file_info = remote_files['files']['readme.txt']\n for attr in readme_file_info:\n print(\" {:<18}: {}\".format(attr, readme_file_info[attr]))\n```\n\nAs you may noticed device is state machine. State transitions are defined inside\nconfiguration file under `CONNECTION_HOPS`. Please note, that it is only config file who\nknows \"I need to use ssh to be on remote\" - client code just says \"go to remote\".\nThanks to that you can exchange \"how to reach remote\" without any change in main code.\n\nAbove code displays:\n\n```bash\n\n readme.txt file:\n permissions : -rw-------\n hard_links_count : 1\n owner : demo\n group : users\n size_raw : 403\n size_bytes : 403\n date : Apr 08 2014\n name : readme.txt\n```\n\nHow about doing multiple things in parallel. Let's ping google\nwhile asking test.rebex.net about readme.txt file:\n\n```python\nmy_unix = DeviceFactory.get_device(name='MyMachine')\nhost = 'www.google.com'\nping_cmd = my_unix.get_cmd(cmd_name=\"ping\", cmd_params={\"destination\": host, \"options\": \"-w 6\"})\n\nremote_unix = DeviceFactory.get_device(name='RebexTestMachine')\nremote_unix.goto_state(state=\"UNIX_REMOTE\")\nls_cmd = remote_unix.get_cmd(cmd_name=\"ls\", cmd_params={\"options\": \"-l\"})\n\nprint(\"Start pinging {} ...\".format(host))\nping_cmd.start() # run command in background\nprint(\"Let's check readme.txt at {} while pinging {} ...\".format(remote_unix.name, host))\n\nremote_files = ls_cmd() # foreground \"run in the meantime\"\nfile_info = remote_files['files']['readme.txt']\nprint(\"readme.txt file: owner={fi[owner]}, size={fi[size_bytes]}\".format(fi=file_info))\n\nping_stats = ping_cmd.await_done(timeout=6) # await background command\nprint(\"ping {}: {}={}, {}={} [{}]\".format(host,'packet_loss',\n ping_stats['packet_loss'],\n 'time_avg',\n ping_stats['time_avg'],\n ping_stats['time_unit']))\n```\n\n```log\nStart pinging www.google.com ...\nLet's check readme.txt at RebexTestMachine while pinging www.google.com ...\nreadme.txt file: owner=demo, size=403\nping www.google.com: packet_loss=0, time_avg=35.251 [ms]\n```\n\nBesides being callable command-object works as \"Future\" (result promise).\nYou can start it in background and later await till it is done to grab result.\n\nIf we enhance our configuration with logging related info:\n\n```yaml\n LOGGER:\n PATH: ./logs\n DATE_FORMAT: \"%H:%M:%S\"\n```\n\nthen above code will automatically create Molers' main log (`moler.log`)\nwhich shows activity on all devices:\n\n```log\n22:30:19.723 INFO moler |More logs in: ./logs\n22:30:19.747 INFO MyMachine |Connection to: 'MyMachine' has been opened.\n22:30:19.748 INFO MyMachine |Changed state from 'NOT_CONNECTED' into 'UNIX_LOCAL'\n22:30:19.866 INFO MyMachine |Event 'moler.events.unix.wait4prompt.Wait4prompt':'[re.compile('^moler_bash#')]' started.\n22:30:19.901 INFO RebexTestMachine |Connection to: 'RebexTestMachine' has been opened.\n22:30:19.901 INFO RebexTestMachine |Changed state from 'NOT_CONNECTED' into 'UNIX_LOCAL'\n22:30:19.919 INFO RebexTestMachine |Event 'moler.events.unix.wait4prompt.Wait4prompt':'[re.compile('demo@')]' started.\n22:30:19.920 INFO RebexTestMachine |Event 'moler.events.unix.wait4prompt.Wait4prompt':'[re.compile('^moler_bash#')]' started.\n22:30:19.921 INFO RebexTestMachine |Command 'moler.cmd.unix.ssh.Ssh':'TERM=xterm-mono ssh -l demo test.rebex.net' started.\n22:30:19.921 INFO RebexTestMachine |TERM=xterm-mono ssh -l demo test.rebex.net\n22:30:20.763 INFO RebexTestMachine |*********\n22:30:20.909 INFO RebexTestMachine |Changed state from 'UNIX_LOCAL' into 'UNIX_REMOTE'\n22:30:20.917 INFO RebexTestMachine |Command 'moler.cmd.unix.ssh.Ssh' finished.\n22:30:20.919 INFO MyMachine |Command 'moler.cmd.unix.ping.Ping':'ping www.google.com -w 6' started.\n22:30:20.920 INFO MyMachine |ping www.google.com -w 6\n22:30:20.920 INFO RebexTestMachine |Command 'moler.cmd.unix.ls.Ls':'ls -l' started.\n22:30:20.922 INFO RebexTestMachine |ls -l\n22:30:20.985 INFO RebexTestMachine |Command 'moler.cmd.unix.ls.Ls' finished.\n22:30:26.968 INFO MyMachine |Command 'moler.cmd.unix.ping.Ping' finished.\n22:30:26.992 INFO RebexTestMachine |Event 'moler.events.unix.wait4prompt.Wait4prompt': '[re.compile('^moler_bash#')]' finished.\n22:30:27.011 INFO RebexTestMachine |Event 'moler.events.unix.wait4prompt.Wait4prompt': '[re.compile('demo@')]' finished.\n22:30:27.032 INFO MyMachine |Event 'moler.events.unix.wait4prompt.Wait4prompt': '[re.compile('^moler_bash#')]' finished.\n\n```\n\nAs you may noticed main log shows code progress from high-level view - data\non connections are not visible, just activity of commands running on devices.\n\nIf you want to see in details what has happened on each device - you have it in device logs.\nMoler creates log per each device\n`moler.RebexTestMachine.log`:\n\n```log\n22:30:19.901 |Changed state from 'NOT_CONNECTED' into 'UNIX_LOCAL'\n22:30:19.902 <|\n22:30:19.919 |Event 'moler.events.unix.wait4prompt.Wait4prompt':'[re.compile('demo@')]' started.\n22:30:19.920 |Event 'moler.events.unix.wait4prompt.Wait4prompt':'[re.compile('^moler_bash#')]' started.\n22:30:19.921 |Command 'moler.cmd.unix.ssh.Ssh':'TERM=xterm-mono ssh -l demo test.rebex.net' started.\n22:30:19.921 >|TERM=xterm-mono ssh -l demo test.rebex.net\n\n22:30:19.924 <|TERM=xterm-mono ssh -l demo test.rebex.net\n\n22:30:20.762 <|Password:\n22:30:20.763 >|*********\n22:30:20.763 <|\n\n22:30:20.908 <|Welcome to Rebex Virtual Shell!\n |For a list of supported commands, type 'help'.\n |demo@ETNA:/$\n22:30:20.909 |Changed state from 'UNIX_LOCAL' into 'UNIX_REMOTE'\n22:30:20.917 |Command 'moler.cmd.unix.ssh.Ssh' finished.\n22:30:20.920 |Command 'moler.cmd.unix.ls.Ls':'ls -l' started.\n22:30:20.922 >|ls -l\n\n22:30:20.974 <|ls -l\n\n22:30:20.978 <|drwx------ 2 demo users 0 Jul 26 2017 .\n\n22:30:20.979 <|drwx------ 2 demo users 0 Jul 26 2017 ..\n |drwx------ 2 demo users 0 Dec 03 2015 aspnet_client\n |drwx------ 2 demo users 0 Oct 27 2015 pub\n |-rw------- 1 demo users 403 Apr 08 2014 readme.txt\n |demo@ETNA:/$\n22:30:20.985 |Command 'moler.cmd.unix.ls.Ls' finished.\n22:30:26.992 |Event 'moler.events.unix.wait4prompt.Wait4prompt': '[re.compile('^moler_bash#')]' finished.\n22:30:27.011 |Event 'moler.events.unix.wait4prompt.Wait4prompt': '[re.compile('demo@')]' finished.\n```\n\nand `moler.MyMachine.log`:\n\n```log\n22:30:19.748 |Changed state from 'NOT_CONNECTED' into 'UNIX_LOCAL'\n22:30:19.748 <|\n22:30:19.866 |Event 'moler.events.unix.wait4prompt.Wait4prompt':'[re.compile('^moler_bash#')]' started.\n22:30:20.919 |Command 'moler.cmd.unix.ping.Ping':'ping www.google.com -w 6' started.\n22:30:20.920 >|ping www.google.com -w 6\n\n22:30:20.921 <|ping www.google.com -w 6\n\n22:30:20.959 <|PING www.google.com (216.58.215.68) 56(84) bytes of data.\n22:30:20.960 <|\n\n22:30:21.000 <|64 bytes from waw02s16-in-f4.1e100.net (216.58.215.68): icmp_seq=1 ttl=51 time=40.1 ms\n22:30:21.001 <|\n\n22:30:21.992 <|64 bytes from waw02s16-in-f4.1e100.net (216.58.215.68): icmp_seq=2 ttl=51 time=31.0 ms\n\n22:30:22.999 <|64 bytes from waw02s16-in-f4.1e100.net (216.58.215.68): icmp_seq=3 ttl=51 time=36.5 ms\n\n22:30:23.996 <|64 bytes from waw02s16-in-f4.1e100.net (216.58.215.68): icmp_seq=4 ttl=51 time=31.4 ms\n\n22:30:24.996 <|64 bytes from waw02s16-in-f4.1e100.net (216.58.215.68): icmp_seq=5 ttl=51 time=29.8 ms\n\n22:30:26.010 <|64 bytes from waw02s16-in-f4.1e100.net (216.58.215.68): icmp_seq=6 ttl=51 time=42.4 ms\n\n22:30:26.960 <|\n |--- www.google.com ping statistics ---\n |6 packets transmitted, 6 received, 0% packet loss, time 5007ms\n |rtt min/avg/max/mdev = 29.888/35.251/42.405/4.786 ms\n |moler_bash#\n22:30:26.968 |Command 'moler.cmd.unix.ping.Ping' finished.\n22:30:27.032 |Event 'moler.events.unix.wait4prompt.Wait4prompt': '[re.compile('^moler_bash#')]' finished.\n```\n\nIf the log files are too large you can split files.\n\nThe log files can be split by size. For example let's assume we want split log files by 5 MB (5242880 bytes) and we want\nto keep maximum 999 files:\n```yaml\n LOGGER:\n PATH: ./logs\n DATE_FORMAT: \"%H:%M:%S\"\n LOG_ROTATION:\n KIND: size\n INTERVAL: 5242880\n BACKUP_COUNT: 999 # Default value\n \n\n```\n\nThe log files can be split by time. For example let's assume we want split log files every 30 minutes (1800 seconds)\n and we want to keep maximum 999 files (default value):\n \n```yaml\n LOGGER:\n PATH: ./logs\n DATE_FORMAT: \"%H:%M:%S\"\n LOG_ROTATION:\n KIND: time\n INTERVAL: 1800\n BACKUP_COUNT: 999 # Default value\n```\n\nFor space saving Moler can compress the logs after rotation. The external tool is used. Let's use the above examples\nto show how to compress logs:\n\n```yaml\n LOGGER:\n PATH: ./logs\n DATE_FORMAT: \"%H:%M:%S\"\n LOG_ROTATION:\n KIND: size\n INTERVAL: 5242880\n BACKUP_COUNT: 999 # Default value\n COMPRESS_AFTER_ROTATION: True # Default is False\n COMPRESS_COMMAND: \"zip -9mq {compressed} {log_input}\" # Default value\n COMPRESSED_FILE_EXTENSION: \".zip\" # Default value\n\n\n```\n\n```yaml\n LOGGER:\n PATH: ./logs\n DATE_FORMAT: \"%H:%M:%S\"\n LOG_ROTATION:\n KIND: time\n INTERVAL: 1800\n BACKUP_COUNT: 999 # Default value\n COMPRESS_COMMAND: \"zip -9mq {compressed} {log_input}\" # Default value \n COMPRESSED_FILE_EXTENSION: \".zip\" # Default value\n```\n\nIn a script we can also disable logging from device. Please use it very carefully. Investigation any issue may be\n impossible if we don't have full logs.\n \n```python\nmy_unix = DeviceFactory.get_device(name='MyMachine')\n\nmy_unix.disbale_logging() # to disable logging on device\n\nmy_unix.enable_logging() # to enable logging on device\n```\n\nIn a script you can add suffix to all log files or only to files for specific devices. with disable logging from device. \n \n```python\nfrom moler.config.loggers import change_logging_suffix\nchange_logging_suffix(\".suffix1\") # all log files with suffix\nchange_logging_suffix(None) # all log files without suffx\n\nmy_unix = DeviceFactory.get_device(name='MyMachine')\n\nmy_unix.set_logging_suffix(\"device_suffix\") # to add suffix to filename with logs\n\nmy_unix.set_suffix(None) # to remove suffix from filename with logs\n```\n\nPrevious examples ask device to create command. We can also create command ourselves\ngiving it connection to operate on:\n\n```python\n\n import time\n from moler.cmd.unix.ping import Ping\n from moler.connection_factory import get_connection\n\n host = 'www.google.com'\n terminal = get_connection(io_type='terminal', variant='threaded') # take connection\n with terminal.open():\n ping_cmd = Ping(connection=terminal.moler_connection,\n destination=host, options=\"-w 6\")\n print(\"Start pinging {} ...\".format(host))\n ping_cmd.start()\n print(\"Doing other stuff while pinging {} ...\".format(host))\n time.sleep(3)\n ping_stats = ping_cmd.await_done(timeout=4)\n print(\"ping {}: {}={}, {}={} [{}]\".format(host,'packet_loss',\n ping_stats['packet_loss'],\n 'time_avg',\n ping_stats['time_avg'],\n ping_stats['time_unit']))\n```\n\nPlease note also that connection is context manager doing open/close actions.\n\n\n```bash\n\n Start pinging www.google.com ...\n Doing other stuff while pinging www.google.com ...\n ping www.google.com: packet_loss=0, time_avg=50.000 [ms]\n```\n\n## Reuse freedom\nLibrary gives you freedom which part you want to reuse. We are fan's of \"take what you need only\".\n* You may use configuration files or configure things by Python calls.\n\n ```python\n load_config(config={'DEVICES': {'MyMachine': {'DEVICE_CLASS': 'moler.device.unixlocal.UnixLocal'}}})\n ```\n* You may use devices or create commands manually\n* You can take connection or build it yourself:\n\n ```python\n from moler.threaded_moler_connection import ThreadedMolerConnection\n from moler.io.raw.terminal import ThreadedTerminal\n\n terminal_connection = ThreadedTerminal(moler_connection=ThreadedMolerConnection())\n ```\n* You can even install your own implementation in place of default implementation per connection type\n\n# API design reasoning\nThe main goal of command is its usage simplicity: just run it and give me back its result.\n\nCommand hides from its caller:\n* a way how it realizes \"runs\"\n* how it gets data of output to be parsed\n* how it parses that data\n\nCommand shows to its caller:\n* API to start/stop it or await for its completion\n* API to query for its result or result readiness\n\nCommand works as [Futures and promises](https://en.wikipedia.org/wiki/Futures_and_promises)\n\nAfter starting, we await for its result which is parsed out command output provided usually as dict.\nRunning that command and parsing its output may take some time, so till that point result computation is yet incomplete.\n\n## Command as future\n* it starts some command on device/shell over connection\n (as future-function starts it's execution)\n* it parses data incoming over such connection\n (as future-function does it's processing)\n* it stores result of that parsing\n (as future-function concludes in calculation result)\n* it provides means to return that result\n (as future-function does via 'return' or 'yield' statement)\n* it's result is not ready \"just-after\" calling command\n (as it is with future in contrast to function)\n\nSo command should have future API.\n\nQuote from **_\"Professional Python\"_** by **Luke Sneeringer**:\n> The Future is a standalone object. It is independent of the actual function that is running.\n> It does nothing but store the state and result information.\n\nCommand differs in that it is both:\n* function-like object performing computation\n* future-like object storing result of that computation.\n\n## Command vs. Connection-observer\nCommand is just \"active version\" of connection observer.\n\nConnection observer is passive since it just observes connection for some data;\ndata that may just asynchronously appear (alarms, reboots or anything you want).\nIntention here is split of responsibility: one observer is looking for alarms,\nanother one for reboots.\n\nCommand is active since it actively triggers some output on connection\nby sending command-string over that connection. So, it activates some action\non device-behind-connection. That action is \"command\" in device terminology.\nLike `ping` on bash console/device. And it produces that \"command\" output.\nThat output is what Moler's Command as connection-observer is looking for.\n\n## Most well known Python's futures\n* [concurrent.futures.Future](https://docs.python.org/3/library/concurrent.futures.html)\n* [asyncio.Future](https://docs.python.org/3/library/asyncio-task.html#future)\n\n| API | concurrent.futures.Future | asyncio.Future |\n| :---------------------- | :------------------------------------------ | :-------------------------------------------------- |\n| storing result | :white_check_mark: `set_result()` | :white_check_mark: `set_result()` |\n| result retrieval | :white_check_mark: `result()` | :white_check_mark: `result()` |\n| storing failure cause | :white_check_mark: `set_exception()` | :white_check_mark: `set_exception()` |\n| failure cause retrieval | :white_check_mark: `exception()` | :white_check_mark: `exception()` |\n| stopping | :white_check_mark: `cancel()` | :white_check_mark: `cancel()` |\n| check if stopped | :white_check_mark: `cancelled()` | :white_check_mark: `cancelled()` |\n| check if running | :white_check_mark: `running()` | :no_entry_sign: `(but AbstractEventLoop.running())` |\n| check if completed | :white_check_mark: `done()` | :white_check_mark: `done()` |\n| subscribe completion | :white_check_mark: `add_done_callback()` | :white_check_mark: `add_done_callback()` |\n| unsubscribe completion | :no_entry_sign: | :white_check_mark: `remove_done_callback()` |\n\nStarting callable to be run \"as future\" is done by entities external to future-object\n\n| API | concurrent.futures
start via Executor objects (thread/proc) | asyncio
start via module-lvl functions or ev-loop |\n| ---------------- | ---------------------------------------- | ---------------------------------------------- |\n| start callable | submit(fn, *args, **kwargs)
Schedules callable to be executed as
fn(*args **kwargs) -> Future | ensure_future(coro_or_future) -> Task
future = run_coroutine_threadsafe(coro, loop) |\n| start same callable
on data iterator | map(fn, *iterables, timeout) -> iterator | join_future = asyncio.gather(*map(f, iterable))
loop.run_until_complete(join_future)|\n\nAwaiting completion of future is done by entities external to future-object\n\n| API | concurrent.futures
awaiting by module level functions | asyncio
awaiting by module-lvl functions or ev-loop |\n| ----------------- | ------------------------------------------ | -------------------------------------------- |\n| await completion | done, not_done = wait(futures, timeout) -> futures | done, not_done = await wait(futures)
results = await gather(futures)
result = await future
result = yield from future
result = await coroutine
result = yield from coroutine
result = yield from wait_for(future, timeout)
loop.run_until_complete(future) -> blocking run |\n| process as they
complete | for done in as_completed(futures, timeout) -> futures | for done in as_completed(futures, timeout) -> futures |\n\n## Fundamental difference of command\nContrary to **concurrent.futures** and **asyncio** we don't want command to be run by some external entity.\nWe want it to be self-executable for usage simplicity.\nWe want to take command and just say to it:\n* **\"run\"** or **\"run in background\"**\n* and not **\"Hi, external runner, would you run/run-background that command for me\"**\n\n# Designed API\n1. create command object\n``` python\ncommand = Command()\n```\n\n2. run it synchronously/blocking and get result in one shot behaves like function call since Command is callable.\n\nRun-as-callable gives big advantage since it fits well in python ecosystem.\n``` python\nresult = command()\n```\nfunction example:\n``` python\nmap(ping_cmd, all_machines_to_validate_reachability)\n```\n\n3. run it asynchronously/nonblocking\n``` python\ncommand_as_future = command.start()\n```\n\n4. shift from background to foreground\n\n**asyncio:** variant looks like:\n``` python\nresult = await future\ndone_futures, pending = yield from asyncio.wait(futures)\nresult = yield from asyncio.wait_for(future, 60.0)\n```\nand **concurrent.futures** variant looks like:\n``` python\ndone_futures, pending = wait(futures)\n```\nMoler's API maps to above well-known API\n``` python\nresult = command.await_done(timeout)\n```\n* it is \"internal\" to command \"Hi command, that is what I want from you\" (above APIs say \"Hi you there, that is what I want you to do with command\")\n* it directly (Zen of Python) shows what we are awaiting for\n* timeout is required parameter (not as in concurrent.futures) since we don't expect endless execution of command (user must know what is worst case timeout to await command completion)\n\n# Video introduction\nYou can [watch videos how to use Moler on YouTube](https://www.youtube.com/channel/UCgToo2qq8kLMyEgzd4btM9g). \n\n\n",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/nokia/moler",
"keywords": "testing development",
"license": "BSD 3-Clause",
"maintainer": "",
"maintainer_email": "",
"name": "moler",
"package_url": "https://pypi.org/project/moler/",
"platform": null,
"project_url": "https://pypi.org/project/moler/",
"project_urls": {
"Bug Reports": "https://github.com/nokia/moler/issues",
"Homepage": "https://github.com/nokia/moler",
"Source": "https://github.com/nokia/moler"
},
"release_url": "https://pypi.org/project/moler/2.2.1/",
"requires_dist": [
"pyyaml (>=5.1)",
"six",
"transitions",
"psutil",
"python-dateutil",
"pyserial",
"cryptography",
"paramiko",
"ptyprocess ; platform_system != \"Windows\"",
"apscheduler (==3.8.1) ; python_version < \"3\"",
"trollius ; python_version < \"3\"",
"deepdiff (==3.3.0) ; python_version < \"3\"",
"futures (>=3.0.0) ; python_version == \"2.7\"",
"apscheduler ; python_version > \"3\"",
"deepdiff (==5.7.0) ; python_version > \"3\" and python_version < \"3.7\"",
"deepdiff ; python_version >= \"3.7\""
],
"requires_python": "",
"summary": "Moler is library to help in building automated tests",
"version": "2.2.1",
"yanked": false,
"yanked_reason": null
},
"last_serial": 13719137,
"releases": {
"0.10.0": [
{
"comment_text": "",
"digests": {
"md5": "46638d80f92cc93175559964d59a8e5c",
"sha256": "dba9da9add06b9b34f6b1bab3c2a407f315aed900d279aa256da90fbfadfee86"
},
"downloads": -1,
"filename": "moler-0.10.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "46638d80f92cc93175559964d59a8e5c",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 304810,
"upload_time": "2019-06-18T11:00:35",
"upload_time_iso_8601": "2019-06-18T11:00:35.458307Z",
"url": "https://files.pythonhosted.org/packages/3a/c2/acb9bf7886c9ff51766111558147a828e0b8b423008e3419896584bce0de/moler-0.10.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2e2773d2884e0cb30a8fd5bd48c4c8f1",
"sha256": "8b4205bffb1bff87f4c6b2f59ce08b80f54bdbc776487783a3fb3ab9b85c96f4"
},
"downloads": -1,
"filename": "moler-0.10.0.tar.gz",
"has_sig": false,
"md5_digest": "2e2773d2884e0cb30a8fd5bd48c4c8f1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 229660,
"upload_time": "2019-06-18T11:00:38",
"upload_time_iso_8601": "2019-06-18T11:00:38.350068Z",
"url": "https://files.pythonhosted.org/packages/ac/9a/598fd61776b5b0bf024a519fd40eb32289cd04ea063ab8869e6914212874/moler-0.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.11.0": [
{
"comment_text": "",
"digests": {
"md5": "e3689595b859034d7b1c2fc1863f5936",
"sha256": "930ddbb59638be2fb42dae652da78d58275ce069396847852e2443954e40d8e8"
},
"downloads": -1,
"filename": "moler-0.11.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "e3689595b859034d7b1c2fc1863f5936",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 315589,
"upload_time": "2019-08-07T09:23:14",
"upload_time_iso_8601": "2019-08-07T09:23:14.485817Z",
"url": "https://files.pythonhosted.org/packages/11/55/296bdc106b50397034b2ff202ce5cdeca74964892f966e592dca318e545a/moler-0.11.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "4420e1c9f97e4032aa36ebf3beea02eb",
"sha256": "46f0775f915f46ff10ecb1b3078be0355befd5261ca3d14610c6c8f12246bf37"
},
"downloads": -1,
"filename": "moler-0.11.0.tar.gz",
"has_sig": false,
"md5_digest": "4420e1c9f97e4032aa36ebf3beea02eb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 239183,
"upload_time": "2019-08-07T09:23:17",
"upload_time_iso_8601": "2019-08-07T09:23:17.155503Z",
"url": "https://files.pythonhosted.org/packages/df/b5/6c3a910bdb49f8c0d7028ae4efc26a0679f2192e3fc091c781ba3a8d5e0c/moler-0.11.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.12.0": [
{
"comment_text": "",
"digests": {
"md5": "4fe390bdd3d222ce21578e60e087cca6",
"sha256": "a83a422dffb12fbfd18ffeef620412dc0e26e1b955650d0fa3c867c4f72ca795"
},
"downloads": -1,
"filename": "moler-0.12.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "4fe390bdd3d222ce21578e60e087cca6",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 319144,
"upload_time": "2019-08-22T07:54:40",
"upload_time_iso_8601": "2019-08-22T07:54:40.750734Z",
"url": "https://files.pythonhosted.org/packages/1a/97/640a404e9a43357566d14fe5fe33c68895a1b86d66134a057be3abec94a9/moler-0.12.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a3ed4099155aabc048a08a51b2e38cbf",
"sha256": "af9c4be789799e0f1dd16a4f73b36920ed467de06057bfb7bf45575dc1eabb6e"
},
"downloads": -1,
"filename": "moler-0.12.0.tar.gz",
"has_sig": false,
"md5_digest": "a3ed4099155aabc048a08a51b2e38cbf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 242348,
"upload_time": "2019-08-22T07:54:43",
"upload_time_iso_8601": "2019-08-22T07:54:43.365080Z",
"url": "https://files.pythonhosted.org/packages/1d/b4/3238751b2b505b1b48c66508a440192b4ed0525b552109bebac5dc5042fc/moler-0.12.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.13.0": [
{
"comment_text": "",
"digests": {
"md5": "98ebf1726a51a9412bd4e78dc7bfb711",
"sha256": "81b33a65f9dab1b9e9e42f7e6e99d0605f1a3aecf92c281846ca08fd363eb683"
},
"downloads": -1,
"filename": "moler-0.13.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "98ebf1726a51a9412bd4e78dc7bfb711",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 322405,
"upload_time": "2019-09-18T07:46:31",
"upload_time_iso_8601": "2019-09-18T07:46:31.335246Z",
"url": "https://files.pythonhosted.org/packages/4d/12/3e65bccced2838f9b43f7bb50e160b38918468fa7cfd88dace5b7b2c8806/moler-0.13.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "ed7705f930aa8401bf381573eed06bb6",
"sha256": "ad52ca53e1e8834ed9cf47fb6ee9bd3cfbc3e55a138a7820a527da0c569c592e"
},
"downloads": -1,
"filename": "moler-0.13.0.tar.gz",
"has_sig": false,
"md5_digest": "ed7705f930aa8401bf381573eed06bb6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 244252,
"upload_time": "2019-09-18T07:46:36",
"upload_time_iso_8601": "2019-09-18T07:46:36.840773Z",
"url": "https://files.pythonhosted.org/packages/38/0e/2a2a866b3392f35723ab28c466492c284b6b67cbc2a6dae8f8515fd62dd6/moler-0.13.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.14.0": [
{
"comment_text": "",
"digests": {
"md5": "10fe61c6e937a7cbca08a20fc3454397",
"sha256": "b7874d9548d513b32f5c4f3fdc8d44239813ba791355e14ec9e95887413a06d9"
},
"downloads": -1,
"filename": "moler-0.14.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "10fe61c6e937a7cbca08a20fc3454397",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 324113,
"upload_time": "2019-10-02T08:35:31",
"upload_time_iso_8601": "2019-10-02T08:35:31.544604Z",
"url": "https://files.pythonhosted.org/packages/ca/9b/e0bfa5c8cb9a45ebb5090e3345f51fce965fde22cbbea0a98920644d8146/moler-0.14.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "bb9bd10af4388ca61edc8e31d8a333e4",
"sha256": "9dbd3b4ed4abc2c6298c293ec3d7e77001528ec8b765759ba0b82ceffe2f47d6"
},
"downloads": -1,
"filename": "moler-0.14.0.tar.gz",
"has_sig": false,
"md5_digest": "bb9bd10af4388ca61edc8e31d8a333e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 245330,
"upload_time": "2019-10-02T08:35:34",
"upload_time_iso_8601": "2019-10-02T08:35:34.460575Z",
"url": "https://files.pythonhosted.org/packages/11/4b/fef5d847424625b31a3f4ee8cadc0d0901ba101bdcec5652cd288041f47c/moler-0.14.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.15.0": [
{
"comment_text": "",
"digests": {
"md5": "18b78d1240d2fa1a75044c47d2c9dbaf",
"sha256": "e8db72e8436b993ad7310ba54f33b103d8a6b5495ddac672146c5d4cde514c2a"
},
"downloads": -1,
"filename": "moler-0.15.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "18b78d1240d2fa1a75044c47d2c9dbaf",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 325315,
"upload_time": "2019-10-16T09:05:33",
"upload_time_iso_8601": "2019-10-16T09:05:33.154777Z",
"url": "https://files.pythonhosted.org/packages/40/a3/7856745ee1242d10ed9019096ea626f2b23e4a6cc039b2eb0f229046618b/moler-0.15.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "601369edc96c2154cd71b1e05abfdf6d",
"sha256": "7d52d6dc862cb0314a240da2afb16a2ebc97b692d5a9f7bede50af0c6a6d11c8"
},
"downloads": -1,
"filename": "moler-0.15.0.tar.gz",
"has_sig": false,
"md5_digest": "601369edc96c2154cd71b1e05abfdf6d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 245674,
"upload_time": "2019-10-16T09:05:39",
"upload_time_iso_8601": "2019-10-16T09:05:39.591776Z",
"url": "https://files.pythonhosted.org/packages/3c/2c/b47f86d84eef3c4c44dc54827022b3a4ce2f610001859ef0c58b9b6c6fdd/moler-0.15.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.15.1": [
{
"comment_text": "",
"digests": {
"md5": "02c439d119a03bac44442d6dfcc6ea53",
"sha256": "106c835d445dfdc1b3d5d460541fc317d36d9d9b6a5c89ce35a7257692c313d1"
},
"downloads": -1,
"filename": "moler-0.15.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "02c439d119a03bac44442d6dfcc6ea53",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 325812,
"upload_time": "2019-10-21T06:58:19",
"upload_time_iso_8601": "2019-10-21T06:58:19.533841Z",
"url": "https://files.pythonhosted.org/packages/c6/fe/2e34f1e45a25ac4f20a81b64c748137eef7717474d4ed4f3191270c03c98/moler-0.15.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "d222e41591292ae09f0820f07a964702",
"sha256": "4ee4e29363f14539a81c03a37919499e901b8f3efa035f1f21f09256231501ff"
},
"downloads": -1,
"filename": "moler-0.15.1.tar.gz",
"has_sig": false,
"md5_digest": "d222e41591292ae09f0820f07a964702",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 246162,
"upload_time": "2019-10-21T06:58:23",
"upload_time_iso_8601": "2019-10-21T06:58:23.339461Z",
"url": "https://files.pythonhosted.org/packages/03/d1/d9e83b4f93398d37eabc76905b31e935d908e8ec2f0e5e138eee28e2223e/moler-0.15.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.5.0": [
{
"comment_text": "",
"digests": {
"md5": "37d8efc2ead00751ef7eaf2000fcdecc",
"sha256": "33647d2e32da63d7f98b8646ede19e4eb2e44d28450f888c8cfec6db7764d6f3"
},
"downloads": -1,
"filename": "moler-0.5.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "37d8efc2ead00751ef7eaf2000fcdecc",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 186319,
"upload_time": "2018-10-15T14:46:47",
"upload_time_iso_8601": "2018-10-15T14:46:47.486051Z",
"url": "https://files.pythonhosted.org/packages/95/e3/57da21a9a730f2657dcf647a6834921d3d470830bd8c376c08868f4bd20d/moler-0.5.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "bbdef16088679366ba82802ccab56a88",
"sha256": "c87d558014a23c94b6e3c37f5175b91b21bff16a880bb7d309270f42902187db"
},
"downloads": -1,
"filename": "moler-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "bbdef16088679366ba82802ccab56a88",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 146821,
"upload_time": "2018-10-15T14:46:49",
"upload_time_iso_8601": "2018-10-15T14:46:49.919361Z",
"url": "https://files.pythonhosted.org/packages/d4/30/90461edb4e1664563b46557b245ac7de3f1183db5d19ce4476f175a2c892/moler-0.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.5.1": [
{
"comment_text": "",
"digests": {
"md5": "9d19bbe38a25e90b2e29411e47dcef81",
"sha256": "463ad79a6e04a91fac6502f2ec81927963d6764bedb1dbada427f1513d1f287f"
},
"downloads": -1,
"filename": "moler-0.5.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9d19bbe38a25e90b2e29411e47dcef81",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 186508,
"upload_time": "2018-10-16T11:42:13",
"upload_time_iso_8601": "2018-10-16T11:42:13.240843Z",
"url": "https://files.pythonhosted.org/packages/b4/6c/2aba2c5f803c89bf59892346604358577db432dd7da5f3b99d1ef709025e/moler-0.5.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "de349577d951e0f3e175415e1a0d1346",
"sha256": "06382bbcbbd2105ad9a0dc46450d9eebd90756f08c870b289a04c189123a7bc6"
},
"downloads": -1,
"filename": "moler-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "de349577d951e0f3e175415e1a0d1346",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 146894,
"upload_time": "2018-10-16T11:42:15",
"upload_time_iso_8601": "2018-10-16T11:42:15.575870Z",
"url": "https://files.pythonhosted.org/packages/ae/7b/4b3e4ab696542cb53f9c3023eac48b514cb2e4694c90575ff88776fb1ae4/moler-0.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.5.2": [
{
"comment_text": "",
"digests": {
"md5": "bd3ae59190007c2280b3057685f82aca",
"sha256": "60807ed966857feb78b473b13f42350dd519466ca3700c7c8eab5520c917b4a5"
},
"downloads": -1,
"filename": "moler-0.5.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "bd3ae59190007c2280b3057685f82aca",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 186582,
"upload_time": "2018-10-22T14:32:13",
"upload_time_iso_8601": "2018-10-22T14:32:13.192435Z",
"url": "https://files.pythonhosted.org/packages/1e/36/44b9c8d94774d53e650cac02c8ba3fecca474b1bf5efc72a3bb28c726399/moler-0.5.2-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "f0f9ef40c0c91c42ceb19f1211a835ab",
"sha256": "4a60e5ec5b54e08affd420d73cda1961d779584deb339974369faf75251b15bf"
},
"downloads": -1,
"filename": "moler-0.5.2.tar.gz",
"has_sig": false,
"md5_digest": "f0f9ef40c0c91c42ceb19f1211a835ab",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 147080,
"upload_time": "2018-10-22T14:32:15",
"upload_time_iso_8601": "2018-10-22T14:32:15.326729Z",
"url": "https://files.pythonhosted.org/packages/e7/ba/ed54a73216e9e78280b78ab153d460e75b646e13fb112a0c1b0bc378ff84/moler-0.5.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.5.3": [
{
"comment_text": "",
"digests": {
"md5": "502e43aaa2fc553806fe8c55d735f0a3",
"sha256": "d5671736d6a90673b97b1c8c26a3bc670a1f0d4a80f2d8c21c22932ebcf5a1f6"
},
"downloads": -1,
"filename": "moler-0.5.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "502e43aaa2fc553806fe8c55d735f0a3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 221056,
"upload_time": "2019-01-24T11:41:56",
"upload_time_iso_8601": "2019-01-24T11:41:56.189983Z",
"url": "https://files.pythonhosted.org/packages/02/77/831098addd53d3f31b21e01724ba37a6d4013774c0f09d64d8f8aa1ba596/moler-0.5.3-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "5354d5126043693a8513c2a6d501e377",
"sha256": "0d5a347f4a987166dac55c741ab5e076d83af7544a008795a4c6b9d5095dd3ef"
},
"downloads": -1,
"filename": "moler-0.5.3.tar.gz",
"has_sig": false,
"md5_digest": "5354d5126043693a8513c2a6d501e377",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 176018,
"upload_time": "2019-01-24T11:41:58",
"upload_time_iso_8601": "2019-01-24T11:41:58.485994Z",
"url": "https://files.pythonhosted.org/packages/2a/ac/eb404d5b34ed30f3b4f918b1cb1786020c6ebcd867a222570667c85d6fe9/moler-0.5.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.6.0": [
{
"comment_text": "",
"digests": {
"md5": "476bf153ef7aa3199b445a8596b5399e",
"sha256": "ca5355c9291dfdb020df54dac7cc91724162cb421113c0c98ea2b1fdf4f0fca8"
},
"downloads": -1,
"filename": "moler-0.6.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "476bf153ef7aa3199b445a8596b5399e",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 234528,
"upload_time": "2019-02-21T09:09:59",
"upload_time_iso_8601": "2019-02-21T09:09:59.724560Z",
"url": "https://files.pythonhosted.org/packages/07/4f/74b0effefc25047ea456f8083777254e22173cfaa47a08cc059069f893b5/moler-0.6.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "c41a629ab05fb5e17a237157dd8672b7",
"sha256": "ea2c8a417ca0983a65861527fe080233f182f1b7aabed8624ead585aafe5a746"
},
"downloads": -1,
"filename": "moler-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "c41a629ab05fb5e17a237157dd8672b7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 184324,
"upload_time": "2019-02-21T09:10:02",
"upload_time_iso_8601": "2019-02-21T09:10:02.215306Z",
"url": "https://files.pythonhosted.org/packages/fa/2c/af706429ccd3e7c23f182c725481c0ff2bfa2c2770567ce6cb580817107b/moler-0.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.9.0": [
{
"comment_text": "",
"digests": {
"md5": "9a1c1b53afc060ab36598152f7f829c2",
"sha256": "59807f9cb81937113b4c91e230e8d57acd69db6a3af2eba453b42734f4ae8902"
},
"downloads": -1,
"filename": "moler-0.9.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9a1c1b53afc060ab36598152f7f829c2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 270945,
"upload_time": "2019-03-19T14:12:39",
"upload_time_iso_8601": "2019-03-19T14:12:39.988034Z",
"url": "https://files.pythonhosted.org/packages/25/28/cb14cc3a0d7244bb274226d92ff9cfabb584b5bcce39e52bf71287f1c74a/moler-0.9.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2875b5946a42e4db3f02b22224c73fbd",
"sha256": "f3b2c787b798c689eb3b34cb6e685b047bb1db2f8044bdf271c2aefa0ba95f9f"
},
"downloads": -1,
"filename": "moler-0.9.0.tar.gz",
"has_sig": false,
"md5_digest": "2875b5946a42e4db3f02b22224c73fbd",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 212266,
"upload_time": "2019-03-19T14:12:42",
"upload_time_iso_8601": "2019-03-19T14:12:42.970107Z",
"url": "https://files.pythonhosted.org/packages/33/7b/2246e8e3091e0e0afe5ae799e51e3792f4e64725498c3eda6e8669a75792/moler-0.9.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.9.1": [
{
"comment_text": "",
"digests": {
"md5": "dd476b03a59313faa8b69e0b5b6b3d8e",
"sha256": "e5e8eb82b553adf859e22f2e8949180e185e8bc53a625fc143b2bd4c6d87da13"
},
"downloads": -1,
"filename": "moler-0.9.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "dd476b03a59313faa8b69e0b5b6b3d8e",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 271623,
"upload_time": "2019-03-20T12:51:03",
"upload_time_iso_8601": "2019-03-20T12:51:03.644801Z",
"url": "https://files.pythonhosted.org/packages/ad/f9/9f85cb9934b573604230ada8c93d87ea7995de1f8a2c87e337da1ff8a515/moler-0.9.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "89eaa89bdc2ed6ab17ce3ba700946f6f",
"sha256": "200213d2e266175484db62b036d9b85c66cf89668628ff139c530f395ab05dbf"
},
"downloads": -1,
"filename": "moler-0.9.1.tar.gz",
"has_sig": false,
"md5_digest": "89eaa89bdc2ed6ab17ce3ba700946f6f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 212465,
"upload_time": "2019-03-20T12:51:05",
"upload_time_iso_8601": "2019-03-20T12:51:05.925071Z",
"url": "https://files.pythonhosted.org/packages/67/6a/13b9e678f97b8e03098610339dc368dd25f1f5199d12647e310af2f2b2c3/moler-0.9.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.9.2": [
{
"comment_text": "",
"digests": {
"md5": "02c17c67e5c9889dd5e8e25541c506e1",
"sha256": "76b6bba3b1575b08154290ccf0e16631baac9935352e3206f356c6fa6e785439"
},
"downloads": -1,
"filename": "moler-0.9.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "02c17c67e5c9889dd5e8e25541c506e1",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 271644,
"upload_time": "2019-03-20T14:18:46",
"upload_time_iso_8601": "2019-03-20T14:18:46.521284Z",
"url": "https://files.pythonhosted.org/packages/7c/a7/fc71a4e659a9064a9d6699100377afca6a57597a813c29ec963dc49fc52b/moler-0.9.2-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "7162f1db29091d376ebea529b928de39",
"sha256": "7cf4fe45f02ce33a4b88787cf06a4d709893e4c630259d49429d5770e71f9581"
},
"downloads": -1,
"filename": "moler-0.9.2.tar.gz",
"has_sig": false,
"md5_digest": "7162f1db29091d376ebea529b928de39",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 212502,
"upload_time": "2019-03-20T14:18:48",
"upload_time_iso_8601": "2019-03-20T14:18:48.947435Z",
"url": "https://files.pythonhosted.org/packages/9c/d1/4c88b8e7d2e8731045659941e74d1b933be3ba76bded076bb522b9e95def/moler-0.9.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"0.9.3": [
{
"comment_text": "",
"digests": {
"md5": "867ded16ce96d8cb1e72df27ed089e5d",
"sha256": "96fd1bc37b9d2ae7f1ef37e3a6160fdbb8b3f75ede25410b2aa0ad13682e1c0e"
},
"downloads": -1,
"filename": "moler-0.9.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "867ded16ce96d8cb1e72df27ed089e5d",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 287071,
"upload_time": "2019-04-18T08:17:19",
"upload_time_iso_8601": "2019-04-18T08:17:19.730825Z",
"url": "https://files.pythonhosted.org/packages/04/4c/b4331b94da2a28cf58bf646b8d0ae2beb5a87333b9ef1ce649a05e876b0f/moler-0.9.3-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "f9263775b591663209a55322307b7346",
"sha256": "dd052a110cda8d7e1c957aafb2c41a722502e20aed5bdc8d538b7c98158b2483"
},
"downloads": -1,
"filename": "moler-0.9.3.tar.gz",
"has_sig": false,
"md5_digest": "f9263775b591663209a55322307b7346",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 221182,
"upload_time": "2019-04-18T08:17:22",
"upload_time_iso_8601": "2019-04-18T08:17:22.070973Z",
"url": "https://files.pythonhosted.org/packages/4e/8a/9cecc8b7f8edf94a290f4dff2cd7dd07973e90d0296b7fc692bcc47b481b/moler-0.9.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "28945888bab965bd1cc179f7838940e3",
"sha256": "8e9f7fca350b9734edf140a7f9d62919393c749fa70021c4fb1f98a4b90dace5"
},
"downloads": -1,
"filename": "moler-1.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "28945888bab965bd1cc179f7838940e3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 334292,
"upload_time": "2019-10-31T08:03:06",
"upload_time_iso_8601": "2019-10-31T08:03:06.798321Z",
"url": "https://files.pythonhosted.org/packages/02/1f/f99273eaddbdb933f293f5b0ab1c81a4c926c1b22b1183aa4280193a6ceb/moler-1.0.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "ceccb1f52489f613aa44f99f74d87cf5",
"sha256": "689c03052542083eaa09a1981fbc0e0f81e164f3f2db04c62e6209f888ad868f"
},
"downloads": -1,
"filename": "moler-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "ceccb1f52489f613aa44f99f74d87cf5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 248150,
"upload_time": "2019-10-31T08:03:10",
"upload_time_iso_8601": "2019-10-31T08:03:10.238466Z",
"url": "https://files.pythonhosted.org/packages/cf/0d/8f0bc27cb9889b92cee7af1342363472af63c2c9d549fb2673c9b18eb6f8/moler-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "21aeee39ed38dc1338bf6878689732a9",
"sha256": "33ff220998e3004dff10d05833f89d79708327c15f298dd7d103a5bc0141b849"
},
"downloads": -1,
"filename": "moler-1.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "21aeee39ed38dc1338bf6878689732a9",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 334281,
"upload_time": "2019-11-05T08:38:51",
"upload_time_iso_8601": "2019-11-05T08:38:51.614391Z",
"url": "https://files.pythonhosted.org/packages/84/97/843657c1794a19c4c77627424e4a5e542e20623ea7397a8e44a1e5a113cc/moler-1.0.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "bec8fcce33d196d5000438b27ea44618",
"sha256": "5431eed1ace724d944e8f4830d9aa0fa6fa7d3443fa972951b30c4a587077214"
},
"downloads": -1,
"filename": "moler-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "bec8fcce33d196d5000438b27ea44618",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 247892,
"upload_time": "2019-11-05T08:38:54",
"upload_time_iso_8601": "2019-11-05T08:38:54.978708Z",
"url": "https://files.pythonhosted.org/packages/ac/53/3f1d6bcfa03d0730187584d6017414973b2869209c243a0c10d08b8379db/moler-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.1.0": [
{
"comment_text": "",
"digests": {
"md5": "94a60ee85e7ae168223d1ffa78e5d0fb",
"sha256": "f895f9698d005d5b9c75aaa94a327043ec825def3a99c1c3f12b2e761798b7d2"
},
"downloads": -1,
"filename": "moler-1.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "94a60ee85e7ae168223d1ffa78e5d0fb",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 336388,
"upload_time": "2019-11-13T09:46:02",
"upload_time_iso_8601": "2019-11-13T09:46:02.730963Z",
"url": "https://files.pythonhosted.org/packages/31/8f/2a7a31ffd2e8f61c959aba2eea1cefae742583bf9d8e0837830c796ea989/moler-1.1.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "1ee17d682f187718525a635a884a2d68",
"sha256": "7ae1098f959ce480c2f1f02395f006e2331a2230a93f9c0a26c321e4a75c468b"
},
"downloads": -1,
"filename": "moler-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "1ee17d682f187718525a635a884a2d68",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 249038,
"upload_time": "2019-11-13T09:46:05",
"upload_time_iso_8601": "2019-11-13T09:46:05.810785Z",
"url": "https://files.pythonhosted.org/packages/97/2c/393f60170f8fe16395217483fe89c13472962300ec7be9245ed9ccb5eaf3/moler-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.10.0": [
{
"comment_text": "",
"digests": {
"md5": "7596f30ecf0ef45f7a5c4f84e82bb0b2",
"sha256": "d2476b9a6a78f054a36c89f5c28bef07537673540b13549abe88be978123ad5c"
},
"downloads": -1,
"filename": "moler-1.10.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "7596f30ecf0ef45f7a5c4f84e82bb0b2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 394380,
"upload_time": "2020-04-07T08:15:12",
"upload_time_iso_8601": "2020-04-07T08:15:12.561183Z",
"url": "https://files.pythonhosted.org/packages/13/25/039622c1961150bc14a9e1db06775ac5cdc81685f4f49e02eb02b9f53fbc/moler-1.10.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "d6c568179c60fb87c2ad3c361ed1fcb8",
"sha256": "6cc236d1594c61104398796226645d0684497decaa92b672c9c561328b9a6e47"
},
"downloads": -1,
"filename": "moler-1.10.0.tar.gz",
"has_sig": false,
"md5_digest": "d6c568179c60fb87c2ad3c361ed1fcb8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 290227,
"upload_time": "2020-04-07T08:15:15",
"upload_time_iso_8601": "2020-04-07T08:15:15.822449Z",
"url": "https://files.pythonhosted.org/packages/d3/a7/8947d6b8cfb61519b211f2f5bc484f1a7dff93aa7d10a5ea5505d78fc833/moler-1.10.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.11.0": [
{
"comment_text": "",
"digests": {
"md5": "724e55608f57358fa5e41e450e6058c3",
"sha256": "2aba4a6dfcd0da68b681d6f8d753eddd0b0674eda2b45c91c5dd9d869adf2399"
},
"downloads": -1,
"filename": "moler-1.11.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "724e55608f57358fa5e41e450e6058c3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 398828,
"upload_time": "2020-04-21T11:33:42",
"upload_time_iso_8601": "2020-04-21T11:33:42.199155Z",
"url": "https://files.pythonhosted.org/packages/df/d2/ed0f1a61e44d88d49800c3eff39948d4af7efcf7c0d6b08aee48adfb7ce1/moler-1.11.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "1510bfbb1896a39f1ba1367b01f453ed",
"sha256": "7c6cd56cf7e74d1efa9f16bd7cbe6f84dca440c294074952e76914a870f0bdd0"
},
"downloads": -1,
"filename": "moler-1.11.0.tar.gz",
"has_sig": false,
"md5_digest": "1510bfbb1896a39f1ba1367b01f453ed",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 294107,
"upload_time": "2020-04-21T11:33:44",
"upload_time_iso_8601": "2020-04-21T11:33:44.867329Z",
"url": "https://files.pythonhosted.org/packages/f6/1c/62bfd41fc061e7a3b7ac076c2042eddff81c612a5d54c580c1ec16c8838d/moler-1.11.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.12.0": [
{
"comment_text": "",
"digests": {
"md5": "88adee367c9083fb2d154e24842d7bce",
"sha256": "5616e1ad1e80f5804ede167195bdc6f06fad1a4abe599fcb6d53a89e287631e5"
},
"downloads": -1,
"filename": "moler-1.12.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "88adee367c9083fb2d154e24842d7bce",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 399165,
"upload_time": "2020-04-22T10:18:42",
"upload_time_iso_8601": "2020-04-22T10:18:42.989907Z",
"url": "https://files.pythonhosted.org/packages/3f/3c/cbf3b8c36ba8e17041ed56d8db5759d18cafb775e69ea2822a6db4e20123/moler-1.12.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "aa9237d99e4480ec6bfe2680f4ff23a9",
"sha256": "177a40d63d14709d3e86ebec85e58930cbc504efbede8a09a89f4c8f37a0fd01"
},
"downloads": -1,
"filename": "moler-1.12.0.tar.gz",
"has_sig": false,
"md5_digest": "aa9237d99e4480ec6bfe2680f4ff23a9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 294372,
"upload_time": "2020-04-22T10:18:45",
"upload_time_iso_8601": "2020-04-22T10:18:45.695828Z",
"url": "https://files.pythonhosted.org/packages/bd/ca/66eb5f0c7d5ee66e091400a7148e8352de224bebdb922f3fcb3e1ab31034/moler-1.12.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.13.0": [
{
"comment_text": "",
"digests": {
"md5": "36227e8eb3929cf62283cc0153efcd52",
"sha256": "edc40a252b583685a74e05beb3350f6bc55dc6a0ea9bde38d481bd8893839026"
},
"downloads": -1,
"filename": "moler-1.13.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "36227e8eb3929cf62283cc0153efcd52",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 404539,
"upload_time": "2020-05-06T09:41:56",
"upload_time_iso_8601": "2020-05-06T09:41:56.503807Z",
"url": "https://files.pythonhosted.org/packages/2f/05/2947deb9c7dd23665b4b74bf338a1c4cb23d108c0aea899a4a8e89059ef1/moler-1.13.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "28323bc44e1800a1c17ce5d100f732e3",
"sha256": "da0a15a608b39d13520d264e622731472b12f1362417ce9e412942eb6c8033fc"
},
"downloads": -1,
"filename": "moler-1.13.0.tar.gz",
"has_sig": false,
"md5_digest": "28323bc44e1800a1c17ce5d100f732e3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 298724,
"upload_time": "2020-05-06T09:41:58",
"upload_time_iso_8601": "2020-05-06T09:41:58.888112Z",
"url": "https://files.pythonhosted.org/packages/c3/37/9a1a2ea2d661f18d52fc7e35fa145904b89abe7647f22812475a22950b74/moler-1.13.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.14.0": [
{
"comment_text": "",
"digests": {
"md5": "a0f96ec3ed546e146e3ec5eaae15f962",
"sha256": "8531771d643c8db0d0fab42bab6e722153101548ff1123b8ff9edb30699b017b"
},
"downloads": -1,
"filename": "moler-1.14.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a0f96ec3ed546e146e3ec5eaae15f962",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 405317,
"upload_time": "2020-05-19T10:18:08",
"upload_time_iso_8601": "2020-05-19T10:18:08.074225Z",
"url": "https://files.pythonhosted.org/packages/4b/73/75681d384224d0811897f123432faa4c50ce64cf5f42d8c71373e92621b4/moler-1.14.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "23aac2f6e98efcf080ddebcbda54a64d",
"sha256": "1bb43039840744389dcaaa7d14c33e6de637d40255809f5c4ce3dcf4a93ec06a"
},
"downloads": -1,
"filename": "moler-1.14.0.tar.gz",
"has_sig": false,
"md5_digest": "23aac2f6e98efcf080ddebcbda54a64d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 298952,
"upload_time": "2020-05-19T10:18:10",
"upload_time_iso_8601": "2020-05-19T10:18:10.196436Z",
"url": "https://files.pythonhosted.org/packages/96/5d/af5d1cb3d86b10d9309983a5c94c4974ed24f711e7e08d61eddc13f3115a/moler-1.14.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.15.0": [
{
"comment_text": "",
"digests": {
"md5": "5ea27d9c58570c6f2c6459df77cf06f9",
"sha256": "c52e1077ab9dd3c1963fca5ade85bf6593c3624eb9cda95280d1d5870e1418e1"
},
"downloads": -1,
"filename": "moler-1.15.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5ea27d9c58570c6f2c6459df77cf06f9",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 411801,
"upload_time": "2020-06-03T10:11:17",
"upload_time_iso_8601": "2020-06-03T10:11:17.710740Z",
"url": "https://files.pythonhosted.org/packages/c3/52/1f8ae200f7a08ffcb3ca542168f2d745cbf6e5ba71451c02d0cac1b385d0/moler-1.15.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9952cb32a8aa00af82a371dd4ff33314",
"sha256": "8ff08e2992283a29631da0278cf72dd344fcb90f4d51f14b01c23a4084f560da"
},
"downloads": -1,
"filename": "moler-1.15.0.tar.gz",
"has_sig": false,
"md5_digest": "9952cb32a8aa00af82a371dd4ff33314",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 300290,
"upload_time": "2020-06-03T10:11:20",
"upload_time_iso_8601": "2020-06-03T10:11:20.070808Z",
"url": "https://files.pythonhosted.org/packages/54/fb/885d9ce3a033a062a5607eec2871688cd4ddf56df511a83f51a7d2bc14e1/moler-1.15.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.16.0": [
{
"comment_text": "",
"digests": {
"md5": "bc63561ce0e310b1f788cdbb5bb85570",
"sha256": "bc06ac2ea06b8b9af921c5b64a64d3871ef10b37f0eebee3e34e7e9996ba3221"
},
"downloads": -1,
"filename": "moler-1.16.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "bc63561ce0e310b1f788cdbb5bb85570",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 415519,
"upload_time": "2020-06-16T08:49:02",
"upload_time_iso_8601": "2020-06-16T08:49:02.609986Z",
"url": "https://files.pythonhosted.org/packages/0d/43/ca64e30b75a288ebfd2572167085cf0789899605b9dbfed6f371d47dd444/moler-1.16.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a5796d604017876a621827c04f240030",
"sha256": "602bce8e951fe796ba842c965a781d71587608ffd90eced9bf14a6ec9f4ba780"
},
"downloads": -1,
"filename": "moler-1.16.0.tar.gz",
"has_sig": false,
"md5_digest": "a5796d604017876a621827c04f240030",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 301462,
"upload_time": "2020-06-16T08:49:05",
"upload_time_iso_8601": "2020-06-16T08:49:05.338787Z",
"url": "https://files.pythonhosted.org/packages/e4/f1/55ac8f2616815b2b991ad84100d49f33325ad043495d91fa46ccc773f147/moler-1.16.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.17.0": [
{
"comment_text": "",
"digests": {
"md5": "f85064b4eead09ac04d87effdccb8fea",
"sha256": "3ecd3a23746031b977a2a2f495b8a5b230ae48c17efc427721b61bead79156bf"
},
"downloads": -1,
"filename": "moler-1.17.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f85064b4eead09ac04d87effdccb8fea",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 418738,
"upload_time": "2020-06-30T10:53:58",
"upload_time_iso_8601": "2020-06-30T10:53:58.246712Z",
"url": "https://files.pythonhosted.org/packages/74/f1/7326b71160bb9f3d547363439ed1ba5c13c8d52961920029804ddf080148/moler-1.17.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "4269dce44a6b05f2c6a1e884e923fce0",
"sha256": "7f06c62c29effe4b4fddfd03fb388ba435e9a281a822c060c7cd1b94b2598f7b"
},
"downloads": -1,
"filename": "moler-1.17.0.tar.gz",
"has_sig": false,
"md5_digest": "4269dce44a6b05f2c6a1e884e923fce0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 304730,
"upload_time": "2020-06-30T10:54:00",
"upload_time_iso_8601": "2020-06-30T10:54:00.753790Z",
"url": "https://files.pythonhosted.org/packages/d7/67/504f20a332cc33254b6805dbc2aa7fb2d1e4dce2cda069dc3f5f7f68b4df/moler-1.17.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.18.0": [
{
"comment_text": "",
"digests": {
"md5": "8549835bfab6101f50f59f5695524dad",
"sha256": "d4df971afad04442f6e3dbb72964ec46d1e24d2603c42103f96d948f607892bf"
},
"downloads": -1,
"filename": "moler-1.18.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "8549835bfab6101f50f59f5695524dad",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 419272,
"upload_time": "2020-07-08T08:07:27",
"upload_time_iso_8601": "2020-07-08T08:07:27.372363Z",
"url": "https://files.pythonhosted.org/packages/8b/0f/fb0e6486ec65e2c4029656b5453b334397a328078ce08ac600c53ebac983/moler-1.18.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "05c6a00de4741e37736bdf1bc38641ae",
"sha256": "f75bbccf6204f8d8e369cb61c074f8b1406df499bb705efe0754c3eab3de613b"
},
"downloads": -1,
"filename": "moler-1.18.0.tar.gz",
"has_sig": false,
"md5_digest": "05c6a00de4741e37736bdf1bc38641ae",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 305406,
"upload_time": "2020-07-08T08:07:29",
"upload_time_iso_8601": "2020-07-08T08:07:29.525269Z",
"url": "https://files.pythonhosted.org/packages/e4/5c/67a7a9422a2e1dfd85a8b7d8d04bb4e352ec86b02214e07879a7b6030ac8/moler-1.18.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.19.0": [
{
"comment_text": "",
"digests": {
"md5": "8513ffae0b663827b3807df7e8c40f46",
"sha256": "d0bed844ea43ced0d67e1e647879b7f1fe3bb3316a28267eff8f4abf1a33f26e"
},
"downloads": -1,
"filename": "moler-1.19.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "8513ffae0b663827b3807df7e8c40f46",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 437468,
"upload_time": "2020-07-22T12:10:35",
"upload_time_iso_8601": "2020-07-22T12:10:35.779546Z",
"url": "https://files.pythonhosted.org/packages/e2/43/328bed7273ad0c3f2b1e4a5fe511e1fcefee9d1cdc146ef95fb9475e68c6/moler-1.19.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2d8cd19e48259781efa2b2c9426da1fc",
"sha256": "0cd00df0e159b5371abbee1dbcb21a3551f8814e13c03e4a8ee9b8cce8f84c41"
},
"downloads": -1,
"filename": "moler-1.19.0.tar.gz",
"has_sig": false,
"md5_digest": "2d8cd19e48259781efa2b2c9426da1fc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 317669,
"upload_time": "2020-07-22T12:10:38",
"upload_time_iso_8601": "2020-07-22T12:10:38.205786Z",
"url": "https://files.pythonhosted.org/packages/cc/8e/434bc759b7fb078bfe65dd7388fcbe4a48f2ea9038bd82294adc1cb21d7e/moler-1.19.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.2.0": [
{
"comment_text": "",
"digests": {
"md5": "ed91f37725772b6a99cfed910c3c139c",
"sha256": "91000f2d3d665924728dce9644268878568179f2e5392dae4abf07e5d09cf25f"
},
"downloads": -1,
"filename": "moler-1.2.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "ed91f37725772b6a99cfed910c3c139c",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 340690,
"upload_time": "2019-11-27T11:43:37",
"upload_time_iso_8601": "2019-11-27T11:43:37.722864Z",
"url": "https://files.pythonhosted.org/packages/b9/6d/4e94f1822b3e2057366af8253d8124446fe742fa0c273e4c1f5a29ca40a0/moler-1.2.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "545e4f16a8cac2a47be0ebdf5d5f9308",
"sha256": "bb827fd9c124bfb363e00bb340cce22a1baf944dc8e28fed6573c3e29912c9e5"
},
"downloads": -1,
"filename": "moler-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "545e4f16a8cac2a47be0ebdf5d5f9308",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 251785,
"upload_time": "2019-11-27T11:43:40",
"upload_time_iso_8601": "2019-11-27T11:43:40.602779Z",
"url": "https://files.pythonhosted.org/packages/84/ac/e0e53fef126c9eea63a5d08c1a265656e009a47b3b82a0804ae6a465c4a8/moler-1.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.20.0": [
{
"comment_text": "",
"digests": {
"md5": "cc3d02c2fc6910e145f91f1383168524",
"sha256": "277afba6a509bb9377787ae9c4a3b5fb3eaa4f07011584eb99300f3edc180ab3"
},
"downloads": -1,
"filename": "moler-1.20.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "cc3d02c2fc6910e145f91f1383168524",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 440048,
"upload_time": "2020-08-13T10:51:24",
"upload_time_iso_8601": "2020-08-13T10:51:24.175331Z",
"url": "https://files.pythonhosted.org/packages/ff/c2/0281d04ce7f0687fd132510617fb39dc2a227c2eafb8787a721dc654fb5f/moler-1.20.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "556ec250c8fe017111c9a3959af29dac",
"sha256": "749934a0cd9efd46c212912c5159544ca79ece113896bf6035e662edc5896ead"
},
"downloads": -1,
"filename": "moler-1.20.0.tar.gz",
"has_sig": false,
"md5_digest": "556ec250c8fe017111c9a3959af29dac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 319558,
"upload_time": "2020-08-13T10:51:26",
"upload_time_iso_8601": "2020-08-13T10:51:26.935778Z",
"url": "https://files.pythonhosted.org/packages/ca/1b/29ced5c2497e668f1c43de997ed6d643a9b16f155f01809954a34231fd52/moler-1.20.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.21.0": [
{
"comment_text": "",
"digests": {
"md5": "bb314ce49cd6daedbabcaf0b7a40f00d",
"sha256": "715b04cadbd4a035ed9ace1df23d6a997175bc54c00abb93de75a7a1bb2dc2cd"
},
"downloads": -1,
"filename": "moler-1.21.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "bb314ce49cd6daedbabcaf0b7a40f00d",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 440957,
"upload_time": "2020-09-23T09:52:35",
"upload_time_iso_8601": "2020-09-23T09:52:35.119729Z",
"url": "https://files.pythonhosted.org/packages/e5/db/eed47fe9f7f2bcbbc070e44e555e7bfc21dace3243c9fff0299158ec0fb9/moler-1.21.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "b62dfbee295b6fa0448fb1ee4f494910",
"sha256": "325226a95bc25a374c0ea2794635382aebbdda9ddd660330b143db72f5324f3d"
},
"downloads": -1,
"filename": "moler-1.21.0.tar.gz",
"has_sig": false,
"md5_digest": "b62dfbee295b6fa0448fb1ee4f494910",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 321928,
"upload_time": "2020-09-23T09:52:37",
"upload_time_iso_8601": "2020-09-23T09:52:37.437943Z",
"url": "https://files.pythonhosted.org/packages/a4/d6/1ff4baa34809de4a1ff373a1fd0f63e0ed776bbe8a676fff046f3fd1403b/moler-1.21.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.22.0": [
{
"comment_text": "",
"digests": {
"md5": "b061e828c3fc45eb9c30003355b49a50",
"sha256": "e7d3a7d9823f2fcbba9b5246ec8a6871a69c4720f0e4a621629d792c9d17e68c"
},
"downloads": -1,
"filename": "moler-1.22.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b061e828c3fc45eb9c30003355b49a50",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 440969,
"upload_time": "2020-10-14T09:56:52",
"upload_time_iso_8601": "2020-10-14T09:56:52.441848Z",
"url": "https://files.pythonhosted.org/packages/b8/d3/3ea960daa5a4018365fcb400f9e0638a2a259482d47cccc25b8f62b665cd/moler-1.22.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "858077e4040af8e76633e3051a10a471",
"sha256": "84d3052efbb82578865bb75fd4a7e3ab836f085ed66f90e20d5bc26ee1ea6e3d"
},
"downloads": -1,
"filename": "moler-1.22.0.tar.gz",
"has_sig": false,
"md5_digest": "858077e4040af8e76633e3051a10a471",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 321958,
"upload_time": "2020-10-14T09:56:55",
"upload_time_iso_8601": "2020-10-14T09:56:55.047422Z",
"url": "https://files.pythonhosted.org/packages/19/39/dcd3f190db8cf04f9699822a7ee327fa4f16ec5d788775e8645f3959c82b/moler-1.22.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.23.0": [
{
"comment_text": "",
"digests": {
"md5": "d7552c0db99f560054933da023910540",
"sha256": "c63eba9a7bd1849ba374bf43b470114c3c503f3013ad13062f341ada61b2b39f"
},
"downloads": -1,
"filename": "moler-1.23.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "d7552c0db99f560054933da023910540",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 450421,
"upload_time": "2020-11-04T11:58:17",
"upload_time_iso_8601": "2020-11-04T11:58:17.911035Z",
"url": "https://files.pythonhosted.org/packages/39/0e/a23fede65457063391fb64fff7ce18d178d5f3c63f90d583359fe283102e/moler-1.23.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "d5c433b8ccc823d2808d543983fc93d0",
"sha256": "b221f0f3ec59fee6ed1a8217287140658f83e7cca5adb5318229cbf399e67a69"
},
"downloads": -1,
"filename": "moler-1.23.0.tar.gz",
"has_sig": false,
"md5_digest": "d5c433b8ccc823d2808d543983fc93d0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 328029,
"upload_time": "2020-11-04T11:58:20",
"upload_time_iso_8601": "2020-11-04T11:58:20.504031Z",
"url": "https://files.pythonhosted.org/packages/4f/cf/4c3b7c3a0907b3743731a4a9f402448fac7adab0858bad7900ba63c9fd4e/moler-1.23.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.24.0": [
{
"comment_text": "",
"digests": {
"md5": "9d2870ecfe5e2fefa1cd1a4f6c0bf58e",
"sha256": "4dee7a78f5e78a4fbe211581d17801e46823a5063c8531a8732baf428f8ddf42"
},
"downloads": -1,
"filename": "moler-1.24.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9d2870ecfe5e2fefa1cd1a4f6c0bf58e",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 452790,
"upload_time": "2020-11-18T10:32:49",
"upload_time_iso_8601": "2020-11-18T10:32:49.484273Z",
"url": "https://files.pythonhosted.org/packages/a0/bf/d5f2ffea4ae7c1fc42ac0597cbcd8b154556b4b0fb489cb7317187027a85/moler-1.24.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "48227339e796fa0ec4e3a7422a78af3d",
"sha256": "38e9ebd57567bf385f81bc64c2e178005c6891eaa92950d1e8a88fc4a8040756"
},
"downloads": -1,
"filename": "moler-1.24.0.tar.gz",
"has_sig": false,
"md5_digest": "48227339e796fa0ec4e3a7422a78af3d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 329563,
"upload_time": "2020-11-18T10:32:52",
"upload_time_iso_8601": "2020-11-18T10:32:52.015955Z",
"url": "https://files.pythonhosted.org/packages/93/36/c2011c56948bbd36379f7f0073b0420c1bd8fa3240afeac91f389842269c/moler-1.24.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.25.0": [
{
"comment_text": "",
"digests": {
"md5": "63fb3acd6c3b9998e2152149893f81f7",
"sha256": "97a8cf5e48b3b5b7ade18c6d9b73fabd8fe9575648538d172b8add1e775b97be"
},
"downloads": -1,
"filename": "moler-1.25.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "63fb3acd6c3b9998e2152149893f81f7",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 460857,
"upload_time": "2021-01-27T10:46:48",
"upload_time_iso_8601": "2021-01-27T10:46:48.427526Z",
"url": "https://files.pythonhosted.org/packages/ef/f5/6cc3292c2ea5122ff0c5dbd7c07ae44f9eb8cd023e8bcec1ad68b66f485f/moler-1.25.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2a98290e6b4fb98ff123e902efed3a62",
"sha256": "c3922b217350d0918a2561815f822ccc2b4003997930f113a7e29d5e6a406cfb"
},
"downloads": -1,
"filename": "moler-1.25.0.tar.gz",
"has_sig": false,
"md5_digest": "2a98290e6b4fb98ff123e902efed3a62",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 333139,
"upload_time": "2021-01-27T10:46:50",
"upload_time_iso_8601": "2021-01-27T10:46:50.809720Z",
"url": "https://files.pythonhosted.org/packages/42/1a/7d91f9f89903ac5cc7e4fac1c0aeb8f27803744b5aff4ad484ed7476d9c8/moler-1.25.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.25.1": [
{
"comment_text": "",
"digests": {
"md5": "928041ca96de0d5bd8839e7ad33bcee7",
"sha256": "1138a62f8186b22794de6be5eeb58022da033326d4dff6857496b93fdba7843d"
},
"downloads": -1,
"filename": "moler-1.25.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "928041ca96de0d5bd8839e7ad33bcee7",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 460924,
"upload_time": "2021-01-28T14:57:54",
"upload_time_iso_8601": "2021-01-28T14:57:54.250635Z",
"url": "https://files.pythonhosted.org/packages/e1/21/db68fbbff3c786a9da586d47353c18f65d78825bbe156b70e9f589818416/moler-1.25.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "7cd3afafef583e2aba52b483160aad59",
"sha256": "6c6d0cca27afde33953868bd176997e58da9fb34ffb77da6e2518b494976967e"
},
"downloads": -1,
"filename": "moler-1.25.1.tar.gz",
"has_sig": false,
"md5_digest": "7cd3afafef583e2aba52b483160aad59",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 333172,
"upload_time": "2021-01-28T14:57:56",
"upload_time_iso_8601": "2021-01-28T14:57:56.649251Z",
"url": "https://files.pythonhosted.org/packages/b4/9e/efafc969b803b6ac7c91b404ff2875e39c2992d4107dc3b413131217e6ba/moler-1.25.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.26.0": [
{
"comment_text": "",
"digests": {
"md5": "712ea7823cbfedcdcb5ce976978e1ae8",
"sha256": "9aad85603ed911a6943bafb5e5ab7f6db3cc21d8dc52137ac170c4ab3ae16af8"
},
"downloads": -1,
"filename": "moler-1.26.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "712ea7823cbfedcdcb5ce976978e1ae8",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 464412,
"upload_time": "2021-02-15T09:39:18",
"upload_time_iso_8601": "2021-02-15T09:39:18.221103Z",
"url": "https://files.pythonhosted.org/packages/d5/75/f1985ae39ac13b934a37a5e9b1dba9401e2ffd76c0c848735621d8b5c9d8/moler-1.26.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "5f3a64377d34dd3d54241269013fb49c",
"sha256": "9589f7267622e24864438871a38741626962cfb9a0e57d3110b2ff45f8fd25c5"
},
"downloads": -1,
"filename": "moler-1.26.0.tar.gz",
"has_sig": false,
"md5_digest": "5f3a64377d34dd3d54241269013fb49c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 335945,
"upload_time": "2021-02-15T09:39:20",
"upload_time_iso_8601": "2021-02-15T09:39:20.705239Z",
"url": "https://files.pythonhosted.org/packages/87/0d/ac931aef40d5cb44409296cc996ef0f4984fd487e352477991d2ba67b6d8/moler-1.26.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.27.0": [
{
"comment_text": "",
"digests": {
"md5": "7b890750d8c465495f8b342713d99f74",
"sha256": "bc5c63d713cbc5ebe619837c6a3ee3f5f5a29d8a7fb76932fcba195b275ec89d"
},
"downloads": -1,
"filename": "moler-1.27.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "7b890750d8c465495f8b342713d99f74",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 468825,
"upload_time": "2021-03-11T12:00:20",
"upload_time_iso_8601": "2021-03-11T12:00:20.233223Z",
"url": "https://files.pythonhosted.org/packages/e0/b2/7f5f80bfc5131e5a17bc85c1cfd3efa98e58f65dc81ecb0f82e9f7604406/moler-1.27.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "06725aa7c646198e6282bee3116fb633",
"sha256": "683b5dc3aeb095c80606502b22cd8c85926fcfc5258aa1db25f4ccd19cc7c49b"
},
"downloads": -1,
"filename": "moler-1.27.0.tar.gz",
"has_sig": false,
"md5_digest": "06725aa7c646198e6282bee3116fb633",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 339805,
"upload_time": "2021-03-11T12:00:23",
"upload_time_iso_8601": "2021-03-11T12:00:23.458783Z",
"url": "https://files.pythonhosted.org/packages/3f/8e/7257a1095d154ad30bab9e8e14fb13708f38ad2b586ddfd8e312505788cf/moler-1.27.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.28.0": [
{
"comment_text": "",
"digests": {
"md5": "b68431bc2014852d51ec30c31f44acbf",
"sha256": "e114b20247b90d7dd279a448f072808c7a2d4f9b6424fd151ac1d9f56d59d0ba"
},
"downloads": -1,
"filename": "moler-1.28.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b68431bc2014852d51ec30c31f44acbf",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 470909,
"upload_time": "2021-03-25T09:33:50",
"upload_time_iso_8601": "2021-03-25T09:33:50.132579Z",
"url": "https://files.pythonhosted.org/packages/63/98/0ae53080b7a6e27a992fe23f0e78067a127925623817cade8ef2a7124c34/moler-1.28.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9b31a06035c073e68e4d985447174abc",
"sha256": "21bb2149bc3e3ac4d2526f9f0064539765db81e79e6decfa481fa1e38d9b35b4"
},
"downloads": -1,
"filename": "moler-1.28.0.tar.gz",
"has_sig": false,
"md5_digest": "9b31a06035c073e68e4d985447174abc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 340751,
"upload_time": "2021-03-25T09:33:53",
"upload_time_iso_8601": "2021-03-25T09:33:53.111167Z",
"url": "https://files.pythonhosted.org/packages/b7/f6/a82660c0ee26c957feeb75d2753e3f4f28a16048f4f671b378b0b6eb4d22/moler-1.28.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.29.0": [
{
"comment_text": "",
"digests": {
"md5": "466adc8409765d206447512cb0d88167",
"sha256": "b789ef34356e8e4230570ac240336c7b8c69516274abefd7649e5177d34c2c4e"
},
"downloads": -1,
"filename": "moler-1.29.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "466adc8409765d206447512cb0d88167",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 471230,
"upload_time": "2021-04-12T13:22:45",
"upload_time_iso_8601": "2021-04-12T13:22:45.128830Z",
"url": "https://files.pythonhosted.org/packages/27/36/de833dc23c3105eaf0ad50b2af1af976528c086843635d4de2659297c57f/moler-1.29.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8c70efdb8791e2eb45c679676be89247",
"sha256": "ca004cba000392caab37a802fd358453e7d0e51a102e9c32e0cc0437f03e537c"
},
"downloads": -1,
"filename": "moler-1.29.0.tar.gz",
"has_sig": false,
"md5_digest": "8c70efdb8791e2eb45c679676be89247",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 341062,
"upload_time": "2021-04-12T13:22:47",
"upload_time_iso_8601": "2021-04-12T13:22:47.956241Z",
"url": "https://files.pythonhosted.org/packages/e6/c9/5f96f0a6cf53c9e4a7ea66ca2e91394095c12c7e329d42ebfed6513a1706/moler-1.29.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.3.0": [
{
"comment_text": "",
"digests": {
"md5": "238bb35bc61443aa33ecda8ba3b12484",
"sha256": "688148c8c3f3030e3913cbf1f75818ceb4917c10a8c72a23992a0e05bb7d4528"
},
"downloads": -1,
"filename": "moler-1.3.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "238bb35bc61443aa33ecda8ba3b12484",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 352985,
"upload_time": "2019-12-10T12:23:02",
"upload_time_iso_8601": "2019-12-10T12:23:02.920880Z",
"url": "https://files.pythonhosted.org/packages/6e/8b/4737b1f44058c6e0d7bb643059be3b52f88f0a77dc14ef2e85e22fb2547d/moler-1.3.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8773ab5ed8e207fe99289e2f269659b3",
"sha256": "c9b1cc1803787baa9f58e098e64121b51e68eaecb4d61e2591d60d4f37860cba"
},
"downloads": -1,
"filename": "moler-1.3.0.tar.gz",
"has_sig": false,
"md5_digest": "8773ab5ed8e207fe99289e2f269659b3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 263338,
"upload_time": "2019-12-10T12:23:06",
"upload_time_iso_8601": "2019-12-10T12:23:06.353725Z",
"url": "https://files.pythonhosted.org/packages/b3/a6/e4782e3ff70f7ec5073e446ebbfa8a703a09d8c7c619ddcf15699578f504/moler-1.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.3.1": [
{
"comment_text": "",
"digests": {
"md5": "ed4e768b0e1d7844a3b9ff1f6be4f8af",
"sha256": "076e86ce95df68691098046d3241d114c4d685703ab78908f8ca900065514190"
},
"downloads": -1,
"filename": "moler-1.3.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "ed4e768b0e1d7844a3b9ff1f6be4f8af",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 353464,
"upload_time": "2019-12-12T09:51:10",
"upload_time_iso_8601": "2019-12-12T09:51:10.636048Z",
"url": "https://files.pythonhosted.org/packages/19/d7/b3ab313bc72b83a9c8231f182a6869a03b8c92305c98e5cb4a3625f3e39d/moler-1.3.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2f83ab8c723f85bc8b4cc0868f91066f",
"sha256": "595c6c8236303657c9be8a776a6a8ac66bf1d811cb21fbf0e42a49865bdf0dea"
},
"downloads": -1,
"filename": "moler-1.3.1.tar.gz",
"has_sig": false,
"md5_digest": "2f83ab8c723f85bc8b4cc0868f91066f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 264057,
"upload_time": "2019-12-12T09:51:13",
"upload_time_iso_8601": "2019-12-12T09:51:13.516103Z",
"url": "https://files.pythonhosted.org/packages/d2/5e/a0f68c033bff94df458cc53cb1d75fce919a65a5967d665cdef5889e1f99/moler-1.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.30.0": [
{
"comment_text": "",
"digests": {
"md5": "4030b75e2f8d62e0ead1ef8db22ad9d0",
"sha256": "b7f6f82efe36e5a73ce81e2f666cd90b4adb6c5d9a05045d733640df9e680a9d"
},
"downloads": -1,
"filename": "moler-1.30.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "4030b75e2f8d62e0ead1ef8db22ad9d0",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 473507,
"upload_time": "2021-05-19T09:05:45",
"upload_time_iso_8601": "2021-05-19T09:05:45.194786Z",
"url": "https://files.pythonhosted.org/packages/d3/65/98c381fa97600ab56235db63a816ad25d22d366672a480a21f81f8013efe/moler-1.30.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a704ed5cd4331b153ce113529b5fe7bb",
"sha256": "7e483e477a35355e30f536b89b720ef8841fa58aaba8323051bbb90dce5732fa"
},
"downloads": -1,
"filename": "moler-1.30.0.tar.gz",
"has_sig": false,
"md5_digest": "a704ed5cd4331b153ce113529b5fe7bb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342926,
"upload_time": "2021-05-19T09:05:47",
"upload_time_iso_8601": "2021-05-19T09:05:47.874497Z",
"url": "https://files.pythonhosted.org/packages/61/ba/23fbed4537eee1c27fcb120cce3bff08291a87d325a495c1b1d0736d9b7f/moler-1.30.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.31.0": [
{
"comment_text": "",
"digests": {
"md5": "5f701d44cfd597b5da4742c45b9d088c",
"sha256": "6564e3af26a87c2b950bf6ca260898ea7bc5971beb91ff62dc5a407d2ee9ed9a"
},
"downloads": -1,
"filename": "moler-1.31.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5f701d44cfd597b5da4742c45b9d088c",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 480566,
"upload_time": "2021-07-19T09:56:43",
"upload_time_iso_8601": "2021-07-19T09:56:43.617093Z",
"url": "https://files.pythonhosted.org/packages/c0/ac/3397438df53ad048515165cc629b89aea5cf4b037ca0959fcaf8b13823d2/moler-1.31.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "02d179dc3629db7a9ec8778906930bb8",
"sha256": "b6fed978a9f44b9179f2d014d92fe16a31da2e5991b0cd99fbabea7c5ca62ea5"
},
"downloads": -1,
"filename": "moler-1.31.0.tar.gz",
"has_sig": false,
"md5_digest": "02d179dc3629db7a9ec8778906930bb8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 346640,
"upload_time": "2021-07-19T09:56:46",
"upload_time_iso_8601": "2021-07-19T09:56:46.033423Z",
"url": "https://files.pythonhosted.org/packages/da/52/630a86073974e6b64c828f09e527c23f53cb0e4c03f62ee841ee7aa1bc7d/moler-1.31.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.31.1": [
{
"comment_text": "",
"digests": {
"md5": "2dee6ae820b7f9f87cf26bdad87e1f69",
"sha256": "33f6bc6cbb31ee228c74328557c927d6b4deb0a1a11e6d8ba6fa26639e994029"
},
"downloads": -1,
"filename": "moler-1.31.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "2dee6ae820b7f9f87cf26bdad87e1f69",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 480582,
"upload_time": "2021-07-28T12:57:23",
"upload_time_iso_8601": "2021-07-28T12:57:23.875528Z",
"url": "https://files.pythonhosted.org/packages/77/0b/56344526932e2c6b4708b4a51e98c8297b9937f600e6a95f12f637775594/moler-1.31.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "986fb0b4ce703985b200fb4d18d40fe6",
"sha256": "eb88afec3865de753ecccab097cbd5b1aab85c1b9744aeb42690f9553afa52a2"
},
"downloads": -1,
"filename": "moler-1.31.1.tar.gz",
"has_sig": false,
"md5_digest": "986fb0b4ce703985b200fb4d18d40fe6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 342282,
"upload_time": "2021-07-28T12:57:26",
"upload_time_iso_8601": "2021-07-28T12:57:26.265078Z",
"url": "https://files.pythonhosted.org/packages/72/c8/d299d5034ca47ef958631218d3823b8aec733e99e0ecf2fe41cdb049e60c/moler-1.31.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.31.2": [
{
"comment_text": "",
"digests": {
"md5": "0b6d6c0ad7d9564a986aaca7a80c9ef8",
"sha256": "584bd944f9a7524e8a777082ddecf27a9de5fa7105187ea90f662bbbe09a27cf"
},
"downloads": -1,
"filename": "moler-1.31.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "0b6d6c0ad7d9564a986aaca7a80c9ef8",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 480815,
"upload_time": "2021-08-05T11:34:51",
"upload_time_iso_8601": "2021-08-05T11:34:51.280216Z",
"url": "https://files.pythonhosted.org/packages/62/94/ce1cd99a9d0f7a3d74f10d9f7628529883f56a464bbe71a38b0d5931b1e1/moler-1.31.2-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "037a15aeba67bf74a1b945acff7c6972",
"sha256": "3a362395f444c0a0478f395422abbf05033b64d0d56fe6bfbd6dba8ea81dd1c6"
},
"downloads": -1,
"filename": "moler-1.31.2.tar.gz",
"has_sig": false,
"md5_digest": "037a15aeba67bf74a1b945acff7c6972",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 347312,
"upload_time": "2021-08-05T11:34:54",
"upload_time_iso_8601": "2021-08-05T11:34:54.319717Z",
"url": "https://files.pythonhosted.org/packages/10/d6/9aeee54e5963f2e8fb1afbbf946ea7c71f23895811f73c6ac32780581e8e/moler-1.31.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.32.0": [
{
"comment_text": "",
"digests": {
"md5": "06d3e24922314bb52bb192bded5bf03f",
"sha256": "653056728d656edc9eecb4ac00e2c500182cb51f72c426cd82543229a6b0edb2"
},
"downloads": -1,
"filename": "moler-1.32.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "06d3e24922314bb52bb192bded5bf03f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 535716,
"upload_time": "2021-10-06T05:45:49",
"upload_time_iso_8601": "2021-10-06T05:45:49.604994Z",
"url": "https://files.pythonhosted.org/packages/60/47/2a89b67051c5add4ad0afc38e523e4240225b493bf39bb03ffb735304c1b/moler-1.32.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9a89e84891040e40b9f074d75682ce91",
"sha256": "91dc7744928d2579f0c73efa2e08246d2721cd5f4bdaf76b3592d359f570754c"
},
"downloads": -1,
"filename": "moler-1.32.0.tar.gz",
"has_sig": false,
"md5_digest": "9a89e84891040e40b9f074d75682ce91",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 387965,
"upload_time": "2021-10-06T05:45:51",
"upload_time_iso_8601": "2021-10-06T05:45:51.956014Z",
"url": "https://files.pythonhosted.org/packages/cc/7d/c5a03209732fd9883a9c5797283f6e28a746b419d790eca05c947174aa72/moler-1.32.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.32.1": [
{
"comment_text": "",
"digests": {
"md5": "1c5344b416a82f1648391328e2288cbd",
"sha256": "8d10973f541a18ce1b4c2787fc10817294fb7e619660f85769ff2cb25e626f75"
},
"downloads": -1,
"filename": "moler-1.32.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1c5344b416a82f1648391328e2288cbd",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 535872,
"upload_time": "2021-10-06T13:18:38",
"upload_time_iso_8601": "2021-10-06T13:18:38.179555Z",
"url": "https://files.pythonhosted.org/packages/14/54/744b7d8f2f9773ebe475583a8f65da15c825689f1628636a3397d086b6d8/moler-1.32.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "63434f8f45f2298843ee496a48c0ad74",
"sha256": "03d7440e0218f28995915a95c53ad859b6d19086d608bf3e121fcbaadec937c4"
},
"downloads": -1,
"filename": "moler-1.32.1.tar.gz",
"has_sig": false,
"md5_digest": "63434f8f45f2298843ee496a48c0ad74",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 389163,
"upload_time": "2021-10-06T13:18:41",
"upload_time_iso_8601": "2021-10-06T13:18:41.143936Z",
"url": "https://files.pythonhosted.org/packages/80/4f/c7596ee913c9bf60cc61530c2e9eef911caa7f07ef316cebd873e1dca1c1/moler-1.32.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.32.2": [
{
"comment_text": "",
"digests": {
"md5": "050e8a519bed54f2f5d56034938c9f89",
"sha256": "be55b21769c665b6f510b7a9532c9be80330297def505e15313ac8395714b2bd"
},
"downloads": -1,
"filename": "moler-1.32.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "050e8a519bed54f2f5d56034938c9f89",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 535880,
"upload_time": "2021-10-14T14:10:19",
"upload_time_iso_8601": "2021-10-14T14:10:19.339235Z",
"url": "https://files.pythonhosted.org/packages/dc/48/7f0f993bf1947b2c962cb614e0f5819d8b8b06039a76d279c314e5eb3198/moler-1.32.2-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "6b150c2032da5f932cd516874639423e",
"sha256": "cc902a83b9c1875ebe12a5ad34c19ce6885688a0256a55c638fe75012fb2ea73"
},
"downloads": -1,
"filename": "moler-1.32.2.tar.gz",
"has_sig": false,
"md5_digest": "6b150c2032da5f932cd516874639423e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 389220,
"upload_time": "2021-10-14T14:10:23",
"upload_time_iso_8601": "2021-10-14T14:10:23.568890Z",
"url": "https://files.pythonhosted.org/packages/ac/c2/8974069b689186b65d135fd72e5d66ac3202b31f187d1f871e8c85b30f45/moler-1.32.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.33.0": [
{
"comment_text": "",
"digests": {
"md5": "c752b14619904f2a8c39762db8fe296d",
"sha256": "32aaf88adb6e4e13fcf61a984da3dac792b6e4ef0fef45614b728c59f9d9f02c"
},
"downloads": -1,
"filename": "moler-1.33.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c752b14619904f2a8c39762db8fe296d",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 536255,
"upload_time": "2021-11-03T06:31:46",
"upload_time_iso_8601": "2021-11-03T06:31:46.665567Z",
"url": "https://files.pythonhosted.org/packages/33/70/eb846a1fd071e4e660a548074c947945a30a2fa3316e09863914eb00085f/moler-1.33.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2bc1c0407b61dcb2d7ce5c76f519b652",
"sha256": "e9a34707cdedee5919684caf0087301583624a459c13e4a14c0f4877a2950ffe"
},
"downloads": -1,
"filename": "moler-1.33.0.tar.gz",
"has_sig": false,
"md5_digest": "2bc1c0407b61dcb2d7ce5c76f519b652",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 388648,
"upload_time": "2021-11-03T06:31:49",
"upload_time_iso_8601": "2021-11-03T06:31:49.261605Z",
"url": "https://files.pythonhosted.org/packages/cf/27/66835a370692e37fa49dbd278a34fec3c8e7a371491196ca1d984c564ef8/moler-1.33.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.4.0": [
{
"comment_text": "",
"digests": {
"md5": "30efc66ea677da56bd52f2fef482a579",
"sha256": "4948ebaaf2e6104bf26db1ff6d42fb5da20f9cbcd5de65edd15712c974c986f3"
},
"downloads": -1,
"filename": "moler-1.4.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "30efc66ea677da56bd52f2fef482a579",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 354558,
"upload_time": "2020-01-08T09:48:37",
"upload_time_iso_8601": "2020-01-08T09:48:37.787369Z",
"url": "https://files.pythonhosted.org/packages/89/33/4c7d5f53c1d10a27d165ff12678253c3656b67de00361b986fb731abd7bd/moler-1.4.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "46e42d980b2efa86a46f8870dfe69df8",
"sha256": "a4bed12366fc835aeb35c5321b1d27c23900418e46f2d1d989e932294e8e9703"
},
"downloads": -1,
"filename": "moler-1.4.0.tar.gz",
"has_sig": false,
"md5_digest": "46e42d980b2efa86a46f8870dfe69df8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 266279,
"upload_time": "2020-01-08T09:48:40",
"upload_time_iso_8601": "2020-01-08T09:48:40.610375Z",
"url": "https://files.pythonhosted.org/packages/5c/fa/6e0192daddae3bf6f70326bb559fb65f35303422023d0ca9ede7e5fde1b9/moler-1.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.5.0": [
{
"comment_text": "",
"digests": {
"md5": "b00283f3d644e522fe0d14246b3910c2",
"sha256": "f5192ae016cd4e5419df1da730b1139d5917d4b8ffb8c4d2f212218bf3e1c197"
},
"downloads": -1,
"filename": "moler-1.5.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b00283f3d644e522fe0d14246b3910c2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 356362,
"upload_time": "2020-01-22T12:27:01",
"upload_time_iso_8601": "2020-01-22T12:27:01.540962Z",
"url": "https://files.pythonhosted.org/packages/8a/f9/5b3dcd47aaecfffebe8fb2644d3194d0bb8b2b47e8a07d8684db675d03f8/moler-1.5.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "e4b4f403bb0d094596a804c975d0f5ce",
"sha256": "ab58a023f99492fea2d31b0d951884d31d7b34945d4f9f82b4575d47ac4aab05"
},
"downloads": -1,
"filename": "moler-1.5.0.tar.gz",
"has_sig": false,
"md5_digest": "e4b4f403bb0d094596a804c975d0f5ce",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 267520,
"upload_time": "2020-01-22T12:27:04",
"upload_time_iso_8601": "2020-01-22T12:27:04.528024Z",
"url": "https://files.pythonhosted.org/packages/97/cc/746526c8579b8dc592307f8fd756b68fc312750e2311cf60b03c62312f17/moler-1.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.5.1": [
{
"comment_text": "",
"digests": {
"md5": "c46cf0bd1355f1b3690a3c20c1f77156",
"sha256": "abb005e49d9e68a572398f23e97a7e910edf22b4c9677b8a6b961bf56c64bd6b"
},
"downloads": -1,
"filename": "moler-1.5.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c46cf0bd1355f1b3690a3c20c1f77156",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 356397,
"upload_time": "2020-01-23T11:28:02",
"upload_time_iso_8601": "2020-01-23T11:28:02.715688Z",
"url": "https://files.pythonhosted.org/packages/7f/5f/c1401d96ba6bee9ed62e36f7c196de71c753d201af8868c633d59e2fabe2/moler-1.5.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "e7a863f5f65691226eaeed6fbe585a4f",
"sha256": "7ccd405e0fa83bd914390268529564962e5abce67b7274f5e74a39ffeae084d9"
},
"downloads": -1,
"filename": "moler-1.5.1.tar.gz",
"has_sig": false,
"md5_digest": "e7a863f5f65691226eaeed6fbe585a4f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 267531,
"upload_time": "2020-01-23T11:28:05",
"upload_time_iso_8601": "2020-01-23T11:28:05.978841Z",
"url": "https://files.pythonhosted.org/packages/90/83/4ce24930c5533a8789f3a9192e3562f3acabb3118a3667985eae6d76934f/moler-1.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.6.0": [
{
"comment_text": "",
"digests": {
"md5": "6e5a44a487761983161ca1ca9495bc48",
"sha256": "bd2efb6a6597466097c53244e0b93dc52d69b52f3a4dd083ae44ba99a9f78ab7"
},
"downloads": -1,
"filename": "moler-1.6.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "6e5a44a487761983161ca1ca9495bc48",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 379354,
"upload_time": "2020-02-19T09:38:22",
"upload_time_iso_8601": "2020-02-19T09:38:22.084158Z",
"url": "https://files.pythonhosted.org/packages/51/8a/2037b7a23dc0000208a6e3ea780c3727797cf4dc8ed7669d1ffcfb187e69/moler-1.6.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "3ce32396e93837dcbb7d3b72e14da8d9",
"sha256": "2dedcbf40fdeeb0e83347aaf8c2d89568eb430556182a12c1b5972f41852d1f1"
},
"downloads": -1,
"filename": "moler-1.6.0.tar.gz",
"has_sig": false,
"md5_digest": "3ce32396e93837dcbb7d3b72e14da8d9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 281110,
"upload_time": "2020-02-19T09:38:24",
"upload_time_iso_8601": "2020-02-19T09:38:24.780624Z",
"url": "https://files.pythonhosted.org/packages/de/0f/773cf9013b410620d54cf40a9245c8d556b14529d3a242e6b7ec6c179867/moler-1.6.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.7.0": [
{
"comment_text": "",
"digests": {
"md5": "b003430bfaa56ad70478c02549a87adf",
"sha256": "5ebca1f11d3150d8158f0d437dfdce48dcf2620c1b2a3ffdc581b4b7fbd35235"
},
"downloads": -1,
"filename": "moler-1.7.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b003430bfaa56ad70478c02549a87adf",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 386476,
"upload_time": "2020-03-03T10:34:34",
"upload_time_iso_8601": "2020-03-03T10:34:34.378783Z",
"url": "https://files.pythonhosted.org/packages/7b/02/a5a4c9e51ac7d24d2eea9a75aefcf5e7f6f55e69cd30491b9b30f93dbe75/moler-1.7.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "f9fb5c38ad746e8ec6e950ef93c40156",
"sha256": "7a2cd565d137bd0bc134a1076dda6db6043307795c8cbfa1e259cee223bff56b"
},
"downloads": -1,
"filename": "moler-1.7.0.tar.gz",
"has_sig": false,
"md5_digest": "f9fb5c38ad746e8ec6e950ef93c40156",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 283594,
"upload_time": "2020-03-03T10:34:37",
"upload_time_iso_8601": "2020-03-03T10:34:37.025566Z",
"url": "https://files.pythonhosted.org/packages/5e/85/ee84432947a88f0dd2cac70c4d1fb10989964810bcc0245c35c99439eda3/moler-1.7.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.8.0": [
{
"comment_text": "",
"digests": {
"md5": "9b870f6b00cfa09fa711435ef8735712",
"sha256": "6575137b7b3750f182f3380d707432d8f3cabcc46f9a24998178620d7646dfc6"
},
"downloads": -1,
"filename": "moler-1.8.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9b870f6b00cfa09fa711435ef8735712",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 388587,
"upload_time": "2020-03-10T10:03:06",
"upload_time_iso_8601": "2020-03-10T10:03:06.782012Z",
"url": "https://files.pythonhosted.org/packages/bf/a6/71ba9b3561d5bc032757f18f682014b863e1bdc0267e497e3633d2ba5c2a/moler-1.8.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "0f0acfb9a5745dc7c11c3f25d66994f4",
"sha256": "0fa875b4bed5f92b73fd168821748dc19a0769c63d7e854fa95d053480538923"
},
"downloads": -1,
"filename": "moler-1.8.0.tar.gz",
"has_sig": false,
"md5_digest": "0f0acfb9a5745dc7c11c3f25d66994f4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 285818,
"upload_time": "2020-03-10T10:03:09",
"upload_time_iso_8601": "2020-03-10T10:03:09.362487Z",
"url": "https://files.pythonhosted.org/packages/4c/35/78828128e11ff960cebb88b01a50e294831813db13aae454012d42549a52/moler-1.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"1.9.0": [
{
"comment_text": "",
"digests": {
"md5": "154350c6f1cd924c53530670682002e3",
"sha256": "498ca99818434931b6b53412cfd1bbcd56434e16c76e27d1664f410475827d91"
},
"downloads": -1,
"filename": "moler-1.9.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "154350c6f1cd924c53530670682002e3",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 391343,
"upload_time": "2020-03-25T10:16:39",
"upload_time_iso_8601": "2020-03-25T10:16:39.269593Z",
"url": "https://files.pythonhosted.org/packages/30/6c/395cfa3bdf03a3301977531c4af039f0bbff6ed92f08b0f2409ea03fe45d/moler-1.9.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "6a60bf79ba3457017a97fe8f1d2ecaa3",
"sha256": "3640273195a4f9691965bbf9ae0cd424a79d5742055d9d9202707961698ac88b"
},
"downloads": -1,
"filename": "moler-1.9.0.tar.gz",
"has_sig": false,
"md5_digest": "6a60bf79ba3457017a97fe8f1d2ecaa3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 288793,
"upload_time": "2020-03-25T10:16:41",
"upload_time_iso_8601": "2020-03-25T10:16:41.775667Z",
"url": "https://files.pythonhosted.org/packages/62/67/18a1b733fe88661764ba87baf513e3c728d5e440cfc527b2eab36531ebc2/moler-1.9.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "4968883e6ad6456c2d1404d8a366e412",
"sha256": "aff115930f3474d155fcca2f4c8a42a08c43af85d63a0b585ac900e3024e3516"
},
"downloads": -1,
"filename": "moler-2.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "4968883e6ad6456c2d1404d8a366e412",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 536445,
"upload_time": "2022-01-18T10:09:37",
"upload_time_iso_8601": "2022-01-18T10:09:37.864678Z",
"url": "https://files.pythonhosted.org/packages/d8/df/1d5302be42ddc1632bad7c9fc9924a5f40d653f07bdc48a79178220fafbc/moler-2.0.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "b28baf9052ef2a6205e043a304d697c5",
"sha256": "7396607474115ce87ebb96b035daa1c22d10ec3c888c82f4c1213da4de17f38b"
},
"downloads": -1,
"filename": "moler-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "b28baf9052ef2a6205e043a304d697c5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 388894,
"upload_time": "2022-01-18T10:09:40",
"upload_time_iso_8601": "2022-01-18T10:09:40.533266Z",
"url": "https://files.pythonhosted.org/packages/35/1c/f247643867df940bb6295f595ea143104c6a1e36df02e1ea5b939ec84310/moler-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"2.1.0": [
{
"comment_text": "",
"digests": {
"md5": "6216c5f2c26698cf4cc462e39d9d01c0",
"sha256": "deee694fda1ce0567d398700f9c8989f83ef20a1427f436d80701be40ae55c66"
},
"downloads": -1,
"filename": "moler-2.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "6216c5f2c26698cf4cc462e39d9d01c0",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 539488,
"upload_time": "2022-03-07T07:31:08",
"upload_time_iso_8601": "2022-03-07T07:31:08.897110Z",
"url": "https://files.pythonhosted.org/packages/8d/0d/b360a9a525341fc12c0d2f17f2305f01ec267b9b795f8abf677c00967edb/moler-2.1.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "667dd74bab99e6d6de643209a5fdfdfa",
"sha256": "3a014cf822bcaf7236bdc8a185f78638747d8dbc1ce7c95ccabcc5cb30131965"
},
"downloads": -1,
"filename": "moler-2.1.0.tar.gz",
"has_sig": false,
"md5_digest": "667dd74bab99e6d6de643209a5fdfdfa",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 391609,
"upload_time": "2022-03-07T07:31:12",
"upload_time_iso_8601": "2022-03-07T07:31:12.527830Z",
"url": "https://files.pythonhosted.org/packages/2c/20/5b219662d0bdabab4062a1cf27b22d3cb8e5dc8b46fe769e5da4c5f09ced/moler-2.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"2.2.0": [
{
"comment_text": "",
"digests": {
"md5": "48e9cfa738782a4aa3def7c5ff80387f",
"sha256": "4ef4a4a5882b38a42b118790acf36a678dfcc594ec8700dc656763b689d21703"
},
"downloads": -1,
"filename": "moler-2.2.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "48e9cfa738782a4aa3def7c5ff80387f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 540438,
"upload_time": "2022-05-05T06:00:29",
"upload_time_iso_8601": "2022-05-05T06:00:29.173232Z",
"url": "https://files.pythonhosted.org/packages/87/09/781e003cb9d81d23e575feaceb0f5697e668135efa2eec195373828b6c7c/moler-2.2.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "1a81fa4207def4ceed6752189d8d7f87",
"sha256": "489f7f2bbaab9fdc11257ea6d37605789d3c8c0c079eb3747fdcba0bd18b324e"
},
"downloads": -1,
"filename": "moler-2.2.0.tar.gz",
"has_sig": false,
"md5_digest": "1a81fa4207def4ceed6752189d8d7f87",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 392578,
"upload_time": "2022-05-05T06:00:33",
"upload_time_iso_8601": "2022-05-05T06:00:33.346709Z",
"url": "https://files.pythonhosted.org/packages/44/b1/971f84092d6c63469253a8e3b9f69af1d5fd768126f62819aee08c5f2720/moler-2.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"2.2.1": [
{
"comment_text": "",
"digests": {
"md5": "a3af6287bbdc144f6baca83c98a20d5f",
"sha256": "7a0929227e23627838dcb2524e02b5b9fc688e6382ab2304e3ad888233571155"
},
"downloads": -1,
"filename": "moler-2.2.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a3af6287bbdc144f6baca83c98a20d5f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 540459,
"upload_time": "2022-05-05T09:27:05",
"upload_time_iso_8601": "2022-05-05T09:27:05.893997Z",
"url": "https://files.pythonhosted.org/packages/7b/60/edfde92980c538ba50a5f59f94599c42a6ce13e7055bbf5846be522513b0/moler-2.2.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2208ceeb21b804a283c69768be7c8da2",
"sha256": "87979bb87597de4e5c78f716cfb7777c91ff337265bb27db8c59a0e7f0ada2c5"
},
"downloads": -1,
"filename": "moler-2.2.1.tar.gz",
"has_sig": false,
"md5_digest": "2208ceeb21b804a283c69768be7c8da2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 392605,
"upload_time": "2022-05-05T09:27:08",
"upload_time_iso_8601": "2022-05-05T09:27:08.616576Z",
"url": "https://files.pythonhosted.org/packages/68/95/bddc637199e0f8a3d9ed8afbef776bd261b941da54a53a5a3350d1d45b4f/moler-2.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "a3af6287bbdc144f6baca83c98a20d5f",
"sha256": "7a0929227e23627838dcb2524e02b5b9fc688e6382ab2304e3ad888233571155"
},
"downloads": -1,
"filename": "moler-2.2.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a3af6287bbdc144f6baca83c98a20d5f",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 540459,
"upload_time": "2022-05-05T09:27:05",
"upload_time_iso_8601": "2022-05-05T09:27:05.893997Z",
"url": "https://files.pythonhosted.org/packages/7b/60/edfde92980c538ba50a5f59f94599c42a6ce13e7055bbf5846be522513b0/moler-2.2.1-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2208ceeb21b804a283c69768be7c8da2",
"sha256": "87979bb87597de4e5c78f716cfb7777c91ff337265bb27db8c59a0e7f0ada2c5"
},
"downloads": -1,
"filename": "moler-2.2.1.tar.gz",
"has_sig": false,
"md5_digest": "2208ceeb21b804a283c69768be7c8da2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 392605,
"upload_time": "2022-05-05T09:27:08",
"upload_time_iso_8601": "2022-05-05T09:27:08.616576Z",
"url": "https://files.pythonhosted.org/packages/68/95/bddc637199e0f8a3d9ed8afbef776bd261b941da54a53a5a3350d1d45b4f/moler-2.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"vulnerabilities": []
}