Improve the code consistency and testing for HttpRequest.

Review Request #10463 — Created March 21, 2019 and submitted

Information

RBTools
master

Reviewers

HttpRequest is a pretty old class, and was created before we had a lot
of our current code and documentation standards in place. As it evolved
to be compatible with Python 2.x and 3.x, we ended up with some (mostly
harmless) inconsistency in its behavior on these versions that weren't
caught by the very minimal test suite we had in place

This change fleshes out HttpRequest, adding docs, improving the
readability of some code, and bringing consistency in how it handles
string types. String types for form fields and files are now normalized
to byte strings when setting them, rather than accepting any string type
and leaving it up to the encoding stage to deal with them. This gives us
something stable we can work with.

Small discrepencies like the ordering of files and fields have been
resolved. They're now encoded in insert order, rather than Python
dictionary iteration order (which varies across 2.x and various 3.x
releases). Our old unit tests didn't catch this.

This also trims the fat, getting rid of field/file deletion methods,
which were never used anywhere and, in the case of file deletion, had
a misleading argument.

The unit test suite has been fleshed out some, doing a better job of
testing normalization and building of various fields and testing the
actual encoded payload instead of relying on a hand-crafted and
simplistic form-data parser.

Unit tests passed on Python 2.x and 3.x.

Used these changes to post this review request.

Summary ID
Improve the code consistency and testing for HttpRequest.
`HttpRequest` is a pretty old class, and was created before we had a lot of our current code and documentation standards in place. As it evolved to be compatible with Python 2.x and 3.x, we ended up with some (mostly harmless) inconsistency in its behavior on these versions that weren't caught by the very minimal test suite we had in place This change fleshes out `HttpRequest`, adding docs, improving the readability of some code, and bringing consistency in how it handles string types. String types for form fields and files are now normalized to byte strings when setting them, rather than accepting any string type and leaving it up to the encoding stage to deal with them. This gives us something stable we can work with. Small discrepencies like the ordering of files and fields have been resolved. They're now encoded in insert order, rather than Python dictionary iteration order (which varies across 2.x and various 3.x releases). Our old unit tests didn't catch this. This also trims the fat, getting rid of field/file deletion methods, which were never used anywhere and, in the case of file deletion, had a misleading argument. The unit test suite has been fleshed out some, doing a better job of testing normalization and building of various fields and testing the actual encoded payload instead of relying on a hand-crafted and simplistic form-data parser.
f369bf3b4c1189001c64ea76a054de88db9a47f3
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to master (2ec599e)