{ "info": { "author": "Stephen Rosen", "author_email": "sirosen@uchicago.edu", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": ".. image:: https://travis-ci.org/sirosen/SALVE.svg?branch=stable\n :alt: Build Status\n :target: https://travis-ci.org/sirosen/SALVE\n.. image:: https://coveralls.io/repos/sirosen/SALVE/badge.png?branch=stable\n :alt: Coverage Status\n :target: https://coveralls.io/r/sirosen/SALVE?branch=stable\n.. image:: https://badge.fury.io/py/salve.svg\n :alt: PyPi Version\n :target: https://badge.fury.io/py/salve\n.. image:: https://codeclimate.com/github/sirosen/SALVE/badges/gpa.svg\n :alt: Code Climate\n :target: https://codeclimate.com/github/sirosen/SALVE\n\nSALVE\n=====\n\nSALVE takes files and directories in a git repository, and handles the messy\nprocess of deploying those files onto a machine.\n\nMore information is available at the `SALVE Website `_.\n\nHow do I use it?\n================\n\nSALVE is a language, but also a compiler and runtime for that language.\nYou write \"manifests\" which describe where your files are meant to go, and\nSALVE will do the rest.\nThe language is small and simple enough that you can learn all of the important\nparts in a few minutes, and answer any remaining questions in under half an\nhour.\n\nTo start writing manifests, you can go to the `Quick-Start Guide `_.\nFor a more detailed description of the SALVE language, the `Language Page `_ and the `Examples Page `_ are good resources.\n\nOnce you have a manifest you want to run, simply do ``salve deploy`` with it.\nIf you have installed the pip package, you can run\n\n salve deploy --manifest path/to/root.manifest\n\nor, if you are using the git repo as your source\n\n python SALVE/salve.py deploy --manifest path/to/root.manifest\n\nSince ``deploy`` is the default action, you could also run\n\n salve -m path/to/root.manifest\n\nWhat do I need to run it?\n=========================\n\nSALVE is fully compatible with Python 2.6, 2.7, 3.2, 3.3, 3.4, and 3.5.\nIt also works on pypy and pypy3.\n\nIt has no dependencies on other python packages, so as long as you have one of\nthese versions of Python installed, you can run SALVE.\n\nPython 2.6 Support\n------------------\n\nPython 2.6 is supported, but because OptParse is deprecated in Python 3.x,\nSALVE depends upon ``argparse``.\n\nTo run SALVE with Python 2.6, you will need to install the ``argparse``\npackage, or do a ``pip`` or ``easy_install`` of ``salve`` to pull in the\ndependency automatically.\n\nRoadmap\n=======\n\nThe Roadmap has been replaced with\n`GitHub issues `_.\n\n\n\nChangelog\n=========\n * 2.4.2\n * Fix a bug with setting the log level\n * Make the ``deploy`` subcommand the default when no subcommand is given\n * 2.4.1\n * SALVE now uses the python standard library for logging, rather than\n custom logging\n * Entire codebase (including tests) is now PEP8 and passes ``flake8``\n * Significant refactoring to improve Code Climate scoring\n * 2.4.0\n * Paths can be expanded relative to the manifest being processed, rather than\n relative to the root manifest (this will become the default in version 3)\n * 2.3.1\n * Fixes to setuptools usage\n * Change markdown documents to reST\n * 2.3.0\n * Support for Python 2.6 (with argparse installed)\n * Primary Attribute style blocks\n * Filesys abstraction layer\n * Removed ``SALVE_ROOT`` automatic variable\n * Relocated ``default_settings.ini`` to ``salve/default_settings.ini``\n * Default directory (without override) is directory of root manifest\n * 2.2.0\n * Travis and Coveralls integration\n * Improved internal logging and context handling\n * Support for Python 3\n * 2.1.0\n * Numerous log levels and output controls\n * Default attributes, which behave like the old 1.x version ``common`` attributes\n * Increased the context information produced when errors are raised\n * Regained code coverage in tests\n * Made the codebase PEP8 compliant (as per ``pep8`` v1.2)\n * 2.0.0\n * Backups are now stored in a flat dir by hash, resolving some dir/file conflict issues\n * Change to backup logfile timestamp format, more human readable\n * Old ``python salve.py`` usage is now ``python salve.py deploy``, and added stub ``python salve.py backup``\n * Switched to argparse -- now incompatible with python 2.6.x without libraries\n * ``common`` block attributes are now ``global``, and have precedence over block-defined attributes\n * Action verification checks and warnings on failures and skips\n * 1.1.0\n * Large expansions to the testsuite\n * No SALVE actions are performed through the shell anymore\n * Permissions are now checked before actions are executed so that insufficient permissions will not crash the entire run\n * Error messages now take the common ``[filename], line [lineno]: [message]`` format\n * 1.0.3\n * Fixes major bug with dir copy not triggering file backups\n * Internal refactoring and cleanup in Blocks and Actions\n * 1.0.2\n * Fewer actions rely on shell commands and use ``shutil`` instead\n * Underspecifying an action no longer causes a failure for chown and chmod, but skips these actions instead\n * File create now does a ``touch -a`` instead of a ``touch``, so that access time is changed instead of modified time\n * 1.0.1\n * Removed aggressive backups behavior that backed up directories and files on creation\n * Improved error reporting at levels of execution above the parser\n * 1.0.0\n * Addition of backups for overwritten files\n * Addition of ``SALVE_USER_PRIMARY_GROUP`` variable\n * Completed test coverage\n * beta 0.1.0\n * Addition of directory blocks\n * alpha 0.0.2\n * Expansion of relative paths\n * Fixes for configuration templating in blocks\n * Checks EUID before attempting chown\n * alpha 0.0.1\n * Basic functionality for file blocks and manifest blocks", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://salve.sirosen.net/", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "salve", "package_url": "https://pypi.org/project/salve/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/salve/", "project_urls": { "Homepage": "http://salve.sirosen.net/" }, "release_url": "https://pypi.org/project/salve/2.4.2/", "requires_dist": null, "requires_python": "", "summary": "SALVE Configuration Deployment Language", "version": "2.4.2" }, "last_serial": 1816635, "releases": { "2.3.0": [ { "comment_text": "", "digests": { "md5": "65773988b76fc4bb0ac6f1e385a0a390", "sha256": "81dfe020869033ec9cc18dbe07490e8fc6be45757ea0553a47c2d3760ebad1a2" }, "downloads": -1, "filename": "salve-2.3.0-py2.7.egg", "has_sig": false, "md5_digest": "65773988b76fc4bb0ac6f1e385a0a390", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 100685, "upload_time": "2014-08-25T02:32:21", "url": "https://files.pythonhosted.org/packages/00/77/12d9b7211815b048526ba26515be45e1bfd00ba7e3f916002f51cc2a85b2/salve-2.3.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "053c5bcda2efe5cf49eab917e81e0441", "sha256": "212dfe0ff5fcaae0456deddb45ab951fa23b9ba26ad88abca1389f06e711ca85" }, "downloads": -1, "filename": "salve-2.3.0.tar.gz", "has_sig": false, "md5_digest": "053c5bcda2efe5cf49eab917e81e0441", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63525, "upload_time": "2014-08-25T02:32:24", "url": "https://files.pythonhosted.org/packages/42/d6/8e2c3e13424a9e75cde80d4d4ff80714e346c4f0042af703b24f3d16477a/salve-2.3.0.tar.gz" } ], "2.3.0.dev": [ { "comment_text": "", "digests": { "md5": "634d41dc4d4ddbaec5cf10539bd61d06", "sha256": "65d6818cc3a71c9db95a27786ac1b28f4eeb4a1ba56b6e62364b29512ddd0c3c" }, "downloads": -1, "filename": "salve-2.3.0.dev-py2.7.egg", "has_sig": false, "md5_digest": "634d41dc4d4ddbaec5cf10539bd61d06", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 102596, "upload_time": "2014-08-23T22:14:22", "url": "https://files.pythonhosted.org/packages/f6/1b/71109a17dcd3a4036d1f50820e3f1e2a98477befc08efd92194e83569393/salve-2.3.0.dev-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "f70648801cc57a9f8f91692e5f925e30", "sha256": "aab90c6edddc51208ae8238c7b7c57ca7a9d8bb6fc784424a25993bd2a603ae5" }, "downloads": -1, "filename": "salve-2.3.0.dev.tar.gz", "has_sig": false, "md5_digest": "f70648801cc57a9f8f91692e5f925e30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64430, "upload_time": "2014-08-23T22:14:24", "url": "https://files.pythonhosted.org/packages/37/d5/8f64f877ceeb446b236991138d82e6e695cee9081d87f65c7bf9ddf47626/salve-2.3.0.dev.tar.gz" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "6d759f705696fc0859e6c8ff7132d805", "sha256": "b2c4fa94984bba925f4d1d69dab5dc0bdb7dfc6e059516de927a718d5f70e3f1" }, "downloads": -1, "filename": "salve-2.3.1-py2.7.egg", "has_sig": false, "md5_digest": "6d759f705696fc0859e6c8ff7132d805", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 100888, "upload_time": "2014-08-29T01:46:42", "url": "https://files.pythonhosted.org/packages/32/9e/4ef9bf2d240306916debef1e4a3719ee53a50b572b3413517b6f3fe25375/salve-2.3.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "35e8d604e2e5d6b0dd033b0329b56a84", "sha256": "a0e530b1c4c8e4b53c65c86b76e63bbc6a6441698b8e47e81ae102fa88bd8a1d" }, "downloads": -1, "filename": "salve-2.3.1.tar.gz", "has_sig": false, "md5_digest": "35e8d604e2e5d6b0dd033b0329b56a84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64245, "upload_time": "2014-08-29T01:46:45", "url": "https://files.pythonhosted.org/packages/d6/04/85ffc7d957c915892178fa5d3a486d5683c8e0150f746cb3544b7013e837/salve-2.3.1.tar.gz" } ], "2.4.1": [ { "comment_text": "", "digests": { "md5": "ab7cf85d246bfbceaf86fbd461091c54", "sha256": "dcbf130274273986ec0dc5e82b2c25241e6407daf3185ca6243fc7f47cdffd27" }, "downloads": -1, "filename": "salve-2.4.1-py2.7.egg", "has_sig": false, "md5_digest": "ab7cf85d246bfbceaf86fbd461091c54", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 257295, "upload_time": "2015-10-25T06:30:30", "url": "https://files.pythonhosted.org/packages/45/1d/f93257f29ae0ec51318f20fc6e6c2986b08e9610131a6374189efbfbc645/salve-2.4.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "c2a130390abb91f9f9b5c74ddc777393", "sha256": "1694bac2bcc64e1322e6eeffb6b4da48e7c84e273b008fcef6a95778f15bf1d3" }, "downloads": -1, "filename": "salve-2.4.1.tar.gz", "has_sig": false, "md5_digest": "c2a130390abb91f9f9b5c74ddc777393", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71095, "upload_time": "2015-10-25T06:30:33", "url": "https://files.pythonhosted.org/packages/88/4b/7474468adec38dd9c605ac9e86da524b2c6ad23fc662347cfa5ff9e8a97d/salve-2.4.1.tar.gz" } ], "2.4.2": [ { "comment_text": "", "digests": { "md5": "d666753644da0000ffeb7ad66e167414", "sha256": "82d8124ac3e1a88e0d8f46175b08b27af7bf18d810c4ae1bb9f4f4307b0174de" }, "downloads": -1, "filename": "salve-2.4.2-py2.7.egg", "has_sig": false, "md5_digest": "d666753644da0000ffeb7ad66e167414", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 260409, "upload_time": "2015-11-14T21:30:06", "url": "https://files.pythonhosted.org/packages/ae/cb/96c4a02305b5689ae24ae231399aa7b5601ac7e245d57be72b07a7af9ba4/salve-2.4.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "843cee6a41cd53a382dae2df95a1e477", "sha256": "cc19145b1b807675d6632eec786c5ead74d3cff7a4f7d0489eb2cf5a23360acb" }, "downloads": -1, "filename": "salve-2.4.2.tar.gz", "has_sig": false, "md5_digest": "843cee6a41cd53a382dae2df95a1e477", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71672, "upload_time": "2015-11-14T21:30:19", "url": "https://files.pythonhosted.org/packages/a8/87/da3fb2dfc8260ca6fcae82e6ebc9713fe26d1a69cdade2595180f14b5c1e/salve-2.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d666753644da0000ffeb7ad66e167414", "sha256": "82d8124ac3e1a88e0d8f46175b08b27af7bf18d810c4ae1bb9f4f4307b0174de" }, "downloads": -1, "filename": "salve-2.4.2-py2.7.egg", "has_sig": false, "md5_digest": "d666753644da0000ffeb7ad66e167414", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 260409, "upload_time": "2015-11-14T21:30:06", "url": "https://files.pythonhosted.org/packages/ae/cb/96c4a02305b5689ae24ae231399aa7b5601ac7e245d57be72b07a7af9ba4/salve-2.4.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "843cee6a41cd53a382dae2df95a1e477", "sha256": "cc19145b1b807675d6632eec786c5ead74d3cff7a4f7d0489eb2cf5a23360acb" }, "downloads": -1, "filename": "salve-2.4.2.tar.gz", "has_sig": false, "md5_digest": "843cee6a41cd53a382dae2df95a1e477", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71672, "upload_time": "2015-11-14T21:30:19", "url": "https://files.pythonhosted.org/packages/a8/87/da3fb2dfc8260ca6fcae82e6ebc9713fe26d1a69cdade2595180f14b5c1e/salve-2.4.2.tar.gz" } ] }