{"action":"created","comment":{"url":"https://api.github.com/repos/paivaspol/EECS591/pulls/comments/27797883","id":27797883,"diff_hunk":"@@ -0,0 +1,199 @@\n+# This file takes the twitter dataset and transform it into the\n+# format described in https://github.com/paivaspol/EECS591/issues/25\n+# The result dataset will support data interdependency.\n+import argparse\n+import math\n+import random\n+import uuid\n+\n+# Constants for twitter modes.\n+TWITTER_RT = 'RT'\n+TWITTER_MT = 'MT'\n+TWITTER_RE = 'RE'\n+UUID_LIST_FILE = 'uuid_list.txt'\n+USER_IP_MAP_FILE = 'user_ip_map.txt'\n+TWEET_SIZE = 140\n+TIMELINE_LIMIT = 20\n+LOG_FORMAT = '%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\n'  # Schema: [timestamp]\\t[target_uuid]\\t[src]\\t[source_dependency]\\t[dest]\\t[type]\\t[status]\\t[size]\n+\n+# Generates the dataset.\n+#\n+# params:\n+#   filename: the name of the file containing the twitter data\n+#   user_ip_map: a map containing the user\n+def generate_dataset(filename, user_ip_map, uuid_server_map, rt_re_set):\n+    print 'Generating access logs...'\n+    reply_stream_map = dict() # key: the tweet uid that is a reply, value: the target stream\n+    user_timeline_map = dict() # key: the uuid of the stream, value: list containing the tweets' uuid for that stream\n+    tweet_server = dict() # key: the tweet uuid, value: the corresponding server\n+    tweet_uuid = dict()\n+    with open(filename, 'rb') as dataset, open(filename + '.ready', 'wb') as result_file, open(UUID_LIST_FILE, 'wb') as uuid_file:\n+        for line in dataset:\n+            line_trimmed = line.strip()\n+            line_splitted = line.split(' ')\n+            timestamp = line_splitted[2]\n+            mode = line_splitted[3].strip()\n+            first_uid = line_splitted[0]\n+            first_user_ip = user_ip_map[first_uid]\n+            second_uid = line_splitted[1]\n+            second_user_ip = user_ip_map[second_uid]\n+            first_target_server = uuid_server_map[first_uid]\n+            second_target_server = uuid_server_map[second_uid]\n+            tweet_uid = str(uuid.uuid4())\n+            if mode == TWITTER_MT:\n+                triplet = (first_uid, second_uid, timestamp)\n+                if triplet not in rt_re_set:  # make sure that we don't process the tweet twice\n+                    # Three steps:\n+                    #   1) A reads A's timeline\n+                    #   2) A writes to his own timeline\n+                    #   3) A reads his own timeline\n+                    access_timeline(timestamp, first_uid, first_user_ip, first_target_server, result_file, user_timeline_map, tweet_server, reply_stream_map)\n+                    result_file.write(LOG_FORMAT % (timestamp, first_uid, first_user_ip, 'null', first_target_server, 'READ', '200', '2800'))\n+                    result_file.write(LOG_FORMAT % (timestamp, tweet_uid, first_user_ip, 'null', first_target_server, 'WRITE', '201', '0'))\n+                    tweet_server[tweet_uid] = first_target_server  # must be here, because this is were the tweet is already stored on the server.\n+                    if first_uid not in user_timeline_map:  # add the tweet to the timeline\n+                        user_timeline_map[first_uid] = []\n+                    elif len(user_timeline_map[first_uid]) > TIMELINE_LIMIT:\n+                        user_timeline_map[first_uid].pop(0)  # remove the first element\n+                    user_timeline_map[first_uid].append(tweet_uid)\n+                    access_timeline(timestamp, first_uid, first_user_ip, first_target_server, result_file, user_timeline_map, tweet_server, reply_stream_map)\n+\n+            elif mode == TWITTER_RT or mode == TWITTER_RE:\n+                # Five steps: assuming A is the sender of the tweet and B is the recipient of the tweet.\n+                #   1) A reads B's timeline\n+                #   2) A reads his own timeline\n+                #   3) A writes the tweet to A's timeline\n+                #   4) A reads B's timeline (as an effect of retweeting and replying)\n+                #   5) A reads A's timeline\n+                access_timeline(timestamp, second_uid, first_user_ip, second_target_server, result_file, user_timeline_map, tweet_server, reply_stream_map)\n+                access_timeline(timestamp, first_uid, first_user_ip, first_target_server, result_file, user_timeline_map, tweet_server, reply_stream_map)\n+                result_file.write(LOG_FORMAT % (timestamp, tweet_uid, first_user_ip, 'null', first_target_server, 'WRITE', '201', '0'))\n+                tweet_server[tweet_uid] = first_target_server  # must be here, because this is were the tweet is already stored on the server.\n+                if first_uid not in user_timeline_map:  # add the tweet to the timeline\n+                    user_timeline_map[first_uid] = []\n+                elif len(user_timeline_map[first_uid]) > TIMELINE_LIMIT:\n+                    user_timeline_map[first_uid].pop(0)  # remove the first element\n+                user_timeline_map[first_uid].append(tweet_uid)  # add the tweet to the timeline\n+                if mode == TWITTER_RE:\n+                    reply_stream_map[tweet_uid] = second_uid # the tweet is directed to the second_uid\n+\n+                result_file.write(LOG_FORMAT % (timestamp, second_uid, first_user_ip, tweet_uid, second_target_server, 'READ', '200', str(TWEET_SIZE)))\n+                access_timeline(timestamp, first_uid, first_user_ip, first_target_server, result_file, user_timeline_map, tweet_server, reply_stream_map)\n+            uuid_file.write('%s\\n' % tweet_uid)\n+\n+# Helper method for populating log entries for reading from a timeline\n+#\n+# params:\n+#   timestamp: the timestamp\n+#   timeline_uuid: the uuid of the source's target timeline\n+#   source: the source's ip address\n+#   target_server: the target server's ip address\n+#   result_file: the file objet for writing the logs\n+#   user_timeline_map: a mapping from user uuid --> timeline content\n+#   tweet_server: a mapping from tweet uuid --> server\n+#   reply_stream_map: a mapping from reply tweet uuid --> destination stream\n+def access_timeline(timestamp, timeline_uuid, source, target_server, result_file, user_timeline_map, tweet_server, reply_stream_map):\n+    # Read source's timeline.\n+    timeline_list = [] if timeline_uuid not in user_timeline_map else user_timeline_map[timeline_uuid] # get the list containing the uuid of the tweets for that timeline\n+    read_size = TWEET_SIZE * len(timeline_list) if len(timeline_list) > 0 else TWEET_SIZE\n+    result_file.write(LOG_FORMAT % (timestamp, timeline_uuid, source, 'null', target_server, 'READ', '200', str(read_size)))\n+    # Read each tweet from the server.\n+    for tweet in timeline_list:\n+        read_target_server = tweet_server[tweet]\n+        result_file.write(LOG_FORMAT % (timestamp, tweet, source, timeline_uuid, read_target_server, 'READ', '200', str(TWEET_SIZE)))","path":"dataset/create_twitter_dataset.py","position":102,"original_position":103,"commit_id":"92ba81d92c213ba21bb4998ddef98cec917034ad","original_commit_id":"676b6798a5b691c5232670b3a64a64eeb077d9b7","user":{"login":"chrisjbaik","id":768102,"avatar_url":"https://avatars.githubusercontent.com/u/768102?v=3","gravatar_id":"","url":"https://api.github.com/users/chrisjbaik","html_url":"https://github.com/chrisjbaik","followers_url":"https://api.github.com/users/chrisjbaik/followers","following_url":"https://api.github.com/users/chrisjbaik/following{/other_user}","gists_url":"https://api.github.com/users/chrisjbaik/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjbaik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjbaik/subscriptions","organizations_url":"https://api.github.com/users/chrisjbaik/orgs","repos_url":"https://api.github.com/users/chrisjbaik/repos","events_url":"https://api.github.com/users/chrisjbaik/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjbaik/received_events","type":"User","site_admin":false},"body":"Like above note, not sure if it should be `source` here or `target_server` as the source for these requests","created_at":"2015-04-06T13:56:10Z","updated_at":"2015-04-06T13:56:10Z","html_url":"https://github.com/paivaspol/EECS591/pull/63#discussion_r27797883","pull_request_url":"https://api.github.com/repos/paivaspol/EECS591/pulls/63","_links":{"self":{"href":"https://api.github.com/repos/paivaspol/EECS591/pulls/comments/27797883"},"html":{"href":"https://github.com/paivaspol/EECS591/pull/63#discussion_r27797883"},"pull_request":{"href":"https://api.github.com/repos/paivaspol/EECS591/pulls/63"}}},"pull_request":{"url":"https://api.github.com/repos/paivaspol/EECS591/pulls/63","id":32549006,"html_url":"https://github.com/paivaspol/EECS591/pull/63","diff_url":"https://github.com/paivaspol/EECS591/pull/63.diff","patch_url":"https://github.com/paivaspol/EECS591/pull/63.patch","issue_url":"https://api.github.com/repos/paivaspol/EECS591/issues/63","number":63,"state":"open","locked":false,"title":"Vaspol add generate twitter access log","user":{"login":"paivaspol","id":1900571,"avatar_url":"https://avatars.githubusercontent.com/u/1900571?v=3","gravatar_id":"","url":"https://api.github.com/users/paivaspol","html_url":"https://github.com/paivaspol","followers_url":"https://api.github.com/users/paivaspol/followers","following_url":"https://api.github.com/users/paivaspol/following{/other_user}","gists_url":"https://api.github.com/users/paivaspol/gists{/gist_id}","starred_url":"https://api.github.com/users/paivaspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paivaspol/subscriptions","organizations_url":"https://api.github.com/users/paivaspol/orgs","repos_url":"https://api.github.com/users/paivaspol/repos","events_url":"https://api.github.com/users/paivaspol/events{/privacy}","received_events_url":"https://api.github.com/users/paivaspol/received_events","type":"User","site_admin":false},"body":"Fixes #25 ","created_at":"2015-04-02T20:50:40Z","updated_at":"2015-04-06T13:56:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"be1d5126b1a8710246129fdfc6341f5b4164d12c","assignee":{"login":"paivaspol","id":1900571,"avatar_url":"https://avatars.githubusercontent.com/u/1900571?v=3","gravatar_id":"","url":"https://api.github.com/users/paivaspol","html_url":"https://github.com/paivaspol","followers_url":"https://api.github.com/users/paivaspol/followers","following_url":"https://api.github.com/users/paivaspol/following{/other_user}","gists_url":"https://api.github.com/users/paivaspol/gists{/gist_id}","starred_url":"https://api.github.com/users/paivaspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paivaspol/subscriptions","organizations_url":"https://api.github.com/users/paivaspol/orgs","repos_url":"https://api.github.com/users/paivaspol/repos","events_url":"https://api.github.com/users/paivaspol/events{/privacy}","received_events_url":"https://api.github.com/users/paivaspol/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/paivaspol/EECS591/milestones/3","html_url":"https://github.com/paivaspol/EECS591/milestones/Evaluation","labels_url":"https://api.github.com/repos/paivaspol/EECS591/milestones/3/labels","id":1038970,"number":3,"title":"Evaluation","description":"","creator":{"login":"chrisjbaik","id":768102,"avatar_url":"https://avatars.githubusercontent.com/u/768102?v=3","gravatar_id":"","url":"https://api.github.com/users/chrisjbaik","html_url":"https://github.com/chrisjbaik","followers_url":"https://api.github.com/users/chrisjbaik/followers","following_url":"https://api.github.com/users/chrisjbaik/following{/other_user}","gists_url":"https://api.github.com/users/chrisjbaik/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisjbaik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisjbaik/subscriptions","organizations_url":"https://api.github.com/users/chrisjbaik/orgs","repos_url":"https://api.github.com/users/chrisjbaik/repos","events_url":"https://api.github.com/users/chrisjbaik/events{/privacy}","received_events_url":"https://api.github.com/users/chrisjbaik/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":1,"state":"open","created_at":"2015-03-25T18:50:31Z","updated_at":"2015-04-05T21:28:52Z","due_on":"2015-04-06T04:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/paivaspol/EECS591/pulls/63/commits","review_comments_url":"https://api.github.com/repos/paivaspol/EECS591/pulls/63/comments","review_comment_url":"https://api.github.com/repos/paivaspol/EECS591/pulls/comments{/number}","comments_url":"https://api.github.com/repos/paivaspol/EECS591/issues/63/comments","statuses_url":"https://api.github.com/repos/paivaspol/EECS591/statuses/92ba81d92c213ba21bb4998ddef98cec917034ad","head":{"label":"paivaspol:vaspol-add-generate-twitter-access-log","ref":"vaspol-add-generate-twitter-access-log","sha":"92ba81d92c213ba21bb4998ddef98cec917034ad","user":{"login":"paivaspol","id":1900571,"avatar_url":"https://avatars.githubusercontent.com/u/1900571?v=3","gravatar_id":"","url":"https://api.github.com/users/paivaspol","html_url":"https://github.com/paivaspol","followers_url":"https://api.github.com/users/paivaspol/followers","following_url":"https://api.github.com/users/paivaspol/following{/other_user}","gists_url":"https://api.github.com/users/paivaspol/gists{/gist_id}","starred_url":"https://api.github.com/users/paivaspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paivaspol/subscriptions","organizations_url":"https://api.github.com/users/paivaspol/orgs","repos_url":"https://api.github.com/users/paivaspol/repos","events_url":"https://api.github.com/users/paivaspol/events{/privacy}","received_events_url":"https://api.github.com/users/paivaspol/received_events","type":"User","site_admin":false},"repo":{"id":30712865,"name":"EECS591","full_name":"paivaspol/EECS591","owner":{"login":"paivaspol","id":1900571,"avatar_url":"https://avatars.githubusercontent.com/u/1900571?v=3","gravatar_id":"","url":"https://api.github.com/users/paivaspol","html_url":"https://github.com/paivaspol","followers_url":"https://api.github.com/users/paivaspol/followers","following_url":"https://api.github.com/users/paivaspol/following{/other_user}","gists_url":"https://api.github.com/users/paivaspol/gists{/gist_id}","starred_url":"https://api.github.com/users/paivaspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paivaspol/subscriptions","organizations_url":"https://api.github.com/users/paivaspol/orgs","repos_url":"https://api.github.com/users/paivaspol/repos","events_url":"https://api.github.com/users/paivaspol/events{/privacy}","received_events_url":"https://api.github.com/users/paivaspol/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/paivaspol/EECS591","description":"The repository contains the source for EECS 591 (Distributed Systems) Class Project","fork":false,"url":"https://api.github.com/repos/paivaspol/EECS591","forks_url":"https://api.github.com/repos/paivaspol/EECS591/forks","keys_url":"https://api.github.com/repos/paivaspol/EECS591/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paivaspol/EECS591/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paivaspol/EECS591/teams","hooks_url":"https://api.github.com/repos/paivaspol/EECS591/hooks","issue_events_url":"https://api.github.com/repos/paivaspol/EECS591/issues/events{/number}","events_url":"https://api.github.com/repos/paivaspol/EECS591/events","assignees_url":"https://api.github.com/repos/paivaspol/EECS591/assignees{/user}","branches_url":"https://api.github.com/repos/paivaspol/EECS591/branches{/branch}","tags_url":"https://api.github.com/repos/paivaspol/EECS591/tags","blobs_url":"https://api.github.com/repos/paivaspol/EECS591/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paivaspol/EECS591/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paivaspol/EECS591/git/refs{/sha}","trees_url":"https://api.github.com/repos/paivaspol/EECS591/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paivaspol/EECS591/statuses/{sha}","languages_url":"https://api.github.com/repos/paivaspol/EECS591/languages","stargazers_url":"https://api.github.com/repos/paivaspol/EECS591/stargazers","contributors_url":"https://api.github.com/repos/paivaspol/EECS591/contributors","subscribers_url":"https://api.github.com/repos/paivaspol/EECS591/subscribers","subscription_url":"https://api.github.com/repos/paivaspol/EECS591/subscription","commits_url":"https://api.github.com/repos/paivaspol/EECS591/commits{/sha}","git_commits_url":"https://api.github.com/repos/paivaspol/EECS591/git/commits{/sha}","comments_url":"https://api.github.com/repos/paivaspol/EECS591/comments{/number}","issue_comment_url":"https://api.github.com/repos/paivaspol/EECS591/issues/comments{/number}","contents_url":"https://api.github.com/repos/paivaspol/EECS591/contents/{+path}","compare_url":"https://api.github.com/repos/paivaspol/EECS591/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paivaspol/EECS591/merges","archive_url":"https://api.github.com/repos/paivaspol/EECS591/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paivaspol/EECS591/downloads","issues_url":"https://api.github.com/repos/paivaspol/EECS591/issues{/number}","pulls_url":"https://api.github.com/repos/paivaspol/EECS591/pulls{/number}","milestones_url":"https://api.github.com/repos/paivaspol/EECS591/milestones{/number}","notifications_url":"https://api.github.com/repos/paivaspol/EECS591/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paivaspol/EECS591/labels{/name}","releases_url":"https://api.github.com/repos/paivaspol/EECS591/releases{/id}","created_at":"2015-02-12T16:55:15Z","updated_at":"2015-03-31T17:04:05Z","pushed_at":"2015-04-06T13:43:36Z","git_url":"git://github.com/paivaspol/EECS591.git","ssh_url":"git@github.com:paivaspol/EECS591.git","clone_url":"https://github.com/paivaspol/EECS591.git","svn_url":"https://github.com/paivaspol/EECS591","homepage":null,"size":6811,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":15,"forks":1,"open_issues":15,"watchers":0,"default_branch":"master"}},"base":{"label":"paivaspol:master","ref":"master","sha":"6b0c644ee66f6c27c355d9aee6f736362796c40e","user":{"login":"paivaspol","id":1900571,"avatar_url":"https://avatars.githubusercontent.com/u/1900571?v=3","gravatar_id":"","url":"https://api.github.com/users/paivaspol","html_url":"https://github.com/paivaspol","followers_url":"https://api.github.com/users/paivaspol/followers","following_url":"https://api.github.com/users/paivaspol/following{/other_user}","gists_url":"https://api.github.com/users/paivaspol/gists{/gist_id}","starred_url":"https://api.github.com/users/paivaspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paivaspol/subscriptions","organizations_url":"https://api.github.com/users/paivaspol/orgs","repos_url":"https://api.github.com/users/paivaspol/repos","events_url":"https://api.github.com/users/paivaspol/events{/privacy}","received_events_url":"https://api.github.com/users/paivaspol/received_events","type":"User","site_admin":false},"repo":{"id":30712865,"name":"EECS591","full_name":"paivaspol/EECS591","owner":{"login":"paivaspol","id":1900571,"avatar_url":"https://avatars.githubusercontent.com/u/1900571?v=3","gravatar_id":"","url":"https://api.github.com/users/paivaspol","html_url":"https://github.com/paivaspol","followers_url":"https://api.github.com/users/paivaspol/followers","following_url":"https://api.github.com/users/paivaspol/following{/other_user}","gists_url":"https://api.github.com/users/paivaspol/gists{/gist_id}","starred_url":"https://api.github.com/users/paivaspol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paivaspol/subscriptions","organizations_url":"https://api.github.com/users/paivaspol/orgs","repos_url":"https://api.github.com/users/paivaspol/repos","events_url":"https://api.github.com/users/paivaspol/events{/privacy}","received_events_url":"https://api.github.com/users/paivaspol/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/paivaspol/EECS591","description":"The repository contains the source for EECS 591 (Distributed Systems) Class Project","fork":false,"url":"https://api.github.com/repos/paivaspol/EECS591","forks_url":"https://api.github.com/repos/paivaspol/EECS591/forks","keys_url":"https://api.github.com/repos/paivaspol/EECS591/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paivaspol/EECS591/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paivaspol/EECS591/teams","hooks_url":"https://api.github.com/repos/paivaspol/EECS591/hooks","issue_events_url":"https://api.github.com/repos/paivaspol/EECS591/issues/events{/number}","events_url":"https://api.github.com/repos/paivaspol/EECS591/events","assignees_url":"https://api.github.com/repos/paivaspol/EECS591/assignees{/user}","branches_url":"https://api.github.com/repos/paivaspol/EECS591/branches{/branch}","tags_url":"https://api.github.com/repos/paivaspol/EECS591/tags","blobs_url":"https://api.github.com/repos/paivaspol/EECS591/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paivaspol/EECS591/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paivaspol/EECS591/git/refs{/sha}","trees_url":"https://api.github.com/repos/paivaspol/EECS591/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paivaspol/EECS591/statuses/{sha}","languages_url":"https://api.github.com/repos/paivaspol/EECS591/languages","stargazers_url":"https://api.github.com/repos/paivaspol/EECS591/stargazers","contributors_url":"https://api.github.com/repos/paivaspol/EECS591/contributors","subscribers_url":"https://api.github.com/repos/paivaspol/EECS591/subscribers","subscription_url":"https://api.github.com/repos/paivaspol/EECS591/subscription","commits_url":"https://api.github.com/repos/paivaspol/EECS591/commits{/sha}","git_commits_url":"https://api.github.com/repos/paivaspol/EECS591/git/commits{/sha}","comments_url":"https://api.github.com/repos/paivaspol/EECS591/comments{/number}","issue_comment_url":"https://api.github.com/repos/paivaspol/EECS591/issues/comments{/number}","contents_url":"https://api.github.com/repos/paivaspol/EECS591/contents/{+path}","compare_url":"https://api.github.com/repos/paivaspol/EECS591/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paivaspol/EECS591/merges","archive_url":"https://api.github.com/repos/paivaspol/EECS591/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paivaspol/EECS591/downloads","issues_url":"https://api.github.com/repos/paivaspol/EECS591/issues{/number}","pulls_url":"https://api.github.com/repos/paivaspol/EECS591/pulls{/number}","milestones_url":"https://api.github.com/repos/paivaspol/EECS591/milestones{/number}","notifications_url":"https://api.github.com/repos/paivaspol/EECS591/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paivaspol/EECS591/labels{/name}","releases_url":"https://api.github.com/repos/paivaspol/EECS591/releases{/id}","created_at":"2015-02-12T16:55:15Z","updated_at":"2015-03-31T17:04:05Z","pushed_at":"2015-04-06T13:43:36Z","git_url":"git://github.com/paivaspol/EECS591.git","ssh_url":"git@github.com:paivaspol/EECS591.git","clone_url":"https://github.com/paivaspol/EECS591.git","svn_url":"https://github.com/paivaspol/EECS591","homepage":null,"size":6811,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":15,"forks":1,"open_issues":15,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/paivaspol/EECS591/pulls/63"},"html":{"href":"https://github.com/paivaspol/EECS591/pull/63"},"issue":{"href":"https://api.github.com/repos/paivaspol/EECS591/issues/63"},"comments":{"href":"https://api.github.com/repos/paivaspol/EECS591/issues/63/comments"},"review_comments":{"href":"https://api.github.com/repos/paivaspol/EECS591/pulls/63/comments"},"review_comment":{"href":"https://api.github.com/repos/paivaspol/EECS591/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/paivaspol/EECS591/pulls/63/commits"},"statuses":{"href":"https://api.github.com/repos/paivaspol/EECS591/statuses/92ba81d92c213ba21bb4998ddef98cec917034ad"}}}}