{"push_id":622459820,"size":14,"distinct_size":14,"ref":"refs/heads/master","head":"b85b71a124e28d179cc2fb01586be9e3e1feaeac","before":"19a67e42da4c34f6ca50d246034a6cd4cb9b2efb","commits":[{"sha":"670cd43c1e615539f8ae9c93e31731479eb7be70","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Clean code base.\n\nI'm assuming this is as it looks: the start of a project. I would generally\nNEVER make such sweeping changes in active code base (unless I discussed and\nscheduled with my teammates). It is nice to start with a clean slate; of\ncourse it will drift.\n\n* Normalize quotes, fix white space\n* Remove un-used boilerplate code.\n* I do have a wee bit of an opinion on formatting urls.py and models.py files.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/670cd43c1e615539f8ae9c93e31731479eb7be70"},{"sha":"258dbdb552419740ca490166b39ea004c27ead65","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Take tests for a drive. Add some unicode to tests.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/258dbdb552419740ca490166b39ea004c27ead65"},{"sha":"babb5e49f1ff3291c7d38a5c84273a3854fda0d0","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Introduce Conflicts to Book processing.\n\nSummary:\n* Use a synthetic PK for Book\n* Add an Alias with scheme \"PUB_ID\" for each publisher id provided\n* When creating aliases for a book, find dupes and create Conflicts.\n* Future tool will find conflicts and allow user to merge, correct.\n\nDetails:\nUsing the publisher-provided id as our primary key seems to be a poor idea.\nThe publisher id is essentially user input and user input shouldn't be part\nof our primary key. So we change the model to use the default Django PK\nmechanism and treat the publisher's id simply as another alias.\n\nThe thinking here is that conflicts will happen. Let's make resolution\nof conflicts a low-cost event. Doing so will require structuring some\ndata around a conflict and then writing a tool that can process this data.\nAt first this tool will be used by humans; as we gain insight we can add\nsome automated conflict processing.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/babb5e49f1ff3291c7d38a5c84273a3854fda0d0"},{"sha":"775af2c876384069e5ced6067987079de7e98e90","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Do not process file if we've seen it. Add tests.\n\n* Added `UpdateFile` object to track contents seen before (via SHA1)\n* Do not process files we've seen before\n* Basic test coverage for most of the tools.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/775af2c876384069e5ced6067987079de7e98e90"},{"sha":"2d0e3a40058863e1f889d2a46eb279e714a6562d","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Add reset_db django-admin command. Update README.\n\n* `reset_db` deletes database and does a clean sync_db. Useful for\n  prototyping model changes without worrying about migrations.\n* Updated README to reflect how I approached the task.\n* Add default developer settings (local.py)","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/2d0e3a40058863e1f889d2a46eb279e714a6562d"},{"sha":"b96e04cdd98e7624023a87edfb149e9a23955a5f","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Update some docstrings, better method name.\n\n* use extract_book_data instead of parse_book_element. Technically\n  speaking the element is already parsed.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/b96e04cdd98e7624023a87edfb149e9a23955a5f"},{"sha":"c6c37bc5d7666e87bde3b623d102ab86528328ed","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Remove some stupidity.\n\nYikes. My Django is rustier than I thought. Not sure if I will squash all\nthe commits to hide some of the lame things that made it into the first draft.\n\n* Added some unique_together constraints.\n* Cleaned up how we save Book/Alias data. That was silly.\n* Remembered the general distinction between Obj.create() and Obj(). Duh.\n* Fix a dumb mistake with ghosted `created` variable in `create_conflicts`\n* Started thinking about `QuerySet` laziness and evaluation costs. Not sure\n  it's a significant issue here, but I want to consider the issues.\n* Cleaned up how we create PUB_ID alias. I'm on the fence about including it\n  as a top-level key in the data dict (it's in the aliases, but I don't want\n  to write code that assumes its position in the list. Maybe provide a\n  helper method that extracts it from aliases.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/c6c37bc5d7666e87bde3b623d102ab86528328ed"},{"sha":"eb1c657eee51145f9a1a7f542aeec985d5f64af1","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Isolate logic that could be used by views/forms.\n\nIn thinking about the broader picture, I realize that we have\nsome complex logic around saving a book. If we wanted to\nhave another input mechanism, say a form, we want to re-use\nthat.\n\nFortunately, our incoming dict structure maps quite\nnicely to the cleaned_data dict forms spit out.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/eb1c657eee51145f9a1a7f542aeec985d5f64af1"},{"sha":"45fc42030ec54915dccd74131a7353e8b6bbedd6","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Skip bad XML files, tidy up returning data.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/45fc42030ec54915dccd74131a7353e8b6bbedd6"},{"sha":"348d67424dc966e27e0d270014a2a4b6f236dc8a","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Remove `UpdateFile`. Do not stop the batch process.\n\n* Removed `UpdateFile` ... maybe it could be useful in the future\n  but its presence begs too many questions. Something didn't\n  feel quite right.\n* Add a well-formed XML that is missing a required element.\n* Do not stop the batch processing. Improve messaging.\n* Minor tweak to Book admin to use title ... IDs too hard to click.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/348d67424dc966e27e0d270014a2a4b6f236dc8a"},{"sha":"94f9f0f19a914c847bb832760101b661a0d4ca9d","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Deal with SQLite's max_length issue. More tests.\n\nSQLite doesn't have a maximum size for varchar.\nhttp://www.sqlite.org/faq.html#q9\n\nHence, it does not heed max_length as defined on the CharFields.\nI'm assuming that we'll eventually want to use a different\ndatabase that does require max_length.\n\nCalling `full_clean()` is a bit of hack, but it seems like the\nmost unobtrusive hack at the moment. Of course, if we WANT to\nalways accept whatever data size we are given, great. This is\neasy to reverse.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/94f9f0f19a914c847bb832760101b661a0d4ca9d"},{"sha":"b1916699a878f4d941fb2849909f4088264fab26","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"BookAdmin lists conflicts. Rename conflicted_alias.\n\n* Listing the Conflicts via BookAdmin is sorta the point.\n* Renamed Conflict.conflicted_alias to Conflict.alias to be\n  consistent with book and to avoid things like\n  conflict.conflicted_alias.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/b1916699a878f4d941fb2849909f4088264fab26"},{"sha":"d843171a7eb41a980b6a79beaf4553f02a1c6c6b","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Update README","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/d843171a7eb41a980b6a79beaf4553f02a1c6c6b"},{"sha":"b85b71a124e28d179cc2fb01586be9e3e1feaeac","author":{"email":"4a6ab6a8d32af04bbc5567a6c60d67205943dbe6@gmail.com","name":"Steve Smith"},"message":"Add CharField overflow tests. Tweak format calls.\n\nAt some point I got it in my head that we had to provide\ninteger holders for `format`. But we don't have to.","distinct":true,"url":"https://api.github.com/repos/mrpineapple/figgy/commits/b85b71a124e28d179cc2fb01586be9e3e1feaeac"}]}