{"action":"created","comment":{"url":"https://api.github.com/repos/kivy/kivy/pulls/comments/88719284","pull_request_review_id":9284996,"id":88719284,"diff_hunk":"@@ -0,0 +1,383 @@\n+'''\n+Resable Behavior\n+===============\n+\n+The :class:`~kivy.uix.behaviors.resize.ResizableBehavior`\n+`mixin <https://en.wikipedia.org/wiki/Mixin>`_ class provides Resize behavior.\n+When combined with a widget, dragging at the resize enabled widget edge defined by the\n+:attr:`~kivy.uix.behaviors.resize.ResizableBehavior.rborder` will resize the widget.\n+\n+For an overview of behaviors, please refer to the :mod:`~kivy.uix.behaviors`\n+documentation.\n+\n+Example\n+-------\n+\n+The following example adds resize behavior to a sidebar to make it resizable\n+\n+    from kivy.app import App\n+    from kivy.uix.floatlayout import FloatLayout\n+    from kivy.uix.boxlayout import BoxLayout\n+    from kivy.uix.behaviors import ResizableBehavior\n+    from kivy.uix.label import Label\n+    from kivy.metrics import cm\n+    from kivy.uix.button import Button\n+    from kivy.graphics import *\n+\n+\n+    class ResizableSideBar(ResizableBehavior, BoxLayout):\n+        def __init__(self, **kwargs):\n+            super(ResizableSideBar, self).__init__(**kwargs)\n+            self.background = Rectangle(pos=self.pos, size=self.size)\n+            self.resizable_right = True\n+            for x in range(1, 10):\n+                lbl = Label(size_hint=(1, None), height=(cm(1)), text='Text '+str(x))\n+                self.add_widget(lbl)\n+            self.bind(size=lambda obj, val: setattr(self.background, 'size', self.size))\n+\n+            instr = InstructionGroup()\n+            instr.add(Color(0.6, 0.6, 0.7, 1))\n+            instr.add(self.background)\n+            self.canvas.before.add(instr)\n+\n+    class Sample(FloatLayout):\n+        def __init__(self, **kwargs):\n+            super(Sample, self).__init__(**kwargs)\n+            sidebar = ResizableSideBar(orientation='vertical', size_hint=(None, 1), width=cm(4))\n+            self.add_widget(sidebar)\n+\n+\n+    class SampleApp(App):\n+        def build(self):\n+            return Sample()\n+\n+\n+    SampleApp().run()\n+\n+See :class:`~kivy.uix.behaviors.ResizableBehavior` for details.\n+'''\n+\n+from __future__ import print_function\n+from kivy.core.window import Window\n+from kivy.uix.widget import Widget\n+from kivy.properties import BooleanProperty, NumericProperty, \\\n+    StringProperty\n+from kivy.metrics import cm\n+from kivy.graphics import Rectangle\n+from kivy.graphics import InstructionGroup\n+\n+\n+__all__ = ('ResizableBehavior', )\n+\n+\n+class ResizableCursor(Widget):\n+    '''\n+    The ResizableCursor is the mouse cursor\n+\n+    .. versionadded:: 1.9.2\n+    '''\n+\n+    hidden = BooleanProperty(False)\n+    '''State of cursors visibility\n+    It is switched to True when mouse is inside the widgets resize border and False when it isn't.\n+\n+    :attr:`hidden` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    sides = ()\n+    source = StringProperty('')\n+\n+    def __init__(self, parent, **kwargs):\n+        super(ResizableCursor, self).__init__(**kwargs)\n+        self.size_hint = (None, None)\n+        self.pos_hint = (None, None)\n+        self.source = 'data/images/resizable/transparent.png'\n+        self.parent = parent\n+        self.size = (cm(0.6), cm(0.6))\n+        self.pos = [-9999, -9999]\n+\n+        # Makes an instruction group with a rectangle and loads an image inside it\n+        # Binds its properties to mouse positional changes and events triggered\n+        instr = InstructionGroup()\n+        self.rectangle = Rectangle(pos=self.pos, size=self.size, source=self.source)\n+        instr.add(self.rectangle)\n+        self.parent.canvas.after.add(instr)\n+        self.bind(pos=lambda obj, val: setattr(self.rectangle, 'pos', val))\n+        self.bind(source=lambda obj, val: setattr(self.rectangle, 'source', val))\n+        self.bind(hidden=lambda obj, val: self.on_mouse_move(Window.mouse_pos))\n+\n+    def on_mouse_move(self, val):\n+        if self.hidden:\n+            if self.pos[0] != -9999:\n+                self.pos[0] = -9999\n+        else:\n+            self.pos[0] = val[0] - self.width / 2.0\n+            self.pos[1] = val[1] - self.height / 2.0\n+\n+    def change_side(self, left, right, up, down):\n+        # Changes images when ResizableBehavior.hovering_resizable state changes\n+        if not self.hidden and self.sides != (left, right, up, down):\n+            if left and up or right and down:\n+                self.source = 'data/images/resizable/resize2.png'\n+            elif left and down or right and up:\n+                self.source = 'data/images/resizable/resize1.png'\n+            elif left or right:\n+                self.source = 'data/images/resizable/resize_horizontal.png'\n+            elif up or down:\n+                self.source = 'data/images/resizable/resize_vertical.png'\n+            else:\n+                if not any((left, right, up, down)):\n+                    self.source = 'data/images/resizable/transparent.png'\n+            self.sides = (left, right, up, down)\n+\n+\n+class ResizableBehavior(object):\n+    '''\n+    The ResizableBehavior `mixin <https://en.wikipedia.org/wiki/Mixin>`_ class provides Resize behavior.\n+    When combined with a widget, dragging at the resize enabled widget edge defined by the\n+    :attr:`~kivy.uix.behaviors.resize.ResizableBehavior.rborder` will resize the widget. Please see\n+    the :mod:`drag behaviors module <kivy.uix.behaviors.resize>` documentation\n+    for more information.\n+\n+    .. versionadded:: 1.9.2\n+    '''\n+\n+    hovering = BooleanProperty(False)\n+    '''State of mouse hover.\n+    It is switched to True when mouse is on the widget and False when it isn't\n+\n+    :attr:`hovering` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    hovering_resizable = BooleanProperty(False)\n+    '''State of mouse hover.\n+    It is switched to True when mouse is inside the widgets resize border and False when it isn't.\n+\n+    :attr:`hovering_resizable` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    rborder = NumericProperty(cm(0.5))\n+    '''Widgets resizable border size on each side.\n+    Minimum resizing size is limited to rborder * 3 on all sides\n+\n+    :attr:`rborder` is a :class:`~kivy.properties.NumericProperty` and\n+    defaults to 0.5 centimeters.\n+    '''\n+\n+    resizable_left = BooleanProperty(False)\n+    '''Enable / disable resizing on left side\n+\n+    :attr:`resizable_left` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizable_right = BooleanProperty(False)\n+    '''Enable / disable resizing on right side\n+\n+    :attr:`resizable_right` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizable_up = BooleanProperty(False)\n+    '''Enable / disable resizing on upper side\n+\n+    :attr:`resizable_up` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizable_down = BooleanProperty(False)\n+    '''Enable / disable resizing on lower side\n+\n+    :attr:`resizable_down` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizing_left = BooleanProperty(False)\n+    '''A State which is enabled/disabled depending on the position relative to the left resize border\n+    It is switched to True when mouse is inside the left resize border and False when it isn't.\n+    It adjusts the mouse cursor and manages resizing when touch is moved.\n+\n+    :attr:`resizing_left` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizing_right = BooleanProperty(False)\n+    '''A State which is enabled/disabled depending on the position relative to the right resize border\n+    It is switched to True when mouse is inside the right resize border and False when it isn't.\n+    It adjusts the mouse cursor and manages resizing when touch is moved.\n+\n+    :attr:`resizing_right` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizing_up = BooleanProperty(False)\n+    '''A State which is enabled/disabled depending on the position relative to the upper resize border\n+    It is switched to True when mouse is inside the upper resize border and False when it isn't.\n+    It adjusts the mouse cursor and manages resizing when touch is moved.\n+\n+    :attr:`resizing_up` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizing_down = BooleanProperty(False)\n+    '''A State which is enabled/disabled depending on the position relative to the lower resize border\n+    It is switched to True when mouse is inside the lower resize border and False when it isn't.\n+    It adjusts the mouse cursor and manages resizing when touch is moved.\n+\n+    :attr:`resizing_down` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    resizing = BooleanProperty(False)\n+    '''State of widget resizing.\n+    It is switched to True when a resize border is touched and back to False when it is released.\n+    It manages resizing when touch is moved.\n+\n+    :attr:`resizing` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    dont_move = BooleanProperty(False)\n+    '''Move widget when resizing down or left.\n+    Actual position has to keep position on screen when widget has a FloatLayout parent\n+    and is being resized.\n+    Resizing and changing position variables is problematic inside movement restricting widgets,\n+    (StackLayout, BoxLayout, others) this property disables that.\n+\n+    :attr:`dont_move` is a :class:`~kivy.properties.BooleanProperty` and\n+    defaults to False.\n+    '''\n+\n+    def __init__(self, **kwargs):\n+        super(ResizableBehavior, self).__init__(**kwargs)\n+        Window.bind(mouse_pos=lambda obj, val: self.on_mouse_move(val))\n+        self.cursor = None\n+        self.oldpos = []\n+        self.oldsize = []\n+        self.cursor = ResizableCursor(parent=self, size_hint=(None, None), pos_hint=(None, None))\n+\n+    def on_enter(self):\n+        self.on_enter_resizable()\n+\n+    def on_leave(self):\n+        self.cursor.hidden = True\n+\n+    def on_enter_resizable(self):\n+        Window.show_cursor = False\n+        self.cursor.hidden = False\n+\n+    def on_leave_resizable(self):\n+        Window.show_cursor = True\n+        self.cursor.hidden = True\n+\n+    def on_mouse_move(self, pos):\n+        if self.hovering:\n+            if self.cursor:\n+                self.cursor.on_mouse_move(pos)\n+            if not self.resizing:\n+                if not self.collide_point(pos[0], pos[1]):\n+                    self.hovering = False\n+                    self.on_leave()\n+                    self.on_leave_resizable()\n+                else:\n+                    chkr = self.check_resizable_side(pos)\n+                    if chkr != self.hovering_resizable:\n+                        self.hovering_resizable = chkr\n+                        if chkr:\n+                            self.on_enter_resizable()\n+                            self.cursor.hidden = False\n+                        else:\n+                            self.on_leave_resizable()\n+                            self.cursor.hidden = True\n+        else:\n+            if self.collide_point(pos[0], pos[1]):\n+                self.hovering = True\n+                if not self.resizing:\n+                    self.check_resizable_side(pos)\n+                self.on_enter()\n+\n+    def check_resizable_side(self, mpos):\n+        if self.resizable_left:\n+            self.resizing_left = False\n+            if mpos[0] > self.pos[0]:\n+                if mpos[0] < self.pos[0] + self.rborder:\n+                    self.resizing_left = True\n+        if self.resizable_right and not self.resizing_left:\n+            self.resizing_right = False\n+            if mpos[0] < self.pos[0] + self.width:\n+                if mpos[0] > self.pos[0] + self.width - self.rborder:\n+                    self.resizing_right = True\n+        if self.resizable_down:\n+            self.resizing_down = False\n+            if mpos[1] > self.pos[1]:\n+                if mpos[1] < self.pos[1] + self.rborder:\n+                    self.resizing_down = True\n+        if self.resizable_up and not self.resizing_down:\n+            self.resizing_up = False\n+            if mpos[1] < self.pos[1] + self.height:\n+                if mpos[1] > self.pos[1] + self.height - self.rborder:\n+                    self.resizing_up = True\n+        if self.cursor:\n+            self.cursor.change_side(self.resizing_left, self.resizing_right, self.resizing_up, self.resizing_down)\n+        if self.resizing_left or self.resizing_right or self.resizing_up or self.resizing_down:\n+            return True\n+        else:\n+            return False\n+\n+    def on_touch_down(self, touch):\n+        if self.hovering:\n+            if any([self.resizing_right, self.resizing_left, self.resizing_down, self.resizing_up]):\n+                self.oldpos = list(self.pos)\n+                self.oldsize = list(self.size)\n+                self.resizing = True\n+                Window.show_cursor = False\n+                return True\n+            else:\n+                return super(ResizableBehavior, self).on_touch_down(touch)\n+        else:\n+            return super(ResizableBehavior, self).on_touch_down(touch)\n+\n+    def on_touch_move(self, touch):\n+        if self.resizing:","path":"kivy/uix/behaviors/resize.py","position":344,"original_position":344,"commit_id":"6a1bf9ee48c4650e0975e3e52b05eb90037eba0f","original_commit_id":"6a1bf9ee48c4650e0975e3e52b05eb90037eba0f","user":{"login":"KeyWeeUsr","id":8825439,"avatar_url":"https://avatars.githubusercontent.com/u/8825439?v=3","gravatar_id":"","url":"https://api.github.com/users/KeyWeeUsr","html_url":"https://github.com/KeyWeeUsr","followers_url":"https://api.github.com/users/KeyWeeUsr/followers","following_url":"https://api.github.com/users/KeyWeeUsr/following{/other_user}","gists_url":"https://api.github.com/users/KeyWeeUsr/gists{/gist_id}","starred_url":"https://api.github.com/users/KeyWeeUsr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KeyWeeUsr/subscriptions","organizations_url":"https://api.github.com/users/KeyWeeUsr/orgs","repos_url":"https://api.github.com/users/KeyWeeUsr/repos","events_url":"https://api.github.com/users/KeyWeeUsr/events{/privacy}","received_events_url":"https://api.github.com/users/KeyWeeUsr/received_events","type":"User","site_admin":false},"body":"`if not self.resizing: return super(...)` and another block down","created_at":"2016-11-18T19:08:39Z","updated_at":"2016-11-18T19:08:39Z","html_url":"https://github.com/kivy/kivy/pull/4734#discussion_r88719284","pull_request_url":"https://api.github.com/repos/kivy/kivy/pulls/4734","_links":{"self":{"href":"https://api.github.com/repos/kivy/kivy/pulls/comments/88719284"},"html":{"href":"https://github.com/kivy/kivy/pull/4734#discussion_r88719284"},"pull_request":{"href":"https://api.github.com/repos/kivy/kivy/pulls/4734"}}},"pull_request":{"url":"https://api.github.com/repos/kivy/kivy/pulls/4734","id":94389802,"html_url":"https://github.com/kivy/kivy/pull/4734","diff_url":"https://github.com/kivy/kivy/pull/4734.diff","patch_url":"https://github.com/kivy/kivy/pull/4734.patch","issue_url":"https://api.github.com/repos/kivy/kivy/issues/4734","number":4734,"state":"open","locked":false,"title":"Add resizable behavior for kivy widgets","user":{"login":"Bakterija","id":14078763,"avatar_url":"https://avatars.githubusercontent.com/u/14078763?v=3","gravatar_id":"","url":"https://api.github.com/users/Bakterija","html_url":"https://github.com/Bakterija","followers_url":"https://api.github.com/users/Bakterija/followers","following_url":"https://api.github.com/users/Bakterija/following{/other_user}","gists_url":"https://api.github.com/users/Bakterija/gists{/gist_id}","starred_url":"https://api.github.com/users/Bakterija/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bakterija/subscriptions","organizations_url":"https://api.github.com/users/Bakterija/orgs","repos_url":"https://api.github.com/users/Bakterija/repos","events_url":"https://api.github.com/users/Bakterija/events{/privacy}","received_events_url":"https://api.github.com/users/Bakterija/received_events","type":"User","site_admin":false},"body":"Hello. I was thinking that this kind of resizable behavior would be useful to many kivy coders and made a kivy style behavior from it that i would like to merge now.\r\nCan't remember where from i got the icon, but it's this one http://www.creativehunt.co/icons/resize-icon/.\r\nIt says that license is public domain, not sure if/where i have to add it in kivy. ","created_at":"2016-11-18T16:13:31Z","updated_at":"2016-11-18T19:12:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3ca7798645483a3f4853fad3e4e8a6ff3357b268","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/kivy/kivy/pulls/4734/commits","review_comments_url":"https://api.github.com/repos/kivy/kivy/pulls/4734/comments","review_comment_url":"https://api.github.com/repos/kivy/kivy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kivy/kivy/issues/4734/comments","statuses_url":"https://api.github.com/repos/kivy/kivy/statuses/6a1bf9ee48c4650e0975e3e52b05eb90037eba0f","head":{"label":"Bakterija:master","ref":"master","sha":"6a1bf9ee48c4650e0975e3e52b05eb90037eba0f","user":{"login":"Bakterija","id":14078763,"avatar_url":"https://avatars.githubusercontent.com/u/14078763?v=3","gravatar_id":"","url":"https://api.github.com/users/Bakterija","html_url":"https://github.com/Bakterija","followers_url":"https://api.github.com/users/Bakterija/followers","following_url":"https://api.github.com/users/Bakterija/following{/other_user}","gists_url":"https://api.github.com/users/Bakterija/gists{/gist_id}","starred_url":"https://api.github.com/users/Bakterija/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bakterija/subscriptions","organizations_url":"https://api.github.com/users/Bakterija/orgs","repos_url":"https://api.github.com/users/Bakterija/repos","events_url":"https://api.github.com/users/Bakterija/events{/privacy}","received_events_url":"https://api.github.com/users/Bakterija/received_events","type":"User","site_admin":false},"repo":{"id":74142871,"name":"kivy","full_name":"Bakterija/kivy","owner":{"login":"Bakterija","id":14078763,"avatar_url":"https://avatars.githubusercontent.com/u/14078763?v=3","gravatar_id":"","url":"https://api.github.com/users/Bakterija","html_url":"https://github.com/Bakterija","followers_url":"https://api.github.com/users/Bakterija/followers","following_url":"https://api.github.com/users/Bakterija/following{/other_user}","gists_url":"https://api.github.com/users/Bakterija/gists{/gist_id}","starred_url":"https://api.github.com/users/Bakterija/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bakterija/subscriptions","organizations_url":"https://api.github.com/users/Bakterija/orgs","repos_url":"https://api.github.com/users/Bakterija/repos","events_url":"https://api.github.com/users/Bakterija/events{/privacy}","received_events_url":"https://api.github.com/users/Bakterija/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Bakterija/kivy","description":"Open source UI framework written in Python, running on Windows, Linux, OS X, Android and iOS","fork":true,"url":"https://api.github.com/repos/Bakterija/kivy","forks_url":"https://api.github.com/repos/Bakterija/kivy/forks","keys_url":"https://api.github.com/repos/Bakterija/kivy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Bakterija/kivy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Bakterija/kivy/teams","hooks_url":"https://api.github.com/repos/Bakterija/kivy/hooks","issue_events_url":"https://api.github.com/repos/Bakterija/kivy/issues/events{/number}","events_url":"https://api.github.com/repos/Bakterija/kivy/events","assignees_url":"https://api.github.com/repos/Bakterija/kivy/assignees{/user}","branches_url":"https://api.github.com/repos/Bakterija/kivy/branches{/branch}","tags_url":"https://api.github.com/repos/Bakterija/kivy/tags","blobs_url":"https://api.github.com/repos/Bakterija/kivy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Bakterija/kivy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Bakterija/kivy/git/refs{/sha}","trees_url":"https://api.github.com/repos/Bakterija/kivy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Bakterija/kivy/statuses/{sha}","languages_url":"https://api.github.com/repos/Bakterija/kivy/languages","stargazers_url":"https://api.github.com/repos/Bakterija/kivy/stargazers","contributors_url":"https://api.github.com/repos/Bakterija/kivy/contributors","subscribers_url":"https://api.github.com/repos/Bakterija/kivy/subscribers","subscription_url":"https://api.github.com/repos/Bakterija/kivy/subscription","commits_url":"https://api.github.com/repos/Bakterija/kivy/commits{/sha}","git_commits_url":"https://api.github.com/repos/Bakterija/kivy/git/commits{/sha}","comments_url":"https://api.github.com/repos/Bakterija/kivy/comments{/number}","issue_comment_url":"https://api.github.com/repos/Bakterija/kivy/issues/comments{/number}","contents_url":"https://api.github.com/repos/Bakterija/kivy/contents/{+path}","compare_url":"https://api.github.com/repos/Bakterija/kivy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Bakterija/kivy/merges","archive_url":"https://api.github.com/repos/Bakterija/kivy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Bakterija/kivy/downloads","issues_url":"https://api.github.com/repos/Bakterija/kivy/issues{/number}","pulls_url":"https://api.github.com/repos/Bakterija/kivy/pulls{/number}","milestones_url":"https://api.github.com/repos/Bakterija/kivy/milestones{/number}","notifications_url":"https://api.github.com/repos/Bakterija/kivy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Bakterija/kivy/labels{/name}","releases_url":"https://api.github.com/repos/Bakterija/kivy/releases{/id}","deployments_url":"https://api.github.com/repos/Bakterija/kivy/deployments","created_at":"2016-11-18T15:40:30Z","updated_at":"2016-11-18T15:40:34Z","pushed_at":"2016-11-18T16:09:02Z","git_url":"git://github.com/Bakterija/kivy.git","ssh_url":"git@github.com:Bakterija/kivy.git","clone_url":"https://github.com/Bakterija/kivy.git","svn_url":"https://github.com/Bakterija/kivy","homepage":"https://kivy.org","size":50927,"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":"kivy:master","ref":"master","sha":"081f610b6c8d464e8ae9149b31baff5619c912e6","user":{"login":"kivy","id":1266152,"avatar_url":"https://avatars.githubusercontent.com/u/1266152?v=3","gravatar_id":"","url":"https://api.github.com/users/kivy","html_url":"https://github.com/kivy","followers_url":"https://api.github.com/users/kivy/followers","following_url":"https://api.github.com/users/kivy/following{/other_user}","gists_url":"https://api.github.com/users/kivy/gists{/gist_id}","starred_url":"https://api.github.com/users/kivy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kivy/subscriptions","organizations_url":"https://api.github.com/users/kivy/orgs","repos_url":"https://api.github.com/users/kivy/repos","events_url":"https://api.github.com/users/kivy/events{/privacy}","received_events_url":"https://api.github.com/users/kivy/received_events","type":"Organization","site_admin":false},"repo":{"id":1049095,"name":"kivy","full_name":"kivy/kivy","owner":{"login":"kivy","id":1266152,"avatar_url":"https://avatars.githubusercontent.com/u/1266152?v=3","gravatar_id":"","url":"https://api.github.com/users/kivy","html_url":"https://github.com/kivy","followers_url":"https://api.github.com/users/kivy/followers","following_url":"https://api.github.com/users/kivy/following{/other_user}","gists_url":"https://api.github.com/users/kivy/gists{/gist_id}","starred_url":"https://api.github.com/users/kivy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kivy/subscriptions","organizations_url":"https://api.github.com/users/kivy/orgs","repos_url":"https://api.github.com/users/kivy/repos","events_url":"https://api.github.com/users/kivy/events{/privacy}","received_events_url":"https://api.github.com/users/kivy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kivy/kivy","description":"Open source UI framework written in Python, running on Windows, Linux, OS X, Android and iOS","fork":false,"url":"https://api.github.com/repos/kivy/kivy","forks_url":"https://api.github.com/repos/kivy/kivy/forks","keys_url":"https://api.github.com/repos/kivy/kivy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kivy/kivy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kivy/kivy/teams","hooks_url":"https://api.github.com/repos/kivy/kivy/hooks","issue_events_url":"https://api.github.com/repos/kivy/kivy/issues/events{/number}","events_url":"https://api.github.com/repos/kivy/kivy/events","assignees_url":"https://api.github.com/repos/kivy/kivy/assignees{/user}","branches_url":"https://api.github.com/repos/kivy/kivy/branches{/branch}","tags_url":"https://api.github.com/repos/kivy/kivy/tags","blobs_url":"https://api.github.com/repos/kivy/kivy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kivy/kivy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kivy/kivy/git/refs{/sha}","trees_url":"https://api.github.com/repos/kivy/kivy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kivy/kivy/statuses/{sha}","languages_url":"https://api.github.com/repos/kivy/kivy/languages","stargazers_url":"https://api.github.com/repos/kivy/kivy/stargazers","contributors_url":"https://api.github.com/repos/kivy/kivy/contributors","subscribers_url":"https://api.github.com/repos/kivy/kivy/subscribers","subscription_url":"https://api.github.com/repos/kivy/kivy/subscription","commits_url":"https://api.github.com/repos/kivy/kivy/commits{/sha}","git_commits_url":"https://api.github.com/repos/kivy/kivy/git/commits{/sha}","comments_url":"https://api.github.com/repos/kivy/kivy/comments{/number}","issue_comment_url":"https://api.github.com/repos/kivy/kivy/issues/comments{/number}","contents_url":"https://api.github.com/repos/kivy/kivy/contents/{+path}","compare_url":"https://api.github.com/repos/kivy/kivy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kivy/kivy/merges","archive_url":"https://api.github.com/repos/kivy/kivy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kivy/kivy/downloads","issues_url":"https://api.github.com/repos/kivy/kivy/issues{/number}","pulls_url":"https://api.github.com/repos/kivy/kivy/pulls{/number}","milestones_url":"https://api.github.com/repos/kivy/kivy/milestones{/number}","notifications_url":"https://api.github.com/repos/kivy/kivy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kivy/kivy/labels{/name}","releases_url":"https://api.github.com/repos/kivy/kivy/releases{/id}","deployments_url":"https://api.github.com/repos/kivy/kivy/deployments","created_at":"2010-11-03T20:27:32Z","updated_at":"2016-11-18T11:38:23Z","pushed_at":"2016-11-18T16:13:31Z","git_url":"git://github.com/kivy/kivy.git","ssh_url":"git@github.com:kivy/kivy.git","clone_url":"https://github.com/kivy/kivy.git","svn_url":"https://github.com/kivy/kivy","homepage":"https://kivy.org","size":159406,"stargazers_count":5066,"watchers_count":5066,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1306,"mirror_url":null,"open_issues_count":610,"forks":1306,"open_issues":610,"watchers":5066,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kivy/kivy/pulls/4734"},"html":{"href":"https://github.com/kivy/kivy/pull/4734"},"issue":{"href":"https://api.github.com/repos/kivy/kivy/issues/4734"},"comments":{"href":"https://api.github.com/repos/kivy/kivy/issues/4734/comments"},"review_comments":{"href":"https://api.github.com/repos/kivy/kivy/pulls/4734/comments"},"review_comment":{"href":"https://api.github.com/repos/kivy/kivy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kivy/kivy/pulls/4734/commits"},"statuses":{"href":"https://api.github.com/repos/kivy/kivy/statuses/6a1bf9ee48c4650e0975e3e52b05eb90037eba0f"}}}}
{"actor":{"display_login":"KeyWeeUsr"}}