{ "info": { "author": "Yannick Boetzel", "author_email": "github@boetzel.ch", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: System :: Archiving :: Backup", "Topic :: System :: Filesystems" ], "description": "# README #\n\npyznap is a ZFS snapshot management tool. It automatically takes and deletes snapshots and can send\nthem to different backup locations. You can specify a policy for a given filesystem in the\npyznap.conf file and then use cron to let it run regularly. pyznap includes zfs\nbindings for python, forked and modified from https://bitbucket.org/stevedrake/weir/.\n\n\n#### How does it work? ####\n\npyznap regularly takes and deletes snapshots according to a specified policy. You can take frequent,\nhourly, daily, weekly, monthly and yearly snapshots. 'frequent' snapshots can be taken up to once\nper minute, the frequency can be adjusted by the cronjob frequency. Old snapshots are deleted as\nyou take new ones, thinning out the history as it gets older.\n\nDatasets can also be replicated to other pools on the same system or remotely over ssh. After an\ninitial sync, backups will be done incrementally as long as there are common snapshots between the\nsource and the destination.\n\n\n#### Requirements ####\n\npyznap is written in python 3.5+ and has no dependencies. For developing and running the tests you\nneed:\n\n pytest\n pytest-dependency\n paramiko\n\nYou also need the `faketime` program for some tests to simulate pyznap running over time.\n\nI suggest installing [virtualenv & virtualenvwrapper](http://docs.python-guide.org/en/latest/dev/virtualenvs/),\nso you don't clutter your system python installation with additional packages.\n\npyznap uses `mbuffer` and `lzop` (by default) to speed up zfs send/recv, and `pv` to show progress, \nbut also works if they are not installed. Other supported compression methods are: `none`, `lz4`, \n`gzip`, `pigz`, `bzip2` and `xz`.\n\nNote that ZFS needs root access to run commands. Due to this you should install pyznap under your\nroot user.\n\n\n#### How do I set it up? ####\n\npyznap can easily be installed with pip. In your virtualenv just run\n\n pip install pyznap\n\nand pyznap & its requirements will be installed. This should also create an executable in your PATH,\neither at `/path/to/virtualenv/pyznap/bin/pyznap` or `/usr/local/bin/pyznap`. If you use your\nsystem python installation you might want to use the `--user` flag. In this case the executable will\nbe located at `~/.local/bin/pyznap`.\n\nBefore you can use pyznap, you will need to create a config file. For initial setup run\n\n pyznap setup [-p PATH]\n\nThis will create a directory `PATH` (default is `/etc/pyznap/`) and copy a sample config there. A\nconfig for your system might look like this (remove the comments):\n\n [rpool/filesystem]\n frequent = 4 # Keep 4 frequent snapshots\n hourly = 24 # Keep 24 hourly snapshots\n daily = 7 # Keep 7 daily snapshots\n weekly = 4 # Keep 4 weekly snapshots\n monthly = 6 # Keep 6 monthly snapshots\n yearly = 1 # Keep 1 yearly snapshot\n snap = yes # Take snapshots on this filesystem\n clean = yes # Delete old snapshots on this filesystem\n dest = backup/filesystem # Backup this filesystem on this location\n exclude = rpool/filesystem/data/* # Exclude these datasets for pyznap send\n\nThen set up a cronjob by creating a file under `/etc/cron.d/`\n\n nano /etc/cron.d/pyznap\n\nand let pyznap run regularly by adding the following lines\n\n SHELL=/bin/sh\n PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n\n */15 * * * * root /path/to/pyznap snap >> /var/log/pyznap.log 2>&1\n\nThis will run pyznap every quarter hour to take and delete snapshots. 'frequent' snapshots can be\ntaken up to once per minute, so adjust your cronjob accordingly.\n\nIf you also want to send your filesystems to another location you can add a line\n\n 0 0 * * * root /path/to/pyznap send >> /var/log/pyznap.log 2>&1\n\nThis will backup your data once per day at 12pm.\n\nYou can also manage, send to and pull from remote ssh locations. Always specify ssh locations with\n\n ssh:port:user@host:rpool/data\n\nIf you omit the port (`ssh::user@host:...`) the default `22` is assumed. A sample config which backs\nup a filesystem to a remote location looks like:\n\n [rpool/data]\n hourly = 24\n snap = yes\n clean = yes\n dest = ssh:22:user@host:backup/data # Specify ssh destination\n dest_keys = /home/user/.ssh/id_rsa # Provide key for ssh login. If none given, look in home dir\n compress = gzip # Use gzip compression for sending over ssh\n\nTo pull a filesystem from a remote location use:\n\n [ssh::user@host:rpool/data] # Specify ssh source\n key = /home/user/.ssh/id_rsa # Provide key for ssh login. If none given, look in home dir\n dest = tank/data\n compress = lz4\n\nYou can exclude datasets when sending using [Unix shell-style wildcards](https://docs.python.org/3/library/fnmatch.html):\n\n [rpool]\n dest = backup/rpool, tank/rpool\n exclude = rpool/data rpool/home/*/documents rpool/home/user1, rpool/home*\n\nNote that exclude rules are separated by a `,` for the different dests, and you can specify multiple\nrules for a single dest by separating them with a space. Exclude rules thus cannot contain any comma\nor whitespace.\n\nI would also suggest making sure that root has ownership for all files, s.t. no user can modify them.\nIf that is not the case just run\n\n chown root:root -R /etc/pyznap/\n\n\n#### Command line options ####\n\nRun `pyznap -h` to see all available options.\n\n+ --config\n\n Specify config file. Default is `/etc/pyznap/pyznap.conf`.\n\n+ -v, --versbose\n\n Print more verbose output.\n\n+ setup [-p PATH]\n\n Initial setup. Creates a config dir and puts a sample config file there. You can specify the path\n to the config dir with the `-p` flag, default is `/etc/pyznap/`.\n\n+ snap\n\n Interface to the snapshot management tool. Has three optional arguments:\n\n + --take\n\n Takes snapshots according to policy in the config file.\n\n + --clean\n\n Deletes old snapshots according to policy.\n\n + --full\n\n First takes snapshots, then deletes old ones. Default when no other option is given.\n\n+ send\n\n Interface to the zfs send/receive tool. Has two usages:\n\n + No further option is given\n\n Send snapshots to backup locations according to policy.\n\n + -s SOURCE -d DESTINATION [-c COMPRESSION] [-i KEYFILE] [-j SOURCE_KEY] [-k DEST_KEY] [-e EXCLUDE]\n\n Send source filesystem to destination filesystem. If either source OR dest is a remote location,\n you can specify the keyfile with the `-i` flag. If both source AND dest are remote, you specify\n the keyfiles with the flag `-j` for the source and `-k` for the dest. You can also turn on\n compression with the `-c` flag. Currently supported options are: `none`, `lzop`, `lz4`, `gzip`,\n `pigz`, `bzip2` and `xz`. If no option is given, `lzop` is used if available. You can specify\n multiple (whitespace separated) wildcard exclude rules with the `-e` flag. Note that you should\n probably pass these as strings or escape the wildcard (e.g. `-e '*/data'` or `-e \\*/data`), else\n your shell might expand the pattern.\n\n\n#### Usage examples ####\n\n+ Take snapshots according to policy in default config file:\n\n `pyznap snap --take`\n\n+ Clean snapshots according to policy in another config file:\n\n `pyznap --config /etc/pyznap/data.conf snap --clean`\n\n+ Take and clean snapshots according to policy in default config file:\n\n `pyznap snap`\n\n+ Backup snapshots according to policy in default config file:\n\n `pyznap send`\n\n+ Backup a single filesystem locally:\n\n `pyznap send -s tank/data -d backup/data`\n\n+ Send a single filesystem to a remote location, using `pigz` compression:\n\n `pyznap send -s tank/data -d ssh:20022:root@example.com:backup/data -i /root/.ssh/id_rsa -c pigz`\n\n+ Pull a single filesystem from a remote location:\n\n `pyznap send -s ssh::root@example.com:tank/data -d backup/data -c lz4`\n\n+ Pull a single filesystem from a remote location and send it to another remote location:\n\n `pyznap send -s ssh::root@example1.com:tank/data -d ssh::root@example2.com:backup/data -j /root/.ssh/id_rsa_1 -k /root/.ssh/id_rsa_2`\n\n+ Backup a single filesystem and exclude some datasets:\n\n `pyznap send -s tank -d backup/tank -e '/tank/data*' '/tank/home/user1*' '*/user2/docs'`\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/yboetz/pyznap", "keywords": "zfs snapshot backup", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "pyznap", "package_url": "https://pypi.org/project/pyznap/", "platform": "", "project_url": "https://pypi.org/project/pyznap/", "project_urls": { "Homepage": "https://github.com/yboetz/pyznap" }, "release_url": "https://pypi.org/project/pyznap/1.4.3/", "requires_dist": [ "pytest (==3.3.0) ; extra == 'dev'", "pytest-dependency (==0.2) ; extra == 'dev'", "pytest-runner ; extra == 'dev'", "paramiko (>=2.4.2) ; extra == 'dev'" ], "requires_python": ">=3.5", "summary": "ZFS snapshot tool written in Python", "version": "1.4.3" }, "last_serial": 5795602, "releases": { "0.9.0": [ { "comment_text": "", "digests": { "md5": "55389b4ea1786938569841456acccb19", "sha256": "8390c068067b4a91a56c3a2299acc8ec1f80d7014baac2cc1194e4d5cf023042" }, "downloads": -1, "filename": "pyznap-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "55389b4ea1786938569841456acccb19", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18647, "upload_time": "2018-08-08T07:54:36", "url": "https://files.pythonhosted.org/packages/5c/d8/d9a997ff6f6bb447c52969f2af616ba9ac16b098c1996e2c6d35ca92d8aa/pyznap-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a046908ab340ad0969bbf42500bc8da", "sha256": "5f3995fd419fab5c4bc70f2f3c12b3513af39840f843fd61440dd05c7bf6b0eb" }, "downloads": -1, "filename": "pyznap-0.9.0.tar.gz", "has_sig": false, "md5_digest": "7a046908ab340ad0969bbf42500bc8da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14247, "upload_time": "2018-08-08T07:54:38", "url": "https://files.pythonhosted.org/packages/5c/c6/32ea3a8f84d44eab69a827abb49a62cddac4ddca68f873649d30dba9da02/pyznap-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "78e63c776097a6aa35c5efe3068deaa5", "sha256": "e78425aa9a3d89e5e30561beb5b4381066e33d8081ff9044f8f579140643193d" }, "downloads": -1, "filename": "pyznap-0.9.1-py3-none-any.whl", "has_sig": false, "md5_digest": "78e63c776097a6aa35c5efe3068deaa5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18722, "upload_time": "2018-08-08T12:39:36", "url": "https://files.pythonhosted.org/packages/ae/16/a4da31b3e706099fadb218ef30ff5e76cbd368affac93c9fb445ef41ff47/pyznap-0.9.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e579aa14502beb1a57532ecac6ad6f5", "sha256": "e809275d7bf4aceea0298a49c8c13bd5b8e93fe90e2e9e8723dd23725ce8f13c" }, "downloads": -1, "filename": "pyznap-0.9.1.tar.gz", "has_sig": false, "md5_digest": "5e579aa14502beb1a57532ecac6ad6f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14374, "upload_time": "2018-08-08T12:39:38", "url": "https://files.pythonhosted.org/packages/37/60/b2a66bf6cabde1f2b342274f776fa0d1937b2ddf7c1b0648832b38aead09/pyznap-0.9.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "5f6b17b083ddf6c3e8733c16b3fc7125", "sha256": "3c0a6bc1da7089eaa239754bae41e125f4c37d803ba1e73e33a4aaa5f3dca355" }, "downloads": -1, "filename": "pyznap-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5f6b17b083ddf6c3e8733c16b3fc7125", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18911, "upload_time": "2018-08-10T15:38:51", "url": "https://files.pythonhosted.org/packages/36/39/1576f607bfd42247ddc4ca0bceadeb768838ef673ea7f223c55d580f9106/pyznap-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f4b03aaf7925af12fe6e8146741de5dd", "sha256": "9cfbc8de36c49a1170160b67a043b764a0413f9a2933f4a2094513bd47d5c7fb" }, "downloads": -1, "filename": "pyznap-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f4b03aaf7925af12fe6e8146741de5dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14554, "upload_time": "2018-08-10T15:38:56", "url": "https://files.pythonhosted.org/packages/4f/fc/caa4bbfddbf00edd1893a4ef7f514adbe7ea6914acf588634719e900376b/pyznap-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0f938ea2cb1b45c9d99ce7b1e4576efc", "sha256": "bbb7c50e6c4d9cbaea6f3f8deba984ac4c385a65c1261d05fb193aa620d4a021" }, "downloads": -1, "filename": "pyznap-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0f938ea2cb1b45c9d99ce7b1e4576efc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19615, "upload_time": "2018-08-13T21:13:41", "url": "https://files.pythonhosted.org/packages/b8/e5/b734672dd5ad29f7660b708d3d543ab36692435a80ec90eebe0e775bacb3/pyznap-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf622266fa02b1909cecc522958e65c5", "sha256": "712593d47fcacdc6b3e7e4fada768e5f0fd5543c1e41d9b6e950ad69a51bf22a" }, "downloads": -1, "filename": "pyznap-1.0.1.tar.gz", "has_sig": false, "md5_digest": "bf622266fa02b1909cecc522958e65c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15380, "upload_time": "2018-08-13T21:13:42", "url": "https://files.pythonhosted.org/packages/5e/cc/1edd71aa32a637f2997bc8b4a73fc2b92b3ac903978e558433414c4d138c/pyznap-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "826b250d9dff9a58a499c66fbe326396", "sha256": "fbf1c72c03cb0977ad2c1e587d678ca1f4c5b07f860406d48e1a6e4c9db4a6ef" }, "downloads": -1, "filename": "pyznap-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "826b250d9dff9a58a499c66fbe326396", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19870, "upload_time": "2018-08-15T19:12:06", "url": "https://files.pythonhosted.org/packages/a1/68/ddfe945dc8a92d9f82035620db7a37fd894c400581120e473f36ea4d498b/pyznap-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14042bb7cef12723cdd5b8f8c1bc5bcd", "sha256": "5edbe3d9acf430504efdf4bd726e18135d83889d18664a3f33b457262118f790" }, "downloads": -1, "filename": "pyznap-1.0.2.tar.gz", "has_sig": false, "md5_digest": "14042bb7cef12723cdd5b8f8c1bc5bcd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15656, "upload_time": "2018-08-15T19:12:08", "url": "https://files.pythonhosted.org/packages/99/ab/c52b7f544bd3e0f2f3fc4d7d52d45c4eef23763aa8b34af1e32c1bec52b9/pyznap-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "0686a4b971c37e6c16e7d2ed3c22ee63", "sha256": "a864565118ac72cb13316fb35cd9ea2688c0628a284bbff2f0aad1118ddfddee" }, "downloads": -1, "filename": "pyznap-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0686a4b971c37e6c16e7d2ed3c22ee63", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20127, "upload_time": "2018-10-15T09:14:07", "url": "https://files.pythonhosted.org/packages/27/f0/9a969e9fa8d46542344f1e7bbf47b2ccd9861efdc96e725a03cd05332fad/pyznap-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e82c4a3005246c1c65cc72cb47cf4bae", "sha256": "9d651a95c2ea7b1cac7fcf6e3a6dbf242d1e7da034b8a9536a271197c4ceaa97" }, "downloads": -1, "filename": "pyznap-1.1.0.tar.gz", "has_sig": false, "md5_digest": "e82c4a3005246c1c65cc72cb47cf4bae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15949, "upload_time": "2018-10-15T09:14:09", "url": "https://files.pythonhosted.org/packages/9c/ff/7ea2d6f5c7b39667f681b48adcadb9dbd8747862ed63c6ff83efdd15346e/pyznap-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "54bf863bb7a02365079a50d128b06533", "sha256": "81a755787ccdb77324e58c66d8f8289d96f9453571eca4089f9cfecf522d68d0" }, "downloads": -1, "filename": "pyznap-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "54bf863bb7a02365079a50d128b06533", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32717, "upload_time": "2018-11-17T14:11:23", "url": "https://files.pythonhosted.org/packages/73/49/0ac6d1beb2e24e148995bdbebc21d05296238ea5a48a44bba38183d5de00/pyznap-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65ccb0d268c6d325b3ee18563c1d93bf", "sha256": "4fcaefe9b2af511fee1e38bb48a5e9aca408a1142ca1b8fe6aac301022c220a4" }, "downloads": -1, "filename": "pyznap-1.1.1.tar.gz", "has_sig": false, "md5_digest": "65ccb0d268c6d325b3ee18563c1d93bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16011, "upload_time": "2018-11-17T14:11:25", "url": "https://files.pythonhosted.org/packages/ac/fb/311f488acf575a7094ea94ec99dc59d6bd6f40523bcbd3259f9d2f0d3d67/pyznap-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "78d49f373b1427ac6647e06f6c8222ba", "sha256": "941878a340744959c5d0a3ca71682d2f783207f11eefd84c13f6abeb1f272ddc" }, "downloads": -1, "filename": "pyznap-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "78d49f373b1427ac6647e06f6c8222ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20636, "upload_time": "2018-11-27T11:47:38", "url": "https://files.pythonhosted.org/packages/47/44/01a9cab60c20bc88633823065b4ee6c5bfe34f9d77a96dfddbbd42487171/pyznap-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0dad52082994cc29397a1a7483e5592", "sha256": "9ac0da5d7f6461d1d6f128362786e297144b415f9e3a2f1835642ab3dda82d55" }, "downloads": -1, "filename": "pyznap-1.1.2.tar.gz", "has_sig": false, "md5_digest": "f0dad52082994cc29397a1a7483e5592", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16407, "upload_time": "2018-11-27T11:47:40", "url": "https://files.pythonhosted.org/packages/4d/40/d1b37985c8d7c4f0af5a7092fe436b42f311386776d4d053a97cae2ae534/pyznap-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "c479483abec2bde0c9c0d200e4c08cdf", "sha256": "1060a78a4bc1404a927edff48fe900252a7c1b022de5b0231712f54027ff4092" }, "downloads": -1, "filename": "pyznap-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c479483abec2bde0c9c0d200e4c08cdf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32970, "upload_time": "2019-07-14T12:52:50", "url": "https://files.pythonhosted.org/packages/1f/0d/9109895393aa751eb4d2f9ab52160a98e17bae5c9f720ac687b7de23b796/pyznap-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "acbadb9d96098d968fa6bdc465c994dc", "sha256": "305f96021eb5594ac7bb313606ffb5ba6eeb09ced169ab4554a53730c32c0a2b" }, "downloads": -1, "filename": "pyznap-1.1.3.tar.gz", "has_sig": false, "md5_digest": "acbadb9d96098d968fa6bdc465c994dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18411, "upload_time": "2019-07-14T12:52:51", "url": "https://files.pythonhosted.org/packages/b3/32/49b8776037505d7291ece2cc1ef092007d987d56cf31d3915b6209e142ba/pyznap-1.1.3.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "7c4bb9aa6694496de3b09bc64fa5613c", "sha256": "fc974289cfa5396307244ffda5f2d6bf0e16ca8173a619c00dd7e1b641192498" }, "downloads": -1, "filename": "pyznap-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7c4bb9aa6694496de3b09bc64fa5613c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34618, "upload_time": "2019-07-14T20:38:18", "url": "https://files.pythonhosted.org/packages/e8/1b/e0b25e9a37b79f5c1dbd9e4175b2533b120df3cf609cf386406a5bb02700/pyznap-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "108fed85c6e17d7b30fdc8ef2326441c", "sha256": "7e727cfab3b3d4984fb981bfa1b2b27685288c913a8027ef3b816a7003bd849f" }, "downloads": -1, "filename": "pyznap-1.2.0.tar.gz", "has_sig": false, "md5_digest": "108fed85c6e17d7b30fdc8ef2326441c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19775, "upload_time": "2019-07-14T20:38:19", "url": "https://files.pythonhosted.org/packages/f2/c0/61fd072fe2d4f65b3b1a2fb489bf24b64adbd1d6847ed241e7f8028fc7c6/pyznap-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "2f7fb1f814b0e46b53730d987c14056f", "sha256": "e8f6840a4f39a3b474d1403484572a6f7dcb7cf9135b30924a14006a83ced70f" }, "downloads": -1, "filename": "pyznap-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2f7fb1f814b0e46b53730d987c14056f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 34595, "upload_time": "2019-07-15T13:04:55", "url": "https://files.pythonhosted.org/packages/1f/65/c5b5b17a4fcc0e25f63cd784eb84fc0c86a7d99104d5787d9d4933f4d462/pyznap-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51879fc160aa06224f25807a08668334", "sha256": "72731fedc424014b0f573233c30fc90ea951f3dc7f4670ca326ef6f6497ed65e" }, "downloads": -1, "filename": "pyznap-1.2.1.tar.gz", "has_sig": false, "md5_digest": "51879fc160aa06224f25807a08668334", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19125, "upload_time": "2019-07-15T13:04:57", "url": "https://files.pythonhosted.org/packages/0b/b5/42d3cfdcea7020aa9b4eb06d563bee0a8c192b596817a3d0af2747ca885e/pyznap-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "e7cd79024dd2a99bae4979068cca14a7", "sha256": "5d1aa835290a91414d1f4ff240d694cc4bdbc03dd4bbbca2963673f49d1c2dce" }, "downloads": -1, "filename": "pyznap-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e7cd79024dd2a99bae4979068cca14a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 36322, "upload_time": "2019-08-22T15:02:26", "url": "https://files.pythonhosted.org/packages/f9/0f/f17a77bb41b25cc2b589e27185fda6095befde67c83354a483e9e56f13a2/pyznap-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d47b6d53d69e998022829694893bb00", "sha256": "c07d78aa73853f23bbdda9e5fb8ed23570ace85cdf3787159d7fb6678aa0a0e2" }, "downloads": -1, "filename": "pyznap-1.3.0.tar.gz", "has_sig": false, "md5_digest": "3d47b6d53d69e998022829694893bb00", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 20878, "upload_time": "2019-08-22T15:02:28", "url": "https://files.pythonhosted.org/packages/fb/08/90145bc7ba4271c2485143a3ee8a8994d91c7e092adfae29aa81bf87ce7f/pyznap-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "00c467ab6025f14383ce5677d1818a05", "sha256": "8fbf3a5bb218ff5a1ada9e52e497042c917c1e7cafdf7512619e73f302627c24" }, "downloads": -1, "filename": "pyznap-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "00c467ab6025f14383ce5677d1818a05", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 36935, "upload_time": "2019-08-27T10:34:46", "url": "https://files.pythonhosted.org/packages/3a/db/051195e2a3856987836ae335f28b2e48df0fdbb7c3f8f2885dd51ba3244e/pyznap-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "47a5fab029326beb7015bf1c73c9ebca", "sha256": "e0315d3d33b90a869b273e737cdb1558021afb8091c5912ac19ae3cae66d9dbf" }, "downloads": -1, "filename": "pyznap-1.4.0.tar.gz", "has_sig": false, "md5_digest": "47a5fab029326beb7015bf1c73c9ebca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 19926, "upload_time": "2019-08-27T10:34:48", "url": "https://files.pythonhosted.org/packages/03/8f/9dde296211c44cf8df436ee25c87bf095ab5ebd5ec28afa0bfb90ad06bb1/pyznap-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "bb4d9be2092604633c47806fef730d94", "sha256": "d98c2a94493eaadb27ae943cc231fc89b0f8be99fa9b42bc79c578db8a761c6f" }, "downloads": -1, "filename": "pyznap-1.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "bb4d9be2092604633c47806fef730d94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37019, "upload_time": "2019-08-27T13:36:38", "url": "https://files.pythonhosted.org/packages/66/a4/c6a383c511c39113889f1464cf8b0a929b3d00069485faeb917ff623d903/pyznap-1.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "242fd128c994196409af62ef802dfb12", "sha256": "31e729c21be4e008417c6f13fddba2eeb8445b7913a7eced028f2266d3901530" }, "downloads": -1, "filename": "pyznap-1.4.1.tar.gz", "has_sig": false, "md5_digest": "242fd128c994196409af62ef802dfb12", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 23323, "upload_time": "2019-08-27T13:36:39", "url": "https://files.pythonhosted.org/packages/60/be/0a669281de9c60bee4f61753f611c8c635cbf9be67bfac08d7781577ef5e/pyznap-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "3d72008065b42cf7c01470147d709b65", "sha256": "02ca3c47737eab5224df3bd5fbdff37b7e10256f7a472799b41817ef0bc7cf0d" }, "downloads": -1, "filename": "pyznap-1.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3d72008065b42cf7c01470147d709b65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37342, "upload_time": "2019-08-30T12:58:12", "url": "https://files.pythonhosted.org/packages/22/e2/e78f6a8ba77c24419c3a7ba423114942423016f8e32e56258aa99c82cd8a/pyznap-1.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "68270d63f9d6a348cfb5fb8a8e53bb1b", "sha256": "09d863dbd88cae4b110c1703923ad8cf88b2bdf3aecc4dcfd4d6408fb1c14f5f" }, "downloads": -1, "filename": "pyznap-1.4.2.tar.gz", "has_sig": false, "md5_digest": "68270d63f9d6a348cfb5fb8a8e53bb1b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 22682, "upload_time": "2019-08-30T12:58:14", "url": "https://files.pythonhosted.org/packages/73/c0/acae3c601661bce15f2e53e92e3027df4f3f351a8c0221582a4118bd8d3b/pyznap-1.4.2.tar.gz" } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "4bae937fb9b3b4b600dd4ec8c359dcda", "sha256": "b8b5ac28375e6c55d626e37e3b093150860a622259e3d5bea159e2d35c022499" }, "downloads": -1, "filename": "pyznap-1.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4bae937fb9b3b4b600dd4ec8c359dcda", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37312, "upload_time": "2019-09-07T09:51:57", "url": "https://files.pythonhosted.org/packages/12/21/1477651236c416cb5872f46bece66905717db7c20c75c22a50241d4c01f2/pyznap-1.4.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4859f8b2e54021bf2aa958538fafd486", "sha256": "28be03b91ed46600bdb94010d97f59fb3b7e4202bb0ec19d74ace059b3e1b703" }, "downloads": -1, "filename": "pyznap-1.4.3.tar.gz", "has_sig": false, "md5_digest": "4859f8b2e54021bf2aa958538fafd486", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 20446, "upload_time": "2019-09-07T09:51:59", "url": "https://files.pythonhosted.org/packages/5e/58/4c8c075bbda24b6cc1546bea31eef83c705391083ffcd052a06b94c44d36/pyznap-1.4.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4bae937fb9b3b4b600dd4ec8c359dcda", "sha256": "b8b5ac28375e6c55d626e37e3b093150860a622259e3d5bea159e2d35c022499" }, "downloads": -1, "filename": "pyznap-1.4.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4bae937fb9b3b4b600dd4ec8c359dcda", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 37312, "upload_time": "2019-09-07T09:51:57", "url": "https://files.pythonhosted.org/packages/12/21/1477651236c416cb5872f46bece66905717db7c20c75c22a50241d4c01f2/pyznap-1.4.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4859f8b2e54021bf2aa958538fafd486", "sha256": "28be03b91ed46600bdb94010d97f59fb3b7e4202bb0ec19d74ace059b3e1b703" }, "downloads": -1, "filename": "pyznap-1.4.3.tar.gz", "has_sig": false, "md5_digest": "4859f8b2e54021bf2aa958538fafd486", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 20446, "upload_time": "2019-09-07T09:51:59", "url": "https://files.pythonhosted.org/packages/5e/58/4c8c075bbda24b6cc1546bea31eef83c705391083ffcd052a06b94c44d36/pyznap-1.4.3.tar.gz" } ] }