Add a streaming writer for DiffX files.

Review Request #11713 — Created July 10, 2021 and submitted

Information

DiffX
master

Reviewers

This introduces diffx.writer.DiffXWriter, a streaming writer for the
DiffX file format. This is a low-level interface for writing DiffX
files to a stream (such as a local file, an in-progress HTTP response,
or a memory-backed stream) progressively, section-by-section, according
to the DiffX specification.

It carefully ensures that sections are never generated in the wrong
order, using the same state tree used for parsing. It also validates
that values going into options.

The writer tends to be thorough when it generates sections, opting to
explicitly provide information like the line ending types or the
metadata format, even when optional in DiffX files.

It's up to the consumer to write the correct preambles, metadata, diff
content, and any options not otherwise handled by the writer. However,
the writer will take care to compute some things, like line ending
types, if not otherwise provided (though it's recommended that callers
still provide these if they know them).

DiffXWriter should now be usable for production DiffX generation
(pending any new changes to the spec).

Unit tests pass on Python 2 and 3.

Summary ID
Add a streaming writer for DiffX files.
This introduces `diffx.writer.DiffXWriter`, a streaming writer for the DiffX file format. This is a low-level interface for writing DiffX files to a stream (such as a local file, an in-progress HTTP response, or a memory-backed stream) progressively, section-by-section, according to the DiffX specification. It carefully ensures that sections are never generated in the wrong order, using the same state tree used for parsing. It also validates that values going into options. The writer tends to be thorough when it generates sections, opting to explicitly provide information like the line ending types or the metadata format, even when optional in DiffX files. It's up to the consumer to write the correct preambles, metadata, diff content, and any options not otherwise handled by the writer. However, the writer will take care to compute some things, like line ending types, if not otherwise provided (though it's recommended that callers still provide these if they know them). `DiffXWriter` should now be usable for production DiffX generation (pending any new changes to the spec).
eccb3258f0e4c707bd4f8296510ebd45a1730135
Description From Last Updated

E501 line too long (81 > 79 characters)

reviewbotreviewbot
Checks run (1 failed, 1 succeeded)
flake8 failed.
JSHint passed.

flake8

chipx86
david
  1. 
      
  2. python/diffx/tests/test_writer.py (Diff revision 2)
     
     

    Maybe mention "without raising an exception"?

  3. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to master (c58be64)