{ "info": { "author": "Dmitry Dygalo", "author_email": "dadygalo@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython" ], "description": "XDump\n=====\n\n.. image:: https://travis-ci.org/Stranger6667/xdump.svg?branch=master\n :target: https://travis-ci.org/Stranger6667/xdump\n :alt: Build Status\n\n.. image:: https://codecov.io/github/Stranger6667/xdump/coverage.svg?branch=master\n :target: https://codecov.io/github/Stranger6667/xdump?branch=master\n :alt: Coverage Status\n\n.. image:: https://readthedocs.org/projects/xdump/badge/?version=stable\n :target: http://xdump.readthedocs.io/en/stable/?badge=stable\n :alt: Documentation Status\n\n.. image:: https://img.shields.io/pypi/v/xdump.svg\n :target: https://pypi.python.org/pypi/xdump\n :alt: Latest PyPI version\n\nXDump is a utility to make a consistent partial dump and load it into the database.\n\nThe idea is to provide an ability to specify what to include in the dump via SQL queries.\n\nInstallation\n============\n\nXDump can be obtained with ``pip``::\n\n $ pip install xdump\n\nUsage example\n=============\n\nMake a dump (on production replica for example):\n\n.. code-block:: python\n\n >>> from xdump.postgresql import PostgreSQLBackend\n >>>\n >>> backend = PostgreSQLBackend(dbname='app_db', user='prod', password='pass', host='127.0.0.1', port='5432')\n >>> backend.dump(\n '/path/to/dump.zip',\n full_tables=['groups'],\n partial_tables={'employees': 'SELECT * FROM employees ORDER BY id DESC LIMIT 2'}\n )\n\nLoad a dump on your local machine:\n\n.. code-block:: python\n\n >>> backend = PostgreSQLBackend(dbname='app_db', user='local', password='pass', host='127.0.0.1', port='5432')\n # If you need a clear DB\n >>> backend.recreate_database() # or `backend.truncate()`\n >>> backend.load('/path/to/dump.zip')\n\n\nDump is compressed by default. Compression level could be changed with passing ``compression`` argument to ``dump`` method.\nValid options are ``zipfile.ZIP_STORED``, ``zipfile.ZIP_DEFLATED``, ``zipfile.ZIP_BZIP2`` and ``zipfile.ZIP_LZMA``.\n\nThe verbosity of the output could be customized via ``verbosity`` (with values 0, 1 or 2) argument of a backend class.\n\nThere are two options to control the content of the dump:\n\n- ``dump_schema`` - controls if the schema should be included\n- ``dump_data`` - controls if the data should be included\n\nAutomatic selection of related objects\n++++++++++++++++++++++++++++++++++++++\n\nYou don't have to specify all queries for related objects - XDump will load them for you automatically. It covers\nboth, recursive and non-recursive relations.\nFor example, if the ``employees`` table has foreign keys ``group_id`` (to ``groups`` table) and ``manager_id``\n(to ``employees`` table) the resulting dump will have all objects related to selected employees\n(as well as for objects related to related objects, recursively).\n\nCommand Line Interface\n======================\n\n``xload`` provides an ability to create a dump.\n\nSignature:\n\n.. code-block:: bash\n\n xdump [postgres|sqlite] [OPTIONS]\n\nCommon options::\n\n -o, --output TEXT output file name [required]\n -f, --full TEXT table name to be fully dumped. Could be used\n multiple times\n -p, --partial TEXT partial tables specification in a form\n \"table_name:select SQL\". Could be used\n multiple times\n -c, --compression [deflated|stored|bzip2|lzma]\n dump compression level\n --schema / --no-schema include / exclude the schema from the dump\n --data / --no-data include / exclude the data from the dump\n -D, --dbname TEXT database to work with [required]\n -v, --verbosity verbosity level\n\nPostgreSQL-specific options::\n\n -U, --user TEXT connect as specified database user\n [required]\n -W, --password TEXT password for the DB connection\n -H, --host TEXT database server host or socket directory\n -P, --port TEXT database server port number\n\n``xload`` loads a dump into a database.\n\nSignature:\n\n\n.. code-block:: bash\n\n xload [postgres|sqlite] [OPTIONS]\n\nCommon options::\n\n -i, --input TEXT input file name [required]\n -m, --cleanup-method [recreate|truncate]\n method of DB cleaning up\n -D, --dbname TEXT database to work with [required]\n -v, --verbosity verbosity level\n\nPostgreSQL-specific options are the same as for ``xdump``.\n\nRDBMS support\n=============\n\nAt the moment only the following are supported:\n\n- PostgreSQL\n- SQLite >= 3.8.3\n\nDjango support\n==============\n\nAdd ``xdump.extra.django`` to your ``INSTALLED_APPS`` settings:\n\n.. code-block:: python\n\n INSTALLED_APPS = [\n ...,\n 'xdump.extra.django',\n ]\n\nAdd ``XDUMP`` to your project settings file. It should contain minimum two entries:\n\n- FULL_TABLES - a list of tables that should be fully dumped.\n- PARTIAL_TABLES - a dictionary with ``table_name``: ``select SQL``\n\n.. code-block:: python\n\n XDUMP = {\n 'FULL_TABLES': ['groups'],\n 'PARTIAL_TABLES': {'employees': 'SELECT * FROM employees WHERE id > 100'}\n }\n\n\nOptionally you could use a custom backend:\n\n.. code-block:: python\n\n XDUMP = {\n ...,\n 'BACKEND': 'importable.string',\n }\n\n\nRun ``xdump`` command::\n\n $ ./manage.py xdump dump.zip\n\n\nRun ``xload`` command::\n\n $ ./manage.py xload dump.zip\n\nPossible options to both commands:\n\n- ``-a/--alias`` - allows you to choose database config from ``DATABASES``, that is used during the execution;\n- ``-b/--backend`` - importable string, that leads to custom dump backend class.\n\nOptions for ``xdump`` command:\n\n- ``-s/--dump-schema`` - controls if the schema should be included;\n- ``-d/--dump-data`` - controls if the data should be included.\n\nOptions for ``xload`` command:\n\n- ``-m/--cleanup-method`` - optionally re-creates DB or truncates the data.\n\n**NOTE**. If the dump has no schema inside, DB won't be re-created.\n\nThe following ``make`` command could be useful to get a configured dump from production to your local machine:\n\n.. code-block:: bash\n\n sync-production:\n ssh -t $(TARGET) \"DJANGO_SETTINGS_MODULE=settings.production /path/to/manage.py xdump /tmp/dump.zip\"\n scp $(TARGET):/tmp/dump.zip ./dump.zip\n ssh -t $(TARGET) \"rm /tmp/dump.zip\"\n DJANGO_SETTINGS_MODULE=settings.local $(PYTHON) manage.py xload ./dump.zip\n\nAnd the usage is:\n\n.. code-block:: bash\n\n $ make sync-production TARGET=john@production.com PYTHON=/path/to/python/in/venv\n\nPython support\n==============\n\nXDump supports Python 2.7, 3.4 - 3.7 and PyPy 2 & 3.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Stranger6667/xdump", "keywords": "database,dump,postgresql", "license": "MIT", "maintainer": "Dmitry Dygalo", "maintainer_email": "dadygalo@gmail.com", "name": "xdump", "package_url": "https://pypi.org/project/xdump/", "platform": "", "project_url": "https://pypi.org/project/xdump/", "project_urls": { "Homepage": "https://github.com/Stranger6667/xdump" }, "release_url": "https://pypi.org/project/xdump/0.6.0/", "requires_dist": [ "attrs (<19)", "psycopg2 (<2.8)", "click (<7)", "django (>=1.11); extra == 'django'" ], "requires_python": "", "summary": "Consistent partial database dump utility", "version": "0.6.0" }, "last_serial": 4159662, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c3df922868f4201772a02451f26023e9", "sha256": "f6a22cd638fcb516c503128fb657ae5321585264464ce0baf01db42d68deafc4" }, "downloads": -1, "filename": "xdump-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c3df922868f4201772a02451f26023e9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8462, "upload_time": "2018-01-03T13:10:11", "url": "https://files.pythonhosted.org/packages/8e/2f/cf06a50526930651d90d9e6dc349ebf6198a1cf3a3aea8aa70cbaaba09bc/xdump-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2238218cac469cf068d67c1e2d47f299", "sha256": "663ea006d4354d53f8c63174d4cd0de1e6c94b061725bdce9777fbfc8305785e" }, "downloads": -1, "filename": "xdump-0.0.1.tar.gz", "has_sig": false, "md5_digest": "2238218cac469cf068d67c1e2d47f299", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5667, "upload_time": "2018-01-03T13:10:13", "url": "https://files.pythonhosted.org/packages/5d/6d/69b715603f43eb536b4edc63b1beed87f4208a33155c68049f8db09d5f3e/xdump-0.0.1.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "2e6943f3a4d26e4ab76855183600307a", "sha256": "54424ed1d273d53997d659b382921ba24f28d14594bf7f60323c585fc097e2cc" }, "downloads": -1, "filename": "xdump-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2e6943f3a4d26e4ab76855183600307a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12934, "upload_time": "2018-01-03T16:33:21", "url": "https://files.pythonhosted.org/packages/3f/8f/80e58728f93e9c2028b44162d948d939397b64b52b001f2f694a35b575f0/xdump-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d70a870337652b696fc29572b3ffa3e", "sha256": "b44c588fb9d997402ddf46ed7744035e3826008dd6514590d8d8a751c480fb4e" }, "downloads": -1, "filename": "xdump-0.1.tar.gz", "has_sig": false, "md5_digest": "1d70a870337652b696fc29572b3ffa3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9889, "upload_time": "2018-01-03T16:33:23", "url": "https://files.pythonhosted.org/packages/d4/51/db930feaf9c20aa0312aa752e01fae94dbd613ddc13d6591a54fc8e4fba7/xdump-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7e87864b7fbaf2972e568bfa55e458ea", "sha256": "7ea0c1fe89abf40f0e4321f2747d4b60e4b92d0471261baba57e75a16c008153" }, "downloads": -1, "filename": "xdump-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e87864b7fbaf2972e568bfa55e458ea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11793, "upload_time": "2018-01-03T16:37:20", "url": "https://files.pythonhosted.org/packages/8d/7c/face34ab11f13a49bb316e6eebb6f490496cf1166e44db53194af380b4a9/xdump-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4085e3c15d12599c96ed493431f4a0ab", "sha256": "21314b61616aa999928e3c587d36225418cb3c732ebb439ebccc9c9fc52baee9" }, "downloads": -1, "filename": "xdump-0.1.1.tar.gz", "has_sig": false, "md5_digest": "4085e3c15d12599c96ed493431f4a0ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9204, "upload_time": "2018-01-03T16:37:21", "url": "https://files.pythonhosted.org/packages/63/5b/0da2b751f9db7e5246b79eecb8c046a5d4018f64af5a9b32cd4e43d052dd/xdump-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "3dfa64dcc51dd2ed5e58ba344924c03c", "sha256": "709398a53a18f3dd51cd1ef1efa0d54aa96a6129ec8b9f23c7c7e841cbff2d9e" }, "downloads": -1, "filename": "xdump-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3dfa64dcc51dd2ed5e58ba344924c03c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11748, "upload_time": "2018-01-03T17:52:00", "url": "https://files.pythonhosted.org/packages/e1/bd/402e68563ffce8eeb8fa439a655de59000d8aff9cc3d23e589606c41ba7e/xdump-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "706ffccd5c560288f6b22510ed4c6580", "sha256": "6c2932a392c39896a7bb0cddc1965d3b45ff5f14d9a07a85e4fbf2fcf424c56e" }, "downloads": -1, "filename": "xdump-0.1.2.tar.gz", "has_sig": false, "md5_digest": "706ffccd5c560288f6b22510ed4c6580", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9193, "upload_time": "2018-01-03T17:52:04", "url": "https://files.pythonhosted.org/packages/88/97/1658a0257dac58cacd293486f05d9aa60e50e1e582015f668607d205499e/xdump-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "00c9c8d39fa795dcb41161662cee511f", "sha256": "31f66a8bf39adba822de714d3f9d36c4150ac8838744e6b716b3c6587509b3fe" }, "downloads": -1, "filename": "xdump-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00c9c8d39fa795dcb41161662cee511f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13027, "upload_time": "2018-01-07T21:21:52", "url": "https://files.pythonhosted.org/packages/ac/67/df1b74ad6c548cbcfaadc51f91d3754fa1ea4b18ab9aedf638853f181db6/xdump-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "573863688968e3627874614f022a2568", "sha256": "037a1be9eda81780d3ef980e29e5f80b0874e84fe7dfc7b5ce12960ab124c525" }, "downloads": -1, "filename": "xdump-0.2.0.tar.gz", "has_sig": false, "md5_digest": "573863688968e3627874614f022a2568", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10011, "upload_time": "2018-01-07T21:21:54", "url": "https://files.pythonhosted.org/packages/d5/56/222b1d38a7993af5e5a67d45a3edaf81aab036c77d78055679c66f3f17a7/xdump-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "7615a19b3e96e0fcca1e2e87f308c252", "sha256": "7741356056a73ab863d73e1fbc29a75c2186535b7d39e7fda2c481b5ebea02a3" }, "downloads": -1, "filename": "xdump-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7615a19b3e96e0fcca1e2e87f308c252", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14610, "upload_time": "2018-03-13T14:23:11", "url": "https://files.pythonhosted.org/packages/90/93/dd97ae9978d9ca5c9255cb8dfe12778c16eea1230c9b4eb7a7b1876c3a77/xdump-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7667c64567c9410ee70c7ff0e32ce75b", "sha256": "6084f5e25f060690aaab92fdf968a960e3d05f90f1570f6fc7fab6fd9b593132" }, "downloads": -1, "filename": "xdump-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7667c64567c9410ee70c7ff0e32ce75b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11433, "upload_time": "2018-03-13T14:23:14", "url": "https://files.pythonhosted.org/packages/b7/d6/0fa3baf49893c0b68f6844ba1430f425f7e3b1b2941b96ef262a99b70208/xdump-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "bc8391e2e871d59e28c88c5703874598", "sha256": "94056969635ffa875ac0e069f5a69eaa6a1690dd43c27286a51f57e7d8bf48fe" }, "downloads": -1, "filename": "xdump-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bc8391e2e871d59e28c88c5703874598", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12166, "upload_time": "2018-06-19T13:50:36", "url": "https://files.pythonhosted.org/packages/55/bf/01fbccbc6d550cbda28b785376af8b07f6845ab1fb6f944aa04f0c2e7a94/xdump-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e0d4113b18c4059806520d593154c3f", "sha256": "9f053d8315068e2bcac6e8d4fe3d27f89d3e993f10adf054803eadd1f0156c5f" }, "downloads": -1, "filename": "xdump-0.3.1.tar.gz", "has_sig": false, "md5_digest": "6e0d4113b18c4059806520d593154c3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11538, "upload_time": "2018-06-19T13:50:38", "url": "https://files.pythonhosted.org/packages/31/0d/0f9b5f26ff9dc642fccc246bed90a405f382713f541536c4cff8b784db37/xdump-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "863085d0dc7c979bb4999839a5f36d44", "sha256": "26d9da026a7b8ce8a2aa972ef0a6a08b908191f8abe7b5bddd90dac547b06b03" }, "downloads": -1, "filename": "xdump-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "863085d0dc7c979bb4999839a5f36d44", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13847, "upload_time": "2018-07-23T15:42:24", "url": "https://files.pythonhosted.org/packages/86/76/1eaf875c3b01951a7c06dceb4f5962b11b850345b78104ea323cdf4a6827/xdump-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c4f8dd1d7f2a0751ae716edd61cdea4", "sha256": "07dcf245fe33b5efe822ba3840bf31b1d4c03b72ec2e81d1c44f7c32188271df" }, "downloads": -1, "filename": "xdump-0.4.0.tar.gz", "has_sig": false, "md5_digest": "3c4f8dd1d7f2a0751ae716edd61cdea4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13209, "upload_time": "2018-07-23T15:42:25", "url": "https://files.pythonhosted.org/packages/f1/c6/6917e71e57ad3e030277b7bbdf7167925f518dfc82c9d07d950d1634b66b/xdump-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "b8f9b56ee0831ef7939bb286e2eac162", "sha256": "9ef4e4e8088656811db45bc1752af65d7571901aa428bd5c5384109020d32c8e" }, "downloads": -1, "filename": "xdump-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b8f9b56ee0831ef7939bb286e2eac162", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14561, "upload_time": "2018-08-02T11:06:44", "url": "https://files.pythonhosted.org/packages/cb/8b/b3a88a73266027769a6fbac11852d184a8928e06929ea374a423195cfa52/xdump-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d634658bab371e9e15bcabb890cb6db5", "sha256": "cc4ae9992b41883148629c24fa23c6199e9c8a9d3744b5a4c9aae472136e1594" }, "downloads": -1, "filename": "xdump-0.5.0.tar.gz", "has_sig": false, "md5_digest": "d634658bab371e9e15bcabb890cb6db5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13620, "upload_time": "2018-08-02T11:06:46", "url": "https://files.pythonhosted.org/packages/8a/b6/ee6e255fb0f4efcae56f5c1e24fa66e00bea0d90457cf9a9a70b360c7d7f/xdump-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "39ffd77a2451f732900f5eefecd579a1", "sha256": "60d0c98084e8b98bb9159bdae01171b3ab246d8f74f6e0ae1925b1ef59603dab" }, "downloads": -1, "filename": "xdump-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39ffd77a2451f732900f5eefecd579a1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19173, "upload_time": "2018-08-11T13:18:44", "url": "https://files.pythonhosted.org/packages/46/bc/86d43a197c2948e2c10749bd7ff8fd213a97baf2bad37bffc351b8ec79d8/xdump-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07e3588fe061ca52fbc2c9c84307230a", "sha256": "059729a4d18ea358aee262bcb537b59411606faed40a6eba43b7362cd9c7654b" }, "downloads": -1, "filename": "xdump-0.6.0.tar.gz", "has_sig": false, "md5_digest": "07e3588fe061ca52fbc2c9c84307230a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17139, "upload_time": "2018-08-11T13:18:46", "url": "https://files.pythonhosted.org/packages/46/25/022f9ef5db00f802c7279a56bbea1758ac4b7e8be4d2c3e869f8203dc57b/xdump-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "39ffd77a2451f732900f5eefecd579a1", "sha256": "60d0c98084e8b98bb9159bdae01171b3ab246d8f74f6e0ae1925b1ef59603dab" }, "downloads": -1, "filename": "xdump-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39ffd77a2451f732900f5eefecd579a1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19173, "upload_time": "2018-08-11T13:18:44", "url": "https://files.pythonhosted.org/packages/46/bc/86d43a197c2948e2c10749bd7ff8fd213a97baf2bad37bffc351b8ec79d8/xdump-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07e3588fe061ca52fbc2c9c84307230a", "sha256": "059729a4d18ea358aee262bcb537b59411606faed40a6eba43b7362cd9c7654b" }, "downloads": -1, "filename": "xdump-0.6.0.tar.gz", "has_sig": false, "md5_digest": "07e3588fe061ca52fbc2c9c84307230a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17139, "upload_time": "2018-08-11T13:18:46", "url": "https://files.pythonhosted.org/packages/46/25/022f9ef5db00f802c7279a56bbea1758ac4b7e8be4d2c3e869f8203dc57b/xdump-0.6.0.tar.gz" } ] }