{"push_id":1074051009,"size":26,"distinct_size":13,"ref":"refs/heads/master","head":"06ede1c69550b12fbf6b038bae2d17484510d369","before":"86b642e34399dc62fab90859b0f4de3c58e2246b","commits":[{"sha":"09e2fb8513172622c6355aded9eec2dc99d05173","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"Replace Version.in_window() with the more generic matches()\n\nThis makes it easier to do conditionals of the current version\nagainst arbitrary windows of version by setting min_version and\nmax_version args. The tests show some useful examples.\n\nThis should allow sufficent expressiveness to conditionally branch\non version where we like.","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/09e2fb8513172622c6355aded9eec2dc99d05173"},{"sha":"7b77180f9d9613cdce113fe2bff0ffdac85af82e","author":{"email":"317c4bbeb2d908c77eb1ba56929aed32610d5fb6@gmail.com","name":"Andrew Laski"},"message":"Merge pull request #24 from cdent/version-matches\n\nReplace Version.in_window() with the more generic matches()","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/7b77180f9d9613cdce113fe2bff0ffdac85af82e"},{"sha":"dac0a16d96d5dff5bf99b351e52d1108cc2ba5b5","author":{"email":"bc2cf34d11c8b9aae4cae5be37a05e445066e558@gmail.com","name":"Chris Dent"},"message":"Implement an error handler\n\nThis makes it possible to raise HTTP<some status> anywhere in the\ncode and for it to be properly handled by the Flask app. The\nresponse status will be set and the body will take on the form of an\nOpenStack errors object.\n\nThis implementation uses my own httpexceptor module. We don't have\nto use it by find it simple to use and it is fairly reasonable with\nregard to headers it will mess with depending on the exception. For\nexample for most exception the argument passed is just a message\nthat goes in the error, whereas for 302 it is expected to be a full\nURL for redirection. We can change to something else easily enough.\n\nVersion handling now properly raises the expected 406 when given a\nbad microversion.","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/dac0a16d96d5dff5bf99b351e52d1108cc2ba5b5"},{"sha":"781a48427b9f7d48a6c2e5c2339644c448d01d64","author":{"email":"438fea3debdca407bab19682f52b9613fd075671@gmail.com","name":"Jay Pipes"},"message":"Merge pull request #25 from cdent/error-handler\n\nImplement an error handler","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/781a48427b9f7d48a6c2e5c2339644c448d01d64"},{"sha":"d66f35175a65e208cf33a807a206de7ad033127e","author":{"email":"bc2cf34d11c8b9aae4cae5be37a05e445066e558@gmail.com","name":"Chris Dent"},"message":"Add request-id handling\n\nThis adds a simple uuid4 to every response and makes that uuid\navailable throughout the request, for logging and related purposes.\n\nDuring testing it became clear that the error handling would not\nwork for 404s that Flask itself was raising so those are repackaged\nto get them into the error handling flow.","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/d66f35175a65e208cf33a807a206de7ad033127e"},{"sha":"ab3d9666ba60a0e5aa96bd9cee0ddedfae176c74","author":{"email":"438fea3debdca407bab19682f52b9613fd075671@gmail.com","name":"Jay Pipes"},"message":"Merge pull request #26 from cdent/request-id\n\nAdd request-id handling","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/ab3d9666ba60a0e5aa96bd9cee0ddedfae176c74"},{"sha":"f702e894718ebb605a67d98a22dc1e473d2fea2e","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"Add very basic integration testing harness\n\nAdd the foundation for a gabbi-run-based integration test harness\nfor enamel. The idea is that from one YAML file we can, eventually,\ntest the whole service (and its collaborators) via the API.\n\nThis involves a few moving parts:\n\n* A working devstack plugin (there was a typo in a conditional\n  preventing the ENAMEL_SERVICE_URL from being set).\n* A post_test_hook.sh which can be used either as a manual script\n  to call the tests (once a devstack has been stacked) or as a gate\n  hook to be called from project/jenkins config.\n* A gabbi yaml file that for now just checks the service is there.\n* A tox 'integration' target called by the hook script.\n\nThe hook will need some additions to properly report errors and\nlogging information once this stuff is in the gate. For now we can\ndo things by hand if we feel inclined.","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/f702e894718ebb605a67d98a22dc1e473d2fea2e"},{"sha":"eea97e8d21da22597351732dc442bef975ac3417","author":{"email":"438fea3debdca407bab19682f52b9613fd075671@gmail.com","name":"Jay Pipes"},"message":"Merge pull request #27 from cdent/devstack-cleanups\n\nAdd very basic integration testing harness","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/eea97e8d21da22597351732dc442bef975ac3417"},{"sha":"253bc0e21a0916b3a0c70f49d238ff1ffb556d5b","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"Switch to using modern microversion headers\n\nThe proposed new styleeee is \"OpenStack-API-Version: <type> <version>\"\n\nThis change implements that and updates the tests accordingly.\n\nThe proposal has not yet been approved but has support from the cores\nof the API-wg and Nova and Ironic are okay with it as is. Manila\nis okay as long as there is some grandfathering.","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/253bc0e21a0916b3a0c70f49d238ff1ffb556d5b"},{"sha":"1896c7ba3e1c161777245f2104f1112a83e4024b","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"correct api-version in integration test","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/1896c7ba3e1c161777245f2104f1112a83e4024b"},{"sha":"c3d716dd4ccdd3de6d4f709de4dc4722ff8bbed4","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"remove debugging artifacts","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/c3d716dd4ccdd3de6d4f709de4dc4722ff8bbed4"},{"sha":"de21cdfff385fd0f4870788e59ebd01486978c1a","author":{"email":"438fea3debdca407bab19682f52b9613fd075671@gmail.com","name":"Jay Pipes"},"message":"Merge pull request #28 from cdent/modern-microversions\n\nSwitch to using modern microversion headers","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/de21cdfff385fd0f4870788e59ebd01486978c1a"},{"sha":"d8bb2612467f0740811d44ab77129b135f4fa41a","author":{"email":"02e0a999c50b1f88df7a8f5a04e1b76b35ea6a88@lascii.com","name":"Andrew Laski"},"message":"Add Task oslo.versionedobject\n\nIn order to interact with the database it was decided that we would use\noslo.versionedobjects with embedded query methods. This adds the basic\nframework for adding objects to enamel, adds the first object, and adds\na test class and fixture for easy testing of the database interactions.","distinct":false,"url":"https://api.github.com/repos/alaski/enamel/commits/d8bb2612467f0740811d44ab77129b135f4fa41a"},{"sha":"25bf170e91e716f2c0996b1450c0fbd9487dd4b0","author":{"email":"bc2cf34d11c8b9aae4cae5be37a05e445066e558@gmail.com","name":"Chris Dent"},"message":"Merge pull request #30 from alaski/api_boot_task\n\nAdd Task oslo.versionedobject","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/25bf170e91e716f2c0996b1450c0fbd9487dd4b0"},{"sha":"2ef4f91971690d660a9d04922edf152a7473ae6b","author":{"email":"438fea3debdca407bab19682f52b9613fd075671@gmail.com","name":"Jay Pipes"},"message":"Move main.py into enamel/cmd/api.py\n\nPreparation for introducing the task processor service. We move the\nEnamel API service into a file under enamel/cmd/ where all service and\nWSGI application endpoints will live.","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/2ef4f91971690d660a9d04922edf152a7473ae6b"},{"sha":"36e1b4756a0736fef4b427c5fc917718f4b09eb8","author":{"email":"438fea3debdca407bab19682f52b9613fd075671@gmail.com","name":"Jay Pipes"},"message":"Pull in the infrastructure for a service daemon\n\nAdds service daemon runner infrastructure and a simple set of tests.\nNext patches in this series turn the task processor into a listener on a\nmessage queue topic that spawns OS processes to execute tasks pulled off\nthe queue.","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/36e1b4756a0736fef4b427c5fc917718f4b09eb8"},{"sha":"f553fe2dfc8b4b7954c87c159203b100a131ab15","author":{"email":"bc2cf34d11c8b9aae4cae5be37a05e445066e558@gmail.com","name":"Chris Dent"},"message":"Merge pull request #31 from jaypipes/worker\n\nStart of task processor worker service","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/f553fe2dfc8b4b7954c87c159203b100a131ab15"},{"sha":"3844cbad002ddba25b54a1525020bf8d383b6cbe","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"Fix up code and tests after merging TaskProcessor\n\nMerging the task process was likely premature. The tests weren't passing.\n\nThis fixes:\n\n* pep8 issues\n* replacing daemon with python-daemon in requirments.txt (confusing!)\n* calling the right method to run the TaskProcessor\n* disabling the TaskProcess test, which would run forever without\n  changes.\n\nAdditional changes will be required, but getting to a stable state\nseemed the right thing to do.","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/3844cbad002ddba25b54a1525020bf8d383b6cbe"},{"sha":"9c36ecb137e225bc4a1d65b13c031673447576cd","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"Add an accept decorator\n\nFor route handlers that respond to the GET method, add an optional\naccept decorator which raises a 406 response code if the accept\nheader in the request does not match with the media types provided\nto the decorator. ACCEPTABLE_TYPES contains defaults.\n\nThis gets the basics in place but leaves room for later improvement\nin how the body of the 406 response is formed. It could be more useful\nif we desire.\n\nIn order to make this change in a tidy way that did not drive the\nauthor crazy not route-handling methods have been moved out of\nhandler.py into decorators.py, errors.py and request_funcs.py depending\non what kind of function those methods provided.\n\nVarious gabbits have been updated to reflect the required accept header\nand also correct the fact that I dumbly used content-type where I meant\naccept.","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/9c36ecb137e225bc4a1d65b13c031673447576cd"},{"sha":"bfeacc81ecba64247e7a7459e77fcb09fc416181","author":{"email":"627ce13108773fd7b24db6df3fff23247064bdf1@anticdent.org","name":"Chris Dent"},"message":"Fix decorators import\n\nand use of decorators.accept","distinct":true,"url":"https://api.github.com/repos/alaski/enamel/commits/bfeacc81ecba64247e7a7459e77fcb09fc416181"}]}