uxdiff
******
Compares the two sequences well and outputs the difference.
Improves text comparison in GUI-less environments.
Overview
========
Install
-------
.. code-block:: shell
pip install uxdiff
Example
-------
text1.txt
.. code-block:: text
1. Beautiful is better than ugly.
2. Explicit is better than implicit.
3. Simple is better than complex.
4. Complex is better than complicated.
text2.txt
.. code-block:: text
1. Beautiful is better than ugly.
3. Simple is better than complex.
4. Complicated is better than complex.
5. Flat is better than nested.
compare
.. code-block:: shell
uxdiff text1.txt text2.txt --color never
.. code-block:: text
--- text1.txt (utf-8)
+++ text2.txt (utf-8)
1 1| 1. Beautiful is better than ugly.
2 | - 2. Explicit is better than implicit.
3 | - 3. Simple is better than complex.
4 | - 4. Complex is better than complicated.
2| + 3. Simple is better than complex.
3| + 4. Complicated is better than complex.
4| + 5. Flat is better than nested.
[ ] | ++
[ <- ] 3| 3. Simple is better than complex.
[ -> ] 2| 3. Simple is better than complex.
[ ] | ++++ ! ---- !
[ <- ] 4| 4. Compl ex is better than complicated.
[ -> ] 3| 4. Complicated is better than compl ex.
supported multi-byte string. set the encoding with an argument if you need.
See more `examples <https://github.com/tanaga9/uxdiff/blob/master/docs/example.ipynb>`_
Usage
-----
.. code-block:: text
usage: uxdiff [-h] [--version] [-y] [-f] [-c NUM] [-w WIDTH] [-r]
[--linejunk LINEJUNK] [--charjunk CHARJUNK] [--cutoff RATIO]
[--fuzzy RATIO] [--cutoffchar] [--enc-file1 ENCODING]
[--enc-file2 ENCODING] [--enc-stdin ENCODING]
[--enc-stdout ENCODING] [--enc-filepath ENCODING]
[--ignore-crlf] [--color [WHEN]] [--no-color] [--withbg]
[file_or_dir_1] [file_or_dir_2]
positional arguments:
file_or_dir_1 file or dir 1
file_or_dir_2 file or dir 2
options:
-h, --help show this help message and exit
--version show program's version number and exit
-y, -s, --side-by-side
output in two columns
-f, --full Fulltext diff (default False) (disable context option)
-c NUM, --context NUM
Set number of context lines (default 5)
-w WIDTH, --width WIDTH
Set number of width (default auto(or 130))
-r, --recursive Recursively compare any subdirectories found. (default
False) (enable only compare directories)
--linejunk LINEJUNK linejunk
--charjunk CHARJUNK charjunk
--cutoff RATIO Set number of cutoff ratio (default 0.75)
(0.0<=ratio<=1.0)
--fuzzy RATIO Set number of fuzzy matching ratio (default 0.0)
(0.0<=ratio<=1.0)
--cutoffchar Cutoff character in line diffs (default False)
--enc-file1 ENCODING Set encoding of leftside inputfile1 (default utf-8)
--enc-file2 ENCODING Set encoding of rightside inputfile2 (default utf-8)
--enc-stdin ENCODING Set encoding of standard input (default
`defaultencoding`)
--enc-stdout ENCODING
Set encoding of standard output (default
`defaultencoding`)
--enc-filepath ENCODING
Set encoding of filepath (default `defaultencoding`)
--ignore-crlf Ignore carriage return ('\r') and line feed ('\n')
(default False)
--color [WHEN] Show colored diff. --color is the same as
--color=always. WHEN can be one of always, never, or
auto. (default auto)
--no-color Turn off colored diff. override color option if both.
(default False)
--withbg Colored diff with background color. It will be ignored
if no-color option. (default False)
License
-------
`The MIT License (MIT) <http://www.opensource.org/licenses/mit-license.php>`_
Module interface
================
Compare two text files or directories (or sequences); generate the differences.
+-----------------+----------------------------+-------------------------------------+
| Environment | Diff Representation | target of the intended compare |
+=================+============================+=====================================+
| ANSI terminal | ANSI escape code (color) | two text files or directories |
+-----------------+----------------------------+-------------------------------------+
| Jupyter | HTML Table | two sequences of hashable objects |
+-----------------+----------------------------+-------------------------------------+
**uxdiff.tabulate(diffs, truncate=None)**
Output the detected difference as an HTML table (for Jupyter).
**class uxdiff.Differ(linejunk=None, charjunk=None, cutoff=0.75, fuzzy=0.0, cutoffchar=False, context=3)**
Differ is a class for comparing sequences.
Differ uses SequenceMatcher both to compare sequences.
**compare(seq1, seq2)**
Compare two sequences; return a generator of differences.
Requirement is
* both sequences must be iterable (no generator).
* items in a sequence must be (recursively) hashable.
If the items of a sequences are iterable, detect similar ones as needed.
* Examples of hashable and iterable object (containing only hashable objects)
* string
* bytes
* tuple
* namedtuple (e.g., using pandas.DataFrame.itertuples())
* …
Example:
>>> import pprint
>>>
>>> pprint.pprint(list(Differ().compare([
... 1, 2, 3, (4, 5), 6, 7, 8
... ], [
... 1, 2, 33, 4, 5, 6, 7, 8
... ])))
[True,
((' ', 0, 1, 0, 1), None),
((' ', 1, 2, 1, 2), None),
False,
True,
(('|', 2, 3, 2, 33), None),
(('|', 3, (4, 5), 3, 4), None),
(('>', None, None, 4, 5), None),
False,
True,
((' ', 4, 6, 5, 6), None),
((' ', 5, 7, 6, 7), None),
((' ', 6, 8, 7, 8), None),
False]
>>>
>>> text1 = '''one
... two
... three
... '''.splitlines(1)
>>>
>>> text2 = '''ore
... tree
... emu
... '''.splitlines(1)
>>>
>>> pprint.pprint(list(Differ().compare(text1, text2)), width=100)
[True,
(('>', None, None, 0, 'ore\n'), None),
(('<', 0, 'one\n', None, None), None),
(('<', 1, 'two\n', None, None), None),
(('|', 2, 'three\n', 1, 'tree\n'), [(' ', 't', 't'), ('-', 'h', None), (' ', 'ree\n', 'ree\n')]),
(('>', None, None, 2, 'emu\n'), None),
False]
>>>
>>> # like sdiff
>>> pprint.pprint(list(Differ(cutoff=0, fuzzy=1).compare(text1, text2)), width=100)
[True,
(('|', 0, 'one\n', 0, 'ore\n'), [(' ', 'o', 'o'), ('!', 'n', 'r'), (' ', 'e\n', 'e\n')]),
(('|', 1, 'two\n', 1, 'tree\n'), [(' ', 't', 't'), ('!', 'wo', 'ree'), (' ', '\n', '\n')]),
(('|', 2, 'three\n', 2, 'emu\n'),
[('-', 'thr', None), (' ', 'e', 'e'), ('!', 'e', 'mu'), (' ', '\n', '\n')]),
False]
>>>
>>> text1 = ''' 1. Beautiful is better than ugly.
... 2. Explicit is better than implicit.
... 3. Simple is better than complex.
... 4. Complex is better than complicated.
... '''.splitlines(1)
>>>
>>> text2 = ''' 1. Beautiful is better than ugly.
... 3. Simple is better than complex.
... 4. Complicated is better than complex.
... 5. Flat is better than nested.
... '''.splitlines(1)
>>>
>>> diff = Differ().compare(text1, text2)
>>> pprint.pprint(list(diff), width=120)
[True,
((' ', 0, ' 1. Beautiful is better than ugly.\n', 0, ' 1. Beautiful is better than ugly.\n'), None),
False,
True,
(('<', 1, ' 2. Explicit is better than implicit.\n', None, None), None),
(('|', 2, ' 3. Simple is better than complex.\n', 1, ' 3. Simple is better than complex.\n'),
[(' ', ' 3.', ' 3.'),
('+', None, ' '),
(' ', ' Simple is better than complex.\n', ' Simple is better than complex.\n')]),
(('|', 3, ' 4. Complex is better than complicated.\n', 2, ' 4. Complicated is better than complex.\n'),
[(' ', ' 4. Compl', ' 4. Compl'),
('+', None, 'icat'),
(' ', 'e', 'e'),
('!', 'x', 'd'),
(' ', ' is better than compl', ' is better than compl'),
('-', 'icat', None),
(' ', 'e', 'e'),
('!', 'd', 'x'),
(' ', '.\n', '.\n')]),
(('>', None, None, 3, ' 5. Flat is better than nested.\n'), None),
False]
+--------------+----------------------------------------------------------------------------------------------+
| Yields | Meaning |
+==============+==============================================================================================+
| True | begin of a group of diff |
+--------------+----------------------------------------------------------------------------------------------+
| False | end of a group of diff |
+--------------+----------------------------------------------------------------------------------------------+
| None | omitted matches beyond the number of contexts |
+--------------+----------------------------------------------------------------------------------------------+
| Tuple | ((Code, Index1 | None, Item1 | None, Index2 | None, Item2 | None), InlineDiff | None) |
+--------------+----------------------------------------------------------------------------------------------+
+--------------+--------------------------------------+
| Code | Meaning |
+==============+======================================+
| “<” | unique to sequence 1 |
+--------------+--------------------------------------+
| “>” | unique to sequence 2 |
+--------------+--------------------------------------+
| “ “ | common to both sequences |
+--------------+--------------------------------------+
| “|” | different to both sequences |
+--------------+--------------------------------------+
+--------------+----------------------------------------------------------------------+
| InlineDiff | Meaning |
+==============+======================================================================+
| None | There is no InlineDiff (Code is not “|” or items are not iterable) |
+--------------+----------------------------------------------------------------------+
| List | [(InlineCode, SlicedItem1 | None, SlicedItem2 | None), … ] |
+--------------+----------------------------------------------------------------------+
+--------------+----------------------------------------------------------+
| InlineCode | Meaning |
+==============+==========================================================+
| “-” | unique to inline sequence 1 (item of sequence 1) |
+--------------+----------------------------------------------------------+
| “+” | unique to inline sequence 2 (item of sequence 2) |
+--------------+----------------------------------------------------------+
| “ “ | common to both inline sequences (item of sequences) |
+--------------+----------------------------------------------------------+
| “!” | different to both inline sequences (item of sequences) |
+--------------+----------------------------------------------------------+
**class uxdiff.LikeUnifiedDiffer(*args, **kwargs)**
**pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**
Compare two sequences of string; return a generator of pretty difference representations.
**class uxdiff.SideBySideDiffer(*args, **kwargs)**
**pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**
Compare two sequences of string; return a generator of pretty difference representations.
Raw data
{
"_id": null,
"home_page": "https://github.com/tanaga9/uxdiff",
"name": "uxdiff",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "colored side-by-side diff",
"author": "Tanaga",
"author_email": "tanaga9@users.noreply.github.com",
"download_url": "https://files.pythonhosted.org/packages/e2/8f/dbebaa0dfce03cf4b9000876aecd62135df58004d19ba4da2f19f743d162/uxdiff-1.5.2.tar.gz",
"platform": null,
"description": "\nuxdiff\n******\n\nCompares the two sequences well and outputs the difference.\nImproves text comparison in GUI-less environments.\n\n\nOverview\n========\n\n\nInstall\n-------\n\n.. code-block:: shell\n\n pip install uxdiff\n\n\nExample\n-------\n\ntext1.txt\n\n.. code-block:: text\n\n 1. Beautiful is better than ugly.\n 2. Explicit is better than implicit.\n 3. Simple is better than complex.\n 4. Complex is better than complicated.\n\ntext2.txt\n\n.. code-block:: text\n\n 1. Beautiful is better than ugly.\n 3. Simple is better than complex.\n 4. Complicated is better than complex.\n 5. Flat is better than nested.\n\ncompare\n\n.. code-block:: shell\n\n uxdiff text1.txt text2.txt --color never\n\n.. code-block:: text\n\n --- text1.txt (utf-8)\n +++ text2.txt (utf-8)\n 1 1| 1. Beautiful is better than ugly.\n 2 | - 2. Explicit is better than implicit.\n 3 | - 3. Simple is better than complex.\n 4 | - 4. Complex is better than complicated.\n 2| + 3. Simple is better than complex.\n 3| + 4. Complicated is better than complex.\n 4| + 5. Flat is better than nested.\n\n [ ] | ++ \n [ <- ] 3| 3. Simple is better than complex. \n [ -> ] 2| 3. Simple is better than complex. \n\n [ ] | ++++ ! ---- ! \n [ <- ] 4| 4. Compl ex is better than complicated. \n [ -> ] 3| 4. Complicated is better than compl ex.\n\nsupported multi-byte string. set the encoding with an argument if you need.\n\nSee more `examples <https://github.com/tanaga9/uxdiff/blob/master/docs/example.ipynb>`_\n\n\nUsage\n-----\n\n.. code-block:: text\n\n usage: uxdiff [-h] [--version] [-y] [-f] [-c NUM] [-w WIDTH] [-r]\n [--linejunk LINEJUNK] [--charjunk CHARJUNK] [--cutoff RATIO]\n [--fuzzy RATIO] [--cutoffchar] [--enc-file1 ENCODING]\n [--enc-file2 ENCODING] [--enc-stdin ENCODING]\n [--enc-stdout ENCODING] [--enc-filepath ENCODING]\n [--ignore-crlf] [--color [WHEN]] [--no-color] [--withbg]\n [file_or_dir_1] [file_or_dir_2]\n\n positional arguments:\n file_or_dir_1 file or dir 1\n file_or_dir_2 file or dir 2\n\n options:\n -h, --help show this help message and exit\n --version show program's version number and exit\n -y, -s, --side-by-side\n output in two columns\n -f, --full Fulltext diff (default False) (disable context option)\n -c NUM, --context NUM\n Set number of context lines (default 5)\n -w WIDTH, --width WIDTH\n Set number of width (default auto(or 130))\n -r, --recursive Recursively compare any subdirectories found. (default\n False) (enable only compare directories)\n --linejunk LINEJUNK linejunk\n --charjunk CHARJUNK charjunk\n --cutoff RATIO Set number of cutoff ratio (default 0.75)\n (0.0<=ratio<=1.0)\n --fuzzy RATIO Set number of fuzzy matching ratio (default 0.0)\n (0.0<=ratio<=1.0)\n --cutoffchar Cutoff character in line diffs (default False)\n --enc-file1 ENCODING Set encoding of leftside inputfile1 (default utf-8)\n --enc-file2 ENCODING Set encoding of rightside inputfile2 (default utf-8)\n --enc-stdin ENCODING Set encoding of standard input (default\n `defaultencoding`)\n --enc-stdout ENCODING\n Set encoding of standard output (default\n `defaultencoding`)\n --enc-filepath ENCODING\n Set encoding of filepath (default `defaultencoding`)\n --ignore-crlf Ignore carriage return ('\\r') and line feed ('\\n')\n (default False)\n --color [WHEN] Show colored diff. --color is the same as\n --color=always. WHEN can be one of always, never, or\n auto. (default auto)\n --no-color Turn off colored diff. override color option if both.\n (default False)\n --withbg Colored diff with background color. It will be ignored\n if no-color option. (default False)\n\n\nLicense\n-------\n\n`The MIT License (MIT) <http://www.opensource.org/licenses/mit-license.php>`_\n\n\nModule interface\n================\n\nCompare two text files or directories (or sequences); generate the differences.\n\n+-----------------+----------------------------+-------------------------------------+\n| Environment | Diff Representation | target of the intended compare |\n+=================+============================+=====================================+\n| ANSI terminal | ANSI escape code (color) | two text files or directories |\n+-----------------+----------------------------+-------------------------------------+\n| Jupyter | HTML Table | two sequences of hashable objects |\n+-----------------+----------------------------+-------------------------------------+\n\n**uxdiff.tabulate(diffs, truncate=None)**\n\n Output the detected difference as an HTML table (for Jupyter).\n\n**class uxdiff.Differ(linejunk=None, charjunk=None, cutoff=0.75, fuzzy=0.0, cutoffchar=False, context=3)**\n\n Differ is a class for comparing sequences.\n\n Differ uses SequenceMatcher both to compare sequences.\n\n **compare(seq1, seq2)**\n\n Compare two sequences; return a generator of differences.\n\n Requirement is\n\n * both sequences must be iterable (no generator).\n\n * items in a sequence must be (recursively) hashable.\n\n If the items of a sequences are iterable, detect similar ones as needed.\n\n * Examples of hashable and iterable object (containing only hashable objects)\n * string\n\n * bytes\n\n * tuple\n\n * namedtuple (e.g., using pandas.DataFrame.itertuples())\n\n * \u2026\n\n Example:\n\n >>> import pprint\n >>>\n >>> pprint.pprint(list(Differ().compare([\n ... 1, 2, 3, (4, 5), 6, 7, 8\n ... ], [\n ... 1, 2, 33, 4, 5, 6, 7, 8\n ... ])))\n [True,\n ((' ', 0, 1, 0, 1), None),\n ((' ', 1, 2, 1, 2), None),\n False,\n True,\n (('|', 2, 3, 2, 33), None),\n (('|', 3, (4, 5), 3, 4), None),\n (('>', None, None, 4, 5), None),\n False,\n True,\n ((' ', 4, 6, 5, 6), None),\n ((' ', 5, 7, 6, 7), None),\n ((' ', 6, 8, 7, 8), None),\n False]\n >>>\n >>> text1 = '''one\n ... two\n ... three\n ... '''.splitlines(1)\n >>>\n >>> text2 = '''ore\n ... tree\n ... emu\n ... '''.splitlines(1)\n >>>\n >>> pprint.pprint(list(Differ().compare(text1, text2)), width=100)\n [True,\n (('>', None, None, 0, 'ore\\n'), None),\n (('<', 0, 'one\\n', None, None), None),\n (('<', 1, 'two\\n', None, None), None),\n (('|', 2, 'three\\n', 1, 'tree\\n'), [(' ', 't', 't'), ('-', 'h', None), (' ', 'ree\\n', 'ree\\n')]),\n (('>', None, None, 2, 'emu\\n'), None),\n False]\n >>>\n >>> # like sdiff\n >>> pprint.pprint(list(Differ(cutoff=0, fuzzy=1).compare(text1, text2)), width=100)\n [True,\n (('|', 0, 'one\\n', 0, 'ore\\n'), [(' ', 'o', 'o'), ('!', 'n', 'r'), (' ', 'e\\n', 'e\\n')]),\n (('|', 1, 'two\\n', 1, 'tree\\n'), [(' ', 't', 't'), ('!', 'wo', 'ree'), (' ', '\\n', '\\n')]),\n (('|', 2, 'three\\n', 2, 'emu\\n'),\n [('-', 'thr', None), (' ', 'e', 'e'), ('!', 'e', 'mu'), (' ', '\\n', '\\n')]),\n False]\n >>>\n >>> text1 = ''' 1. Beautiful is better than ugly.\n ... 2. Explicit is better than implicit.\n ... 3. Simple is better than complex.\n ... 4. Complex is better than complicated.\n ... '''.splitlines(1)\n >>>\n >>> text2 = ''' 1. Beautiful is better than ugly.\n ... 3. Simple is better than complex.\n ... 4. Complicated is better than complex.\n ... 5. Flat is better than nested.\n ... '''.splitlines(1)\n >>>\n >>> diff = Differ().compare(text1, text2)\n >>> pprint.pprint(list(diff), width=120)\n [True,\n ((' ', 0, ' 1. Beautiful is better than ugly.\\n', 0, ' 1. Beautiful is better than ugly.\\n'), None),\n False,\n True,\n (('<', 1, ' 2. Explicit is better than implicit.\\n', None, None), None),\n (('|', 2, ' 3. Simple is better than complex.\\n', 1, ' 3. Simple is better than complex.\\n'),\n [(' ', ' 3.', ' 3.'),\n ('+', None, ' '),\n (' ', ' Simple is better than complex.\\n', ' Simple is better than complex.\\n')]),\n (('|', 3, ' 4. Complex is better than complicated.\\n', 2, ' 4. Complicated is better than complex.\\n'),\n [(' ', ' 4. Compl', ' 4. Compl'),\n ('+', None, 'icat'),\n (' ', 'e', 'e'),\n ('!', 'x', 'd'),\n (' ', ' is better than compl', ' is better than compl'),\n ('-', 'icat', None),\n (' ', 'e', 'e'),\n ('!', 'd', 'x'),\n (' ', '.\\n', '.\\n')]),\n (('>', None, None, 3, ' 5. Flat is better than nested.\\n'), None),\n False]\n\n +--------------+----------------------------------------------------------------------------------------------+\n | Yields | Meaning |\n +==============+==============================================================================================+\n | True | begin of a group of diff |\n +--------------+----------------------------------------------------------------------------------------------+\n | False | end of a group of diff |\n +--------------+----------------------------------------------------------------------------------------------+\n | None | omitted matches beyond the number of contexts |\n +--------------+----------------------------------------------------------------------------------------------+\n | Tuple | ((Code, Index1 | None, Item1 | None, Index2 | None, Item2 | None), InlineDiff | None) |\n +--------------+----------------------------------------------------------------------------------------------+\n\n +--------------+--------------------------------------+\n | Code | Meaning |\n +==============+======================================+\n | \u201c<\u201d | unique to sequence 1 |\n +--------------+--------------------------------------+\n | \u201c>\u201d | unique to sequence 2 |\n +--------------+--------------------------------------+\n | \u201c \u201c | common to both sequences |\n +--------------+--------------------------------------+\n | \u201c|\u201d | different to both sequences |\n +--------------+--------------------------------------+\n\n +--------------+----------------------------------------------------------------------+\n | InlineDiff | Meaning |\n +==============+======================================================================+\n | None | There is no InlineDiff (Code is not \u201c|\u201d or items are not iterable) |\n +--------------+----------------------------------------------------------------------+\n | List | [(InlineCode, SlicedItem1 | None, SlicedItem2 | None), \u2026 ] |\n +--------------+----------------------------------------------------------------------+\n\n +--------------+----------------------------------------------------------+\n | InlineCode | Meaning |\n +==============+==========================================================+\n | \u201c-\u201d | unique to inline sequence 1 (item of sequence 1) |\n +--------------+----------------------------------------------------------+\n | \u201c+\u201d | unique to inline sequence 2 (item of sequence 2) |\n +--------------+----------------------------------------------------------+\n | \u201c \u201c | common to both inline sequences (item of sequences) |\n +--------------+----------------------------------------------------------+\n | \u201c!\u201d | different to both inline sequences (item of sequences) |\n +--------------+----------------------------------------------------------+\n\n**class uxdiff.LikeUnifiedDiffer(*args, **kwargs)**\n\n **pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**\n\n Compare two sequences of string; return a generator of pretty difference representations.\n\n**class uxdiff.SideBySideDiffer(*args, **kwargs)**\n\n **pretty_compare(lines1, lines2, width=130, withcolor=False, withbg=False, offset1=0, offset2=0)**\n\n Compare two sequences of string; return a generator of pretty difference representations.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "As a command, Compare two text files or directories. As a module, Compare two sequences of hashable objects.",
"version": "1.5.2",
"project_urls": {
"Homepage": "https://github.com/tanaga9/uxdiff"
},
"split_keywords": [
"colored",
"side-by-side",
"diff"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1307a9e0407b87ed106331162c1f8dc2380e635676723488ac61f067ae952dfe",
"md5": "05f258a319547afc82fc3beeabc62224",
"sha256": "6088b138e425d70fd102ca38858df8a859455e80c3dbeb540b207d61d22e6c3b"
},
"downloads": -1,
"filename": "uxdiff-1.5.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "05f258a319547afc82fc3beeabc62224",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 28413,
"upload_time": "2023-11-05T17:46:27",
"upload_time_iso_8601": "2023-11-05T17:46:27.968956Z",
"url": "https://files.pythonhosted.org/packages/13/07/a9e0407b87ed106331162c1f8dc2380e635676723488ac61f067ae952dfe/uxdiff-1.5.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e28fdbebaa0dfce03cf4b9000876aecd62135df58004d19ba4da2f19f743d162",
"md5": "793d655f7ad7fc64b4a995b30a9d13d4",
"sha256": "e6e9a2b8c51a207ac88e08c55af256cae7027c1d6c46af25d045ea9c0af63b38"
},
"downloads": -1,
"filename": "uxdiff-1.5.2.tar.gz",
"has_sig": false,
"md5_digest": "793d655f7ad7fc64b4a995b30a9d13d4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 27878,
"upload_time": "2023-11-05T17:46:29",
"upload_time_iso_8601": "2023-11-05T17:46:29.663180Z",
"url": "https://files.pythonhosted.org/packages/e2/8f/dbebaa0dfce03cf4b9000876aecd62135df58004d19ba4da2f19f743d162/uxdiff-1.5.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-11-05 17:46:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tanaga9",
"github_project": "uxdiff",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "uxdiff"
}