{"action":"created","comment":{"url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/comments/69057326","id":69057326,"diff_hunk":"@@ -2,160 +2,393 @@\n \n import logging\n import json\n+import os\n import requests\n from . import util\n from . import api\n \n+log_format = '%(asctime)s | %(levelname)7s | %(name)s | line:%(lineno)4s | %(message)s'\n+logging.basicConfig(format=log_format, level=logging.DEBUG)\n \n logger = logging.getLogger(__name__)\n-logger.setLevel(logging.INFO)\n+log = logger\n+\n+# Define some\n+KEY_OUTCOME = \"outcome\"\n+KEY_RESULT = \"result\"\n \n \n class Client(requests.Session,\n              api.HostApiMixin,\n              api.ServerApiMixin,\n              api.DeploymentApiMixin):\n \n-  DEFAULT_MANAGEMENT_PORT = '9990'\n-  DEFAULT_MANAGEMENT_USER = 'admin'\n-  DEFAULT_MANAGEMENT_PWD = 'admin'\n-  DEFAULT_TIMEOUT = 5000\n-\n-  def __init__(self, host, port=DEFAULT_MANAGEMENT_PORT,\n-               username=DEFAULT_MANAGEMENT_USER, password=DEFAULT_MANAGEMENT_PWD,\n-               timeout=DEFAULT_TIMEOUT):\n-    \"\"\"\n-    Creates an object that interacts with WildFly via HTTP request\n-    :param  hostname  The hostname of the WildFly domain controller\n-    :param  port      The port used to access the WildFly UI\n-    :param  username  The WildFly username\n-    :param  password  The WildFly username's password\n-    :param  timeout   The timeout\n-    \"\"\"\n-    super(Client, self).__init__()\n-    self.username = username\n-    self.password = password\n-    self.host = host\n-    self.port = port\n-    self.endpoint = 'http://{}:{}/management'.format(self.host, self.port)\n-\n-  def _post(self, request):\n-\n-    logger.debug('Request: {}'.format(request))\n-    headers = {'content-type': 'application/json'}\n-    response = requests.post(self.endpoint, headers=headers,\n-                             auth=requests.auth.HTTPDigestAuth(self.username, self.password),\n-                             data=json.dumps(request))\n-    if response.status_code in [200, 204]:\n-      logger.debug('Response Status Code: {}: {}'.format(response.status_code, response.reason))\n-    elif response.status_code == 500:\n-      logger.debug('Response Status Code: {}: {}'.format(response.status_code, response.json()))\n-    else:\n-      response.raise_for_status()\n-    logger.debug('Response: {}'.format(response.json()))\n-    return response\n-\n-  def execute(self, operation, parameters={}, address=[]):\n-    \"\"\" Execute operation on resource. \"\"\"\n-\n-    request = {'address': address, 'operation': operation}\n-    request.update(parameters)\n-    response = self._post(request)\n-    return response\n-  \n-  def add(self, address, parameters=None):\n-    \"\"\" Creates a new management resource. \"\"\"\n-\n-    response = self.execute('add', parameters, address)\n-    return response\n-\n-  def remove(self, address):\n-    \"\"\" Removes an existing resource. \"\"\"\n-\n-    response = self.execute('remove', address=address)\n-    return response\n-\n-  def read_resource(self, address=[], recursive=False, recursive_depth=10,\n-                    runtime=False, include_defaults=True, attributes_only=False):\n-    \"\"\" Reads a resource's attribute values along with either\n-        basic or complete information about any child resources. \"\"\"\n-    \n-    response = self.execute('read-resource',\n-                            {'recursive': recursive,\n-                             'recursive_depth': recursive_depth,\n-                             'runtime': runtime,\n-                             'include_defaults': include_defaults,\n-                             'attributes_only': attributes_only},\n-                            address)\n-    return response\n+    DEFAULT_MANAGEMENT_PORT = '9990'\n+    DEFAULT_MANAGEMENT_USER = 'admin'\n+    DEFAULT_MANAGEMENT_PWD = 'admin'\n+    DEFAULT_TIMEOUT = 5000\n+\n+    def __init__(self, host, port=DEFAULT_MANAGEMENT_PORT,\n+                 username=DEFAULT_MANAGEMENT_USER, password=DEFAULT_MANAGEMENT_PWD,\n+                 timeout=DEFAULT_TIMEOUT):\n+        \"\"\"\n+        Creates an object that interacts with WildFly via HTTP request\n+        :param  hostname  The hostname of the WildFly domain controller\n+        :param  port      The port used to access the WildFly UI\n+        :param  username  The WildFly username\n+        :param  password  The WildFly username's password\n+        :param  timeout   The timeout\n+        \"\"\"\n+        super(Client, self).__init__()\n+        self.username = username\n+        self.password = password\n+        self.host = host\n+        self.port = port\n+        self.endpoint = 'http://{}:{}/management'.format(self.host, self.port)\n+        self._hostname_map = self._get_hostname_map()\n+\n+    def _post(self, request):\n+\n+        logger.debug('Request: {}'.format(request))\n+        headers = {'content-type': 'application/json'}\n+        response = requests.post(self.endpoint, headers=headers,\n+                                 auth=requests.auth.HTTPDigestAuth(self.username, self.password),\n+                                 data=json.dumps(request))\n+        if response.status_code in [200, 204]:\n+          logger.debug('Response Status Code: {}: {}'.format(response.status_code, response.reason))\n+        elif response.status_code == 500:\n+          logger.debug('Response Status Code: {}: {}'.format(response.status_code, response.json()))\n+        else:\n+          response.raise_for_status()\n+        logger.debug('Response: {}'.format(response.json()))\n+        return response\n+\n+    def execute(self, operation, parameters={}, address=[]):\n+        \"\"\" Execute operation on resource. \"\"\"\n+\n+        request = {'address': address, 'operation': operation}\n+        request.update(parameters)\n+        response = self._post(request)\n+        return response\n   \n-  def read_attribute(self, name, address=[], include_defaults=True):\n-    \"\"\" Read attribute of resource. \"\"\"\n-\n-    response = self.execute('read-attribute',\n-                            {'name': name, 'include-defaults': include_defaults},\n-                            address)\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def write_attribute(self, name, value, address=[]):\n-    \"\"\" Write value of attribute of resource. \"\"\"\n-\n-    response = self.execute('write-attribute',\n-                            {'name': name, 'value': value},\n-                            address)\n-    return response\n-\n-  def unset_attribute(self, name, address=[]):\n-    \"\"\" Sets the value of an individual attribute to the undefined value. \"\"\"\n-\n-    response = self.execute('unset-attribute',\n-                            {'name': name},\n-                            address)\n-    response = response.json()\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def read_children_names(self, child_type, address=[]):\n-    \"\"\" Returns a list of the names of all child resources of a given type. \"\"\"\n-\n-    response = self.execute('read-children-names',\n-                            {'child-type': child_type},\n-                            address)\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def read_children_resources(self, child_type, address=[], runtime=False):\n-    \"\"\" Returns a list of the resources of all child resources of a given type. \"\"\"\n-\n-    response = self.execute('read-children-resources',\n-                            {'child-type': child_type, 'include-runtime': runtime},\n-                            address)\n-    logger.debug(response.json())\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def read_operation_names(self, address=[]):\n-    \"\"\" Returns a list of the names of all the operations the resource supports. \"\"\"\n-\n-    response = self.execute('read-operation-names',\n-                            address)\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def read_operation_description(self, name, address=[]):\n-    \"\"\" Returns the description of an operation, along with details of\n-    its parameter types and its return value. \"\"\"\n-\n-    response = self.execute('read-operation-description',\n-                            {'name': name},\n-                            address)\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def read_children_types(self, address=[]):\n-    \"\"\" Returns a list of the types of child resources the resource supports. \"\"\"\n-\n-    response = self.execute('read-children-types',\n-                            address)\n-    return response.json()['result'] if util.is_success(response) else None\n-\n-  def version(self):\n-    \"\"\" Prints version of WildFly. \"\"\"\n-    \n-    result = self.read_attribute('release-version')\n-    return result\n+    def add(self, address, parameters=None):\n+        \"\"\" Creates a new management resource. \"\"\"\n+\n+        response = self.execute('add', parameters, address)\n+        return response\n+\n+    def remove(self, address):\n+        \"\"\" Removes an existing resource. \"\"\"\n+\n+        response = self.execute('remove', address=address)\n+        return response\n+\n+    def read_resource(self, address=[], recursive=False, recursive_depth=10,\n+                      runtime=False, include_defaults=True, attributes_only=False):\n+        \"\"\" Reads a resource's attribute values along with either\n+            basic or complete information about any child resources. \"\"\"\n+\n+        response = self.execute('read-resource',\n+                                {'recursive': recursive,\n+                                 'recursive_depth': recursive_depth,\n+                                 'runtime': runtime,\n+                                 'include_defaults': include_defaults,\n+                                 'attributes_only': attributes_only},\n+                                address)\n+        return response\n+\n+    def read_attribute(self, name, address=[], include_defaults=True):\n+        \"\"\" Read attribute of resource. \"\"\"\n+\n+        response = self.execute('read-attribute',\n+                                {'name': name, 'include-defaults': include_defaults},\n+                                address)\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def write_attribute(self, name, value, address=[]):\n+        \"\"\" Write value of attribute of resource. \"\"\"\n+\n+        response = self.execute('write-attribute',\n+                                {'name': name, 'value': value},\n+                                address)\n+        return response\n+\n+    def unset_attribute(self, name, address=[]):\n+        \"\"\" Sets the value of an individual attribute to the undefined value. \"\"\"\n+\n+        response = self.execute('unset-attribute',\n+                                {'name': name},\n+                                address)\n+        response = response.json()\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def read_children_names(self, child_type, address=[]):\n+        \"\"\" Returns a list of the names of all child resources of a given type. \"\"\"\n+\n+        response = self.execute('read-children-names',\n+                                {'child-type': child_type},\n+                                address)\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def read_children_resources(self, child_type, address=[], runtime=False):\n+        \"\"\" Returns a list of the resources of all child resources of a given type. \"\"\"\n+\n+        response = self.execute('read-children-resources',\n+                                {'child-type': child_type, 'include-runtime': runtime},\n+                                address)\n+        logger.debug(response.json())\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def read_operation_names(self, address=[]):\n+        \"\"\" Returns a list of the names of all the operations the resource supports. \"\"\"\n+\n+        response = self.execute('read-operation-names',\n+                                address)\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def read_operation_description(self, name, address=[]):\n+        \"\"\" Returns the description of an operation, along with details of\n+        its parameter types and its return value. \"\"\"\n+\n+        response = self.execute('read-operation-description',\n+                                {'name': name},\n+                                address)\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def read_children_types(self, address=[]):\n+        \"\"\" Returns a list of the types of child resources the resource supports. \"\"\"\n+\n+        response = self.execute('read-children-types',\n+                                address)\n+        return response.json()['result'] if util.is_success(response) else None\n+\n+    def version(self):\n+        \"\"\" Prints version of WildFly. \"\"\"\n+\n+        result = self.read_attribute('release-version')\n+        return result\n+\n+    def get_raw_server_groups_info(self):\n+        \"\"\"\n+        Run the equivalent WildFly CLI command   /server-group=*:read-resource\n+        :return a dictionary representing the response\n+        \"\"\"\n+\n+        address = [{'server-group': '*'}]\n+        resp = self.read_resource(address)\n+        return resp.json()\n+\n+    def get_deployed_apps(self, server_group=None):","path":"wildfly/client.py","position":322,"original_position":323,"commit_id":"68e403311acea3e3de234e1933cfc49b82e3654f","original_commit_id":"68e403311acea3e3de234e1933cfc49b82e3654f","user":{"login":"zsuzhengdu","id":1986459,"avatar_url":"https://avatars.githubusercontent.com/u/1986459?v=3","gravatar_id":"","url":"https://api.github.com/users/zsuzhengdu","html_url":"https://github.com/zsuzhengdu","followers_url":"https://api.github.com/users/zsuzhengdu/followers","following_url":"https://api.github.com/users/zsuzhengdu/following{/other_user}","gists_url":"https://api.github.com/users/zsuzhengdu/gists{/gist_id}","starred_url":"https://api.github.com/users/zsuzhengdu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zsuzhengdu/subscriptions","organizations_url":"https://api.github.com/users/zsuzhengdu/orgs","repos_url":"https://api.github.com/users/zsuzhengdu/repos","events_url":"https://api.github.com/users/zsuzhengdu/events{/privacy}","received_events_url":"https://api.github.com/users/zsuzhengdu/received_events","type":"User","site_admin":false},"body":"Implemented at https://github.com/cenx-cf/wildfly-py/blob/master/wildfly/api/deployment.py#L19","created_at":"2016-06-30T01:35:35Z","updated_at":"2016-06-30T01:35:35Z","html_url":"https://github.com/cenx-cf/wildfly-py/pull/7#discussion_r69057326","pull_request_url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7","_links":{"self":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/comments/69057326"},"html":{"href":"https://github.com/cenx-cf/wildfly-py/pull/7#discussion_r69057326"},"pull_request":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7","id":72896441,"html_url":"https://github.com/cenx-cf/wildfly-py/pull/7","diff_url":"https://github.com/cenx-cf/wildfly-py/pull/7.diff","patch_url":"https://github.com/cenx-cf/wildfly-py/pull/7.patch","issue_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/7","number":7,"state":"open","locked":false,"title":"Ensure HTTP request outcome is 'success' before trying to read the response (read-attribute function) and add other functionality","user":{"login":"bkhouri","id":10914661,"avatar_url":"https://avatars.githubusercontent.com/u/10914661?v=3","gravatar_id":"","url":"https://api.github.com/users/bkhouri","html_url":"https://github.com/bkhouri","followers_url":"https://api.github.com/users/bkhouri/followers","following_url":"https://api.github.com/users/bkhouri/following{/other_user}","gists_url":"https://api.github.com/users/bkhouri/gists{/gist_id}","starred_url":"https://api.github.com/users/bkhouri/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bkhouri/subscriptions","organizations_url":"https://api.github.com/users/bkhouri/orgs","repos_url":"https://api.github.com/users/bkhouri/repos","events_url":"https://api.github.com/users/bkhouri/events{/privacy}","received_events_url":"https://api.github.com/users/bkhouri/received_events","type":"User","site_admin":false},"body":"Added an 'error check' in the read_attributes function, and also simplified a few other function's return call","created_at":"2016-06-07T15:27:08Z","updated_at":"2016-06-30T01:35:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a9f8e45e4df0fb2d6ea051f8adb002f3422b92af","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7/commits","review_comments_url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7/comments","review_comment_url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/7/comments","statuses_url":"https://api.github.com/repos/cenx-cf/wildfly-py/statuses/68e403311acea3e3de234e1933cfc49b82e3654f","head":{"label":"cenx-cf:t/master/some-fixes","ref":"t/master/some-fixes","sha":"68e403311acea3e3de234e1933cfc49b82e3654f","user":{"login":"cenx-cf","id":15056051,"avatar_url":"https://avatars.githubusercontent.com/u/15056051?v=3","gravatar_id":"","url":"https://api.github.com/users/cenx-cf","html_url":"https://github.com/cenx-cf","followers_url":"https://api.github.com/users/cenx-cf/followers","following_url":"https://api.github.com/users/cenx-cf/following{/other_user}","gists_url":"https://api.github.com/users/cenx-cf/gists{/gist_id}","starred_url":"https://api.github.com/users/cenx-cf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cenx-cf/subscriptions","organizations_url":"https://api.github.com/users/cenx-cf/orgs","repos_url":"https://api.github.com/users/cenx-cf/repos","events_url":"https://api.github.com/users/cenx-cf/events{/privacy}","received_events_url":"https://api.github.com/users/cenx-cf/received_events","type":"Organization","site_admin":false},"repo":{"id":44142362,"name":"wildfly-py","full_name":"cenx-cf/wildfly-py","owner":{"login":"cenx-cf","id":15056051,"avatar_url":"https://avatars.githubusercontent.com/u/15056051?v=3","gravatar_id":"","url":"https://api.github.com/users/cenx-cf","html_url":"https://github.com/cenx-cf","followers_url":"https://api.github.com/users/cenx-cf/followers","following_url":"https://api.github.com/users/cenx-cf/following{/other_user}","gists_url":"https://api.github.com/users/cenx-cf/gists{/gist_id}","starred_url":"https://api.github.com/users/cenx-cf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cenx-cf/subscriptions","organizations_url":"https://api.github.com/users/cenx-cf/orgs","repos_url":"https://api.github.com/users/cenx-cf/repos","events_url":"https://api.github.com/users/cenx-cf/events{/privacy}","received_events_url":"https://api.github.com/users/cenx-cf/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cenx-cf/wildfly-py","description":"WildFly Management Python API","fork":false,"url":"https://api.github.com/repos/cenx-cf/wildfly-py","forks_url":"https://api.github.com/repos/cenx-cf/wildfly-py/forks","keys_url":"https://api.github.com/repos/cenx-cf/wildfly-py/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cenx-cf/wildfly-py/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cenx-cf/wildfly-py/teams","hooks_url":"https://api.github.com/repos/cenx-cf/wildfly-py/hooks","issue_events_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/events{/number}","events_url":"https://api.github.com/repos/cenx-cf/wildfly-py/events","assignees_url":"https://api.github.com/repos/cenx-cf/wildfly-py/assignees{/user}","branches_url":"https://api.github.com/repos/cenx-cf/wildfly-py/branches{/branch}","tags_url":"https://api.github.com/repos/cenx-cf/wildfly-py/tags","blobs_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/refs{/sha}","trees_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cenx-cf/wildfly-py/statuses/{sha}","languages_url":"https://api.github.com/repos/cenx-cf/wildfly-py/languages","stargazers_url":"https://api.github.com/repos/cenx-cf/wildfly-py/stargazers","contributors_url":"https://api.github.com/repos/cenx-cf/wildfly-py/contributors","subscribers_url":"https://api.github.com/repos/cenx-cf/wildfly-py/subscribers","subscription_url":"https://api.github.com/repos/cenx-cf/wildfly-py/subscription","commits_url":"https://api.github.com/repos/cenx-cf/wildfly-py/commits{/sha}","git_commits_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/commits{/sha}","comments_url":"https://api.github.com/repos/cenx-cf/wildfly-py/comments{/number}","issue_comment_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/comments{/number}","contents_url":"https://api.github.com/repos/cenx-cf/wildfly-py/contents/{+path}","compare_url":"https://api.github.com/repos/cenx-cf/wildfly-py/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cenx-cf/wildfly-py/merges","archive_url":"https://api.github.com/repos/cenx-cf/wildfly-py/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cenx-cf/wildfly-py/downloads","issues_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues{/number}","pulls_url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls{/number}","milestones_url":"https://api.github.com/repos/cenx-cf/wildfly-py/milestones{/number}","notifications_url":"https://api.github.com/repos/cenx-cf/wildfly-py/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cenx-cf/wildfly-py/labels{/name}","releases_url":"https://api.github.com/repos/cenx-cf/wildfly-py/releases{/id}","deployments_url":"https://api.github.com/repos/cenx-cf/wildfly-py/deployments","created_at":"2015-10-13T00:44:50Z","updated_at":"2016-05-17T13:05:45Z","pushed_at":"2016-06-14T15:32:18Z","git_url":"git://github.com/cenx-cf/wildfly-py.git","ssh_url":"git@github.com:cenx-cf/wildfly-py.git","clone_url":"https://github.com/cenx-cf/wildfly-py.git","svn_url":"https://github.com/cenx-cf/wildfly-py","homepage":"","size":50,"stargazers_count":4,"watchers_count":4,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":4,"default_branch":"master"}},"base":{"label":"cenx-cf:master","ref":"master","sha":"42ad873b084a475c17960510ce923ad173623018","user":{"login":"cenx-cf","id":15056051,"avatar_url":"https://avatars.githubusercontent.com/u/15056051?v=3","gravatar_id":"","url":"https://api.github.com/users/cenx-cf","html_url":"https://github.com/cenx-cf","followers_url":"https://api.github.com/users/cenx-cf/followers","following_url":"https://api.github.com/users/cenx-cf/following{/other_user}","gists_url":"https://api.github.com/users/cenx-cf/gists{/gist_id}","starred_url":"https://api.github.com/users/cenx-cf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cenx-cf/subscriptions","organizations_url":"https://api.github.com/users/cenx-cf/orgs","repos_url":"https://api.github.com/users/cenx-cf/repos","events_url":"https://api.github.com/users/cenx-cf/events{/privacy}","received_events_url":"https://api.github.com/users/cenx-cf/received_events","type":"Organization","site_admin":false},"repo":{"id":44142362,"name":"wildfly-py","full_name":"cenx-cf/wildfly-py","owner":{"login":"cenx-cf","id":15056051,"avatar_url":"https://avatars.githubusercontent.com/u/15056051?v=3","gravatar_id":"","url":"https://api.github.com/users/cenx-cf","html_url":"https://github.com/cenx-cf","followers_url":"https://api.github.com/users/cenx-cf/followers","following_url":"https://api.github.com/users/cenx-cf/following{/other_user}","gists_url":"https://api.github.com/users/cenx-cf/gists{/gist_id}","starred_url":"https://api.github.com/users/cenx-cf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cenx-cf/subscriptions","organizations_url":"https://api.github.com/users/cenx-cf/orgs","repos_url":"https://api.github.com/users/cenx-cf/repos","events_url":"https://api.github.com/users/cenx-cf/events{/privacy}","received_events_url":"https://api.github.com/users/cenx-cf/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cenx-cf/wildfly-py","description":"WildFly Management Python API","fork":false,"url":"https://api.github.com/repos/cenx-cf/wildfly-py","forks_url":"https://api.github.com/repos/cenx-cf/wildfly-py/forks","keys_url":"https://api.github.com/repos/cenx-cf/wildfly-py/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cenx-cf/wildfly-py/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cenx-cf/wildfly-py/teams","hooks_url":"https://api.github.com/repos/cenx-cf/wildfly-py/hooks","issue_events_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/events{/number}","events_url":"https://api.github.com/repos/cenx-cf/wildfly-py/events","assignees_url":"https://api.github.com/repos/cenx-cf/wildfly-py/assignees{/user}","branches_url":"https://api.github.com/repos/cenx-cf/wildfly-py/branches{/branch}","tags_url":"https://api.github.com/repos/cenx-cf/wildfly-py/tags","blobs_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/refs{/sha}","trees_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cenx-cf/wildfly-py/statuses/{sha}","languages_url":"https://api.github.com/repos/cenx-cf/wildfly-py/languages","stargazers_url":"https://api.github.com/repos/cenx-cf/wildfly-py/stargazers","contributors_url":"https://api.github.com/repos/cenx-cf/wildfly-py/contributors","subscribers_url":"https://api.github.com/repos/cenx-cf/wildfly-py/subscribers","subscription_url":"https://api.github.com/repos/cenx-cf/wildfly-py/subscription","commits_url":"https://api.github.com/repos/cenx-cf/wildfly-py/commits{/sha}","git_commits_url":"https://api.github.com/repos/cenx-cf/wildfly-py/git/commits{/sha}","comments_url":"https://api.github.com/repos/cenx-cf/wildfly-py/comments{/number}","issue_comment_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/comments{/number}","contents_url":"https://api.github.com/repos/cenx-cf/wildfly-py/contents/{+path}","compare_url":"https://api.github.com/repos/cenx-cf/wildfly-py/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cenx-cf/wildfly-py/merges","archive_url":"https://api.github.com/repos/cenx-cf/wildfly-py/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cenx-cf/wildfly-py/downloads","issues_url":"https://api.github.com/repos/cenx-cf/wildfly-py/issues{/number}","pulls_url":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls{/number}","milestones_url":"https://api.github.com/repos/cenx-cf/wildfly-py/milestones{/number}","notifications_url":"https://api.github.com/repos/cenx-cf/wildfly-py/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cenx-cf/wildfly-py/labels{/name}","releases_url":"https://api.github.com/repos/cenx-cf/wildfly-py/releases{/id}","deployments_url":"https://api.github.com/repos/cenx-cf/wildfly-py/deployments","created_at":"2015-10-13T00:44:50Z","updated_at":"2016-05-17T13:05:45Z","pushed_at":"2016-06-14T15:32:18Z","git_url":"git://github.com/cenx-cf/wildfly-py.git","ssh_url":"git@github.com:cenx-cf/wildfly-py.git","clone_url":"https://github.com/cenx-cf/wildfly-py.git","svn_url":"https://github.com/cenx-cf/wildfly-py","homepage":"","size":50,"stargazers_count":4,"watchers_count":4,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7"},"html":{"href":"https://github.com/cenx-cf/wildfly-py/pull/7"},"issue":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/7"},"comments":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/cenx-cf/wildfly-py/statuses/68e403311acea3e3de234e1933cfc49b82e3654f"}}}}
{"actor":{"display_login":"zsuzhengdu"}}