{"action":"opened","number":26,"pull_request":{"url":"https://api.github.com/repos/WellDone/pymomo/pulls/26","id":30894434,"html_url":"https://github.com/WellDone/pymomo/pull/26","diff_url":"https://github.com/WellDone/pymomo/pull/26.diff","patch_url":"https://github.com/WellDone/pymomo/pull/26.patch","issue_url":"https://api.github.com/repos/WellDone/pymomo/issues/26","number":26,"state":"open","locked":false,"title":"Update MoMo Type System and PCB Build System","user":{"login":"timburke","id":2424759,"avatar_url":"https://avatars.githubusercontent.com/u/2424759?v=3","gravatar_id":"","url":"https://api.github.com/users/timburke","html_url":"https://github.com/timburke","followers_url":"https://api.github.com/users/timburke/followers","following_url":"https://api.github.com/users/timburke/following{/other_user}","gists_url":"https://api.github.com/users/timburke/gists{/gist_id}","starred_url":"https://api.github.com/users/timburke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timburke/subscriptions","organizations_url":"https://api.github.com/users/timburke/orgs","repos_url":"https://api.github.com/users/timburke/repos","events_url":"https://api.github.com/users/timburke/events{/privacy}","received_events_url":"https://api.github.com/users/timburke/received_events","type":"User","site_admin":false},"body":"In order to remove our current dependency on Digikey part numbers to identify components on our boards and allow other distributors, this PR refactors and updates the pcb build system as well as updating the momo type annotation system to make developing API functions easier.  \r\n\r\nThe main changes are listed below\r\n\r\n### Type System\r\n- You can have complex types that are compositions of basic types like list(string) or map(string, string).  This is really useful for returning complex values from an API function but still being able to automatically print them in the console if you run from momo without giving you useless information (like a pile of strings) if you call from a python script.\r\n- Refactored the type system into a more user friendly interface and added unit tests\r\n- Added more types like boolean, maps, lists\r\n\r\nOutstanding feature requests are documented in #25.\r\n\r\n### MoMo Tool\r\n- Fixed --rcdir to --rcfile.  Closes #20 \r\n- Lazily load modules on demand rather than loading everything at startup to reduce startup time.  This will be really important going forward but is useful now too.  Modules are now only loaded the first time that a context loaded from that module is invoked.\r\n- Added `momo pcb` context that houses all of the pcb related functionality\r\n- Fixed momo tool usage on Windows so that it works (related to readline vs. libedit issues)\r\n\r\nOutstanding feature requests are documented in #24.\r\n\r\n### PCB Build System\r\n- Refactored everything and removed dependency on EAGLE and Octopart.  Now you can use whatever ECAD program you want, provided it has an adapter.  Similar for Octopart, though there aren't too many options here.\r\n- Removed the assumption that all parts would have a Digikey part number.  Now you can use a combination of Manufacturer, MPN or Distributor, Distributor Part Number to identify a part.\r\n- Added a lot of unit tests\r\n- Added documentation for how to use `pymomo.pcb` from the command line\r\n- Removed dependency on huge ZODB for caching.  Use a simpler cache based on sqlite (part of python standard library)\r\n- Add generation of excel BOMs directly rather than just CSV files since everyone wants excel BOMs (using xlsxwriter package)\r\n\r\nOutstanding feature requests for pcb are documented in #23.\r\n\r\n**Documentation for pcb feature is included as a separate PR to MoMo-Firmware since it currently needs to live in that repo**","created_at":"2015-03-10T21:28:49Z","updated_at":"2015-03-10T21:28:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/WellDone/pymomo/pulls/26/commits","review_comments_url":"https://api.github.com/repos/WellDone/pymomo/pulls/26/comments","review_comment_url":"https://api.github.com/repos/WellDone/pymomo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/WellDone/pymomo/issues/26/comments","statuses_url":"https://api.github.com/repos/WellDone/pymomo/statuses/b9b569226de331cdffd6ab1aba04fc7c48d0f0aa","head":{"label":"timburke:feature-bommatch","ref":"feature-bommatch","sha":"b9b569226de331cdffd6ab1aba04fc7c48d0f0aa","user":{"login":"timburke","id":2424759,"avatar_url":"https://avatars.githubusercontent.com/u/2424759?v=3","gravatar_id":"","url":"https://api.github.com/users/timburke","html_url":"https://github.com/timburke","followers_url":"https://api.github.com/users/timburke/followers","following_url":"https://api.github.com/users/timburke/following{/other_user}","gists_url":"https://api.github.com/users/timburke/gists{/gist_id}","starred_url":"https://api.github.com/users/timburke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timburke/subscriptions","organizations_url":"https://api.github.com/users/timburke/orgs","repos_url":"https://api.github.com/users/timburke/repos","events_url":"https://api.github.com/users/timburke/events{/privacy}","received_events_url":"https://api.github.com/users/timburke/received_events","type":"User","site_admin":false},"repo":{"id":29324847,"name":"pymomo","full_name":"timburke/pymomo","owner":{"login":"timburke","id":2424759,"avatar_url":"https://avatars.githubusercontent.com/u/2424759?v=3","gravatar_id":"","url":"https://api.github.com/users/timburke","html_url":"https://github.com/timburke","followers_url":"https://api.github.com/users/timburke/followers","following_url":"https://api.github.com/users/timburke/following{/other_user}","gists_url":"https://api.github.com/users/timburke/gists{/gist_id}","starred_url":"https://api.github.com/users/timburke/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timburke/subscriptions","organizations_url":"https://api.github.com/users/timburke/orgs","repos_url":"https://api.github.com/users/timburke/repos","events_url":"https://api.github.com/users/timburke/events{/privacy}","received_events_url":"https://api.github.com/users/timburke/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/timburke/pymomo","description":"A python library for interacting with MoMo devices.","fork":true,"url":"https://api.github.com/repos/timburke/pymomo","forks_url":"https://api.github.com/repos/timburke/pymomo/forks","keys_url":"https://api.github.com/repos/timburke/pymomo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/timburke/pymomo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/timburke/pymomo/teams","hooks_url":"https://api.github.com/repos/timburke/pymomo/hooks","issue_events_url":"https://api.github.com/repos/timburke/pymomo/issues/events{/number}","events_url":"https://api.github.com/repos/timburke/pymomo/events","assignees_url":"https://api.github.com/repos/timburke/pymomo/assignees{/user}","branches_url":"https://api.github.com/repos/timburke/pymomo/branches{/branch}","tags_url":"https://api.github.com/repos/timburke/pymomo/tags","blobs_url":"https://api.github.com/repos/timburke/pymomo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/timburke/pymomo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/timburke/pymomo/git/refs{/sha}","trees_url":"https://api.github.com/repos/timburke/pymomo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/timburke/pymomo/statuses/{sha}","languages_url":"https://api.github.com/repos/timburke/pymomo/languages","stargazers_url":"https://api.github.com/repos/timburke/pymomo/stargazers","contributors_url":"https://api.github.com/repos/timburke/pymomo/contributors","subscribers_url":"https://api.github.com/repos/timburke/pymomo/subscribers","subscription_url":"https://api.github.com/repos/timburke/pymomo/subscription","commits_url":"https://api.github.com/repos/timburke/pymomo/commits{/sha}","git_commits_url":"https://api.github.com/repos/timburke/pymomo/git/commits{/sha}","comments_url":"https://api.github.com/repos/timburke/pymomo/comments{/number}","issue_comment_url":"https://api.github.com/repos/timburke/pymomo/issues/comments{/number}","contents_url":"https://api.github.com/repos/timburke/pymomo/contents/{+path}","compare_url":"https://api.github.com/repos/timburke/pymomo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/timburke/pymomo/merges","archive_url":"https://api.github.com/repos/timburke/pymomo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/timburke/pymomo/downloads","issues_url":"https://api.github.com/repos/timburke/pymomo/issues{/number}","pulls_url":"https://api.github.com/repos/timburke/pymomo/pulls{/number}","milestones_url":"https://api.github.com/repos/timburke/pymomo/milestones{/number}","notifications_url":"https://api.github.com/repos/timburke/pymomo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/timburke/pymomo/labels{/name}","releases_url":"https://api.github.com/repos/timburke/pymomo/releases{/id}","created_at":"2015-01-16T00:18:47Z","updated_at":"2015-03-10T21:08:06Z","pushed_at":"2015-03-10T21:08:06Z","git_url":"git://github.com/timburke/pymomo.git","ssh_url":"git@github.com:timburke/pymomo.git","clone_url":"https://github.com/timburke/pymomo.git","svn_url":"https://github.com/timburke/pymomo","homepage":"https://momo.welldone.org","size":915,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"WellDone:master","ref":"master","sha":"59297a62d9d9cc9b827a4669d0c0daf6313f3662","user":{"login":"WellDone","id":1280475,"avatar_url":"https://avatars.githubusercontent.com/u/1280475?v=3","gravatar_id":"","url":"https://api.github.com/users/WellDone","html_url":"https://github.com/WellDone","followers_url":"https://api.github.com/users/WellDone/followers","following_url":"https://api.github.com/users/WellDone/following{/other_user}","gists_url":"https://api.github.com/users/WellDone/gists{/gist_id}","starred_url":"https://api.github.com/users/WellDone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WellDone/subscriptions","organizations_url":"https://api.github.com/users/WellDone/orgs","repos_url":"https://api.github.com/users/WellDone/repos","events_url":"https://api.github.com/users/WellDone/events{/privacy}","received_events_url":"https://api.github.com/users/WellDone/received_events","type":"Organization","site_admin":false},"repo":{"id":26138747,"name":"pymomo","full_name":"WellDone/pymomo","owner":{"login":"WellDone","id":1280475,"avatar_url":"https://avatars.githubusercontent.com/u/1280475?v=3","gravatar_id":"","url":"https://api.github.com/users/WellDone","html_url":"https://github.com/WellDone","followers_url":"https://api.github.com/users/WellDone/followers","following_url":"https://api.github.com/users/WellDone/following{/other_user}","gists_url":"https://api.github.com/users/WellDone/gists{/gist_id}","starred_url":"https://api.github.com/users/WellDone/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/WellDone/subscriptions","organizations_url":"https://api.github.com/users/WellDone/orgs","repos_url":"https://api.github.com/users/WellDone/repos","events_url":"https://api.github.com/users/WellDone/events{/privacy}","received_events_url":"https://api.github.com/users/WellDone/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/WellDone/pymomo","description":"A python library for interacting with MoMo devices.","fork":false,"url":"https://api.github.com/repos/WellDone/pymomo","forks_url":"https://api.github.com/repos/WellDone/pymomo/forks","keys_url":"https://api.github.com/repos/WellDone/pymomo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/WellDone/pymomo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/WellDone/pymomo/teams","hooks_url":"https://api.github.com/repos/WellDone/pymomo/hooks","issue_events_url":"https://api.github.com/repos/WellDone/pymomo/issues/events{/number}","events_url":"https://api.github.com/repos/WellDone/pymomo/events","assignees_url":"https://api.github.com/repos/WellDone/pymomo/assignees{/user}","branches_url":"https://api.github.com/repos/WellDone/pymomo/branches{/branch}","tags_url":"https://api.github.com/repos/WellDone/pymomo/tags","blobs_url":"https://api.github.com/repos/WellDone/pymomo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/WellDone/pymomo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/WellDone/pymomo/git/refs{/sha}","trees_url":"https://api.github.com/repos/WellDone/pymomo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/WellDone/pymomo/statuses/{sha}","languages_url":"https://api.github.com/repos/WellDone/pymomo/languages","stargazers_url":"https://api.github.com/repos/WellDone/pymomo/stargazers","contributors_url":"https://api.github.com/repos/WellDone/pymomo/contributors","subscribers_url":"https://api.github.com/repos/WellDone/pymomo/subscribers","subscription_url":"https://api.github.com/repos/WellDone/pymomo/subscription","commits_url":"https://api.github.com/repos/WellDone/pymomo/commits{/sha}","git_commits_url":"https://api.github.com/repos/WellDone/pymomo/git/commits{/sha}","comments_url":"https://api.github.com/repos/WellDone/pymomo/comments{/number}","issue_comment_url":"https://api.github.com/repos/WellDone/pymomo/issues/comments{/number}","contents_url":"https://api.github.com/repos/WellDone/pymomo/contents/{+path}","compare_url":"https://api.github.com/repos/WellDone/pymomo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/WellDone/pymomo/merges","archive_url":"https://api.github.com/repos/WellDone/pymomo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/WellDone/pymomo/downloads","issues_url":"https://api.github.com/repos/WellDone/pymomo/issues{/number}","pulls_url":"https://api.github.com/repos/WellDone/pymomo/pulls{/number}","milestones_url":"https://api.github.com/repos/WellDone/pymomo/milestones{/number}","notifications_url":"https://api.github.com/repos/WellDone/pymomo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/WellDone/pymomo/labels{/name}","releases_url":"https://api.github.com/repos/WellDone/pymomo/releases{/id}","created_at":"2014-11-03T21:06:32Z","updated_at":"2015-02-25T07:12:02Z","pushed_at":"2015-02-25T07:12:01Z","git_url":"git://github.com/WellDone/pymomo.git","ssh_url":"git@github.com:WellDone/pymomo.git","clone_url":"https://github.com/WellDone/pymomo.git","svn_url":"https://github.com/WellDone/pymomo","homepage":"https://momo.welldone.org","size":953,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":6,"forks":2,"open_issues":6,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/WellDone/pymomo/pulls/26"},"html":{"href":"https://github.com/WellDone/pymomo/pull/26"},"issue":{"href":"https://api.github.com/repos/WellDone/pymomo/issues/26"},"comments":{"href":"https://api.github.com/repos/WellDone/pymomo/issues/26/comments"},"review_comments":{"href":"https://api.github.com/repos/WellDone/pymomo/pulls/26/comments"},"review_comment":{"href":"https://api.github.com/repos/WellDone/pymomo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/WellDone/pymomo/pulls/26/commits"},"statuses":{"href":"https://api.github.com/repos/WellDone/pymomo/statuses/b9b569226de331cdffd6ab1aba04fc7c48d0f0aa"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":81,"additions":17928,"deletions":1213,"changed_files":77}}