{"action":"created","issue":{"url":"https://api.github.com/repos/hit9/skylark/issues/34","labels_url":"https://api.github.com/repos/hit9/skylark/issues/34/labels{/name}","comments_url":"https://api.github.com/repos/hit9/skylark/issues/34/comments","events_url":"https://api.github.com/repos/hit9/skylark/issues/34/events","html_url":"https://github.com/hit9/skylark/issues/34","id":88254559,"number":34,"title":"Uhhh, this seems kinda weird, but...","user":{"login":"coleifer","id":119974,"avatar_url":"https://avatars.githubusercontent.com/u/119974?v=3","gravatar_id":"","url":"https://api.github.com/users/coleifer","html_url":"https://github.com/coleifer","followers_url":"https://api.github.com/users/coleifer/followers","following_url":"https://api.github.com/users/coleifer/following{/other_user}","gists_url":"https://api.github.com/users/coleifer/gists{/gist_id}","starred_url":"https://api.github.com/users/coleifer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coleifer/subscriptions","organizations_url":"https://api.github.com/users/coleifer/orgs","repos_url":"https://api.github.com/users/coleifer/repos","events_url":"https://api.github.com/users/coleifer/events{/privacy}","received_events_url":"https://api.github.com/users/coleifer/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2015-06-14T21:53:28Z","updated_at":"2015-06-15T05:26:45Z","closed_at":null,"body":"I'm the author of [Peewee ORM](https://github.com/coleifer/peewee) and I hope you don't take this amiss but I kind of feel like you've ripped off a fair bit of my project.\r\n\r\nThe class hierarchy is remarkably similar, leading me to believe you've lifted quite a bit of my code and ideas without any attribution. You changed the names slightly in some cases, so `Node` -> `Leaf`, `Expression` -> `Expr`, but `Field` and `FieldDescriptor` you decided to keep.\r\n\r\nThe code for your `Leaf` class is a DEAD-RINGER for `Node` in peewee, even down to the factory method used for generating expressions which is completely idiosyncratic.\r\n\r\nPeewee:\r\n\r\n```python\r\nclass Node(object):\r\n    def _e(op, inv=False):\r\n        \"\"\"\r\n        Lightweight factory which returns a method that builds an Expression\r\n        consisting of the left-hand and right-hand operands, using `op`.\r\n        \"\"\"\r\n        def inner(self, rhs):\r\n            if inv:\r\n                return Expression(rhs, op, self)\r\n            return Expression(self, op, rhs)\r\n        return inner\r\n```\r\n\r\n\"Skylark\":\r\n\r\n```python\r\nclass Leaf(object):\r\n\r\n    def _e(op_type, invert=False):\r\n        def e(self, right):\r\n            if invert:\r\n                return Expr(right, self, op_type)\r\n            return Expr(self, right, op_type)\r\n        return e\r\n```\r\n\r\nThe APIs are also extremely similar, for instance `.select()`, `fn.FUNCTION(...)`, `.alias(...)`... Even the internal APIs like database `.execute()` and `.execute_sql()`, even my implementation of the `Transaction` context manager!\r\n\r\nYou've even gone so far as to begin your single-file ORM with **ascii art of a bird** for god's sake!"},"comment":{"url":"https://api.github.com/repos/hit9/skylark/issues/comments/111927842","html_url":"https://github.com/hit9/skylark/issues/34#issuecomment-111927842","issue_url":"https://api.github.com/repos/hit9/skylark/issues/34","id":111927842,"user":{"login":"coleifer","id":119974,"avatar_url":"https://avatars.githubusercontent.com/u/119974?v=3","gravatar_id":"","url":"https://api.github.com/users/coleifer","html_url":"https://github.com/coleifer","followers_url":"https://api.github.com/users/coleifer/followers","following_url":"https://api.github.com/users/coleifer/following{/other_user}","gists_url":"https://api.github.com/users/coleifer/gists{/gist_id}","starred_url":"https://api.github.com/users/coleifer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coleifer/subscriptions","organizations_url":"https://api.github.com/users/coleifer/orgs","repos_url":"https://api.github.com/users/coleifer/repos","events_url":"https://api.github.com/users/coleifer/events{/privacy}","received_events_url":"https://api.github.com/users/coleifer/received_events","type":"User","site_admin":false},"created_at":"2015-06-15T05:26:45Z","updated_at":"2015-06-15T05:26:45Z","body":"Thanks for offering to make changes to your project. Per the [peewee license](https://github.com/coleifer/peewee/blob/master/LICENSE), \r\n\r\n> Copyright (c) 2010 Charles Leifer\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\n> The above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nSo the copyright should be included with the source.\r\n\r\nAdditionally, and this is just my personal preference, the ASCII art thing was really something of a personal touch I added to the peewee code. It felt very bad to me to have not only large chunks of code taken without attribution or following the license, but also to have even my \"personal touches\" copied."}}