{"action":"created","comment":{"url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/comments/42884228","id":42884228,"diff_hunk":"@@ -1,148 +1,72 @@\n-# In development of utilizing sepatate .py files for common functions\n-#########################################################\n import functools\n import argparse\n import warnings\n import pprint\n-#########################################################\n-from ingestHelpers import *\n-#########################################################\n-\n-# Global variables for the ingest process for: ***dataset***\n-get_datasets_query = load_file(\"queries/listDatasets.rq\")\n-describe_dataset_query = load_file(\"queries/describeDataset.rq\")\n-_index = \"dco\"\n-_type = \"dataset\"\n-\n-\n-# describe_dataset: used by create_dataset_doc\n-# change the \"?dataset\" variable to whatever variable name you use in the listXXX.eq file\n-def describe_dataset(endpoint, dataset):\n-    q = describe_dataset_query.replace(\"?dataset\", \"<\" + dataset + \">\")\n-    return describe(endpoint, q)\n-\n-\n-# create_dataset_doc: used by process_dataset\n-def create_dataset_doc(dataset, endpoint):\n-    graph = describe_dataset(endpoint=endpoint, dataset=dataset)\n-    # graph = describe_object_function(endpoint=endpoint, dataset=dataset)\n-\n-    ds = graph.resource(dataset)\n-\n-    try:\n-        title = ds.label().toPython()\n-    except AttributeError:\n-        print(\"missing title:\", dataset)\n-        return {}\n-\n-    dco_id = list(ds.objects(DCO.hasDcoId))\n-    dco_id = str(dco_id[0].identifier) if dco_id else None\n-\n-    doc = {\"uri\": dataset, \"title\": title, \"dcoId\": dco_id}\n-\n-    doi = list(ds.objects(BIBO.doi))\n-    doi = doi[0].toPython() if doi else None\n-    if doi:\n-        doc.update({\"doi\": doi})\n \n-    abstract = list(ds.objects(BIBO.abstract))\n-    abstract = abstract[0].toPython() if abstract else None\n-    if abstract:\n-        doc.update({\"abstract\": abstract})\n \n-    most_specific_type = list(ds.objects(VITRO.mostSpecificType))\n-    most_specific_type = most_specific_type[0].label().toPython() \\\n-        if most_specific_type and most_specific_type[0].label() \\\n-        else None\n-    if most_specific_type:\n-        doc.update({\"mostSpecificType\": most_specific_type})\n-\n-    publication_year = list(ds.objects(DCO.yearOfPublication))\n-    publication_year = publication_year[0] if publication_year else None\n-    if publication_year:\n-        doc.update({\"publicationYear\": str(publication_year)})\n-\n-    dco_communities = get_dco_communities(ds)\n-    if dco_communities:\n-        doc.update({\"dcoCommunities\": dco_communities})\n-\n-    # portal_groups\n-    portal_groups = get_portal_groups(ds)\n-    if portal_groups:\n-        doc.update({\"portalGroups\": portal_groups})\n-\n-    # projects\n-    projects = get_projects_of_dataset(ds)\n-    if projects:\n-        doc.update({\"projects\": projects})\n-\n-    # dataType\n-    data_types = get_data_types(ds)\n-    if data_types:\n-        doc.update({\"dataTypes\": data_types})\n-\n-    # cites\n-    cites = get_cites(ds)\n-    if cites:\n-        doc.update({\"citations\": cites})\n-\n-    # authors: if none, will return an empty list []\n-    authors = get_authors(ds)\n-    doc.update({\"authors\": authors})\n-\n-    # distributions: if none, will return an empty list []\n-    distributions = get_distributions(ds)\n-    doc.update({\"distributions\": distributions})\n+# Import helper functions from ingestHelpers.py;\n+# see ingestHelpers.py for details of functions and classes used.\n+from ingestHelpers import *\n \n-    return doc\n+# Directions:\n \n+# First, change these case-varying variables below for: dataset ingest\n \n+GET_OBJECTS_QUERY_LOCATION = \"queries/listDatasets.rq\"\n+DESCRIBE_DATASET_OBJECT_LOCATION = \"queries/describeDataset.rq\"\n+INDEX = \"dco\"\n+TYPE = \"dataset\"\n+VARIABLE_NAME_SPARQL = \"?dataset\"\n \n+# Second, change the function name \"create_xxxxx_doc\" below to whatever fits this ingest process\n+#       and then implement it in ingestHelpers.py. Existing examples are helpful.\n if __name__ == \"__main__\":\n-    # Usage:\n-    #   Arguments:\n-    #   --threads: number of threads to use (default = 8)\n-    #   --es', elasticsearch service URL (default=\"http://localhost:9200\")\n-    #   --publish', publish to elasticsearch? (default=False)\n-    #   --rebuild', rebuild elasticsearch index? (default=False)\n-    #   --mapping', dataset elasticsearch mapping document (default=\"mappings/dataset.json\")\n-    #   --sparql', sparql endpoint (default='http://deepcarbon.tw.rpi.edu:3030/VIVO/query')\n-    #   [out]: file name of the elasticsearch bulk ingest file\n-    # Example:\n-    #   python3 ingest-datasets.py output4 --threads 2 --mapping mappings/XXXXX.json ...\n-\n-    Main(get_objects_query=get_datasets_query, create_object_doc_function=create_dataset_doc,\n-         object_index=_index, object_type=_type)\n-\n-    ################################################################################################################\n-    #\n-    # SOME RUNNING SCRIPTS:\n-    #\n-    # To start elastic search: [elastic search folder]/bin/elasticsearch\n-    #\n-    # 0) (HAVE CAUTION.) Delete existing data to avoid uploading error due to mismatching:\n-    #       (For localhost) curl -XDELETE 'localhost:9200/dco/dataset'\n-    #       (For dcotest)   curl -XDELETE 'dcotest.tw.rpi.edu:49200/dco/dataset'\n-    #\n-    #\n-    # 1) Manually upload mapping:\n-    #       (For localhost) curl -XPUT 'localhost:9200/dco/dataset/_mapping?pretty' --data-binary @mappings/dataset.json\n-    #       (For dcotest)   curl -XPUT 'dcotest.tw.rpi.edu:49200/dco/dataset/_mapping?pretty' --data-binary @mappings/dataset.json\n-    #\n-    # 2) Generate bulk data:\n-    #       python3 ingest-datasets.py output#\n-    #   and then upload bulk data manually\n-    #       (For localhost) curl -XPOST 'localhost:9200/_bulk' --data-binary @output#\n-    #       (For dcotest)   curl -XPOST 'dcotest.tw.rpi.edu:49200/_bulk' --data-binary @output#\n-    #\n-    # 2') Generate bulk data and upload bulk data automatically:\n-    #       (For localhost) python3 ingest-datasets.py --es 'localhost:9200' --publish output#\n-    #       (For dcotest)   python3 ingest-datasets.py --es 'dcotest.tw.rpi.edu/search/' --publish output#\n-    #\n-    # 3) To view and operate in Sense:\n-    #       GET dco/dataset/_mapping\n-    #       GET dco/dataset/_search\n-    #       DELETE /dco/dataset/\n-    #       DELETE /dco/dataset/_mapping\n-    #       and etc...\n-    #################################################################################################################\n\\ No newline at end of file\n+    Main(get_objects_query_location=GET_OBJECTS_QUERY_LOCATION,\n+         describe_object_query_location=DESCRIBE_DATASET_OBJECT_LOCATION,\n+         create_object_doc_function=create_dataset_doc,  # Need to create case-varying create_xxxxxx_doc in helper file\n+         object_index=INDEX, object_type=TYPE,\n+         variable_name_sparql=VARIABLE_NAME_SPARQL)\n+\n+# Finally, run the ingest process. See explanations and examples below.\n+\n+# Usage:","path":"ingest/ingest-datasets.py","position":170,"original_position":170,"commit_id":"8aed794a937c0a106e28187407df343d9e76071f","original_commit_id":"8aed794a937c0a106e28187407df343d9e76071f","user":{"login":"zhonghao1014","id":11859381,"avatar_url":"https://avatars.githubusercontent.com/u/11859381?v=3","gravatar_id":"","url":"https://api.github.com/users/zhonghao1014","html_url":"https://github.com/zhonghao1014","followers_url":"https://api.github.com/users/zhonghao1014/followers","following_url":"https://api.github.com/users/zhonghao1014/following{/other_user}","gists_url":"https://api.github.com/users/zhonghao1014/gists{/gist_id}","starred_url":"https://api.github.com/users/zhonghao1014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhonghao1014/subscriptions","organizations_url":"https://api.github.com/users/zhonghao1014/orgs","repos_url":"https://api.github.com/users/zhonghao1014/repos","events_url":"https://api.github.com/users/zhonghao1014/events{/privacy}","received_events_url":"https://api.github.com/users/zhonghao1014/received_events","type":"User","site_admin":false},"body":"Sure. Just pushed a README now will change it with markdown syntax.","created_at":"2015-10-23T16:20:28Z","updated_at":"2015-10-23T16:20:28Z","html_url":"https://github.com/tetherless-world/dco-elasticsearch/pull/29#discussion_r42884228","pull_request_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29","_links":{"self":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/comments/42884228"},"html":{"href":"https://github.com/tetherless-world/dco-elasticsearch/pull/29#discussion_r42884228"},"pull_request":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29"}}},"pull_request":{"url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29","id":48496897,"html_url":"https://github.com/tetherless-world/dco-elasticsearch/pull/29","diff_url":"https://github.com/tetherless-world/dco-elasticsearch/pull/29.diff","patch_url":"https://github.com/tetherless-world/dco-elasticsearch/pull/29.patch","issue_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/29","number":29,"state":"open","locked":false,"title":"Ingest code refactoring","user":{"login":"zhonghao1014","id":11859381,"avatar_url":"https://avatars.githubusercontent.com/u/11859381?v=3","gravatar_id":"","url":"https://api.github.com/users/zhonghao1014","html_url":"https://github.com/zhonghao1014","followers_url":"https://api.github.com/users/zhonghao1014/followers","following_url":"https://api.github.com/users/zhonghao1014/following{/other_user}","gists_url":"https://api.github.com/users/zhonghao1014/gists{/gist_id}","starred_url":"https://api.github.com/users/zhonghao1014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhonghao1014/subscriptions","organizations_url":"https://api.github.com/users/zhonghao1014/orgs","repos_url":"https://api.github.com/users/zhonghao1014/repos","events_url":"https://api.github.com/users/zhonghao1014/events{/privacy}","received_events_url":"https://api.github.com/users/zhonghao1014/received_events","type":"User","site_admin":false},"body":"The new ingest code structure is comprised of 4 pieces:\r\n1) A very short ingest-xxxxx-refactored.py for the ingest process, users need to make a copy of it and change certain variable values (file paths, index and type names, etc) in it to fit certain cases\r\n2) an ingestHelpersRefactored.py storing some independent helper functions; users will need to create their own create_xxxxx_doc function\r\n3) Ingest.py, a class governing the ingest process\r\n4) Maybe.py, auxilary class for those helper functions in ingestHelpersRefactored.py\r\n\r\nHow does it look like? \r\n\r\nNext, if this works, we can move on to generalize it. For example, say, for datasets we will need the author and the author's attribute A, B, and C, while for publications we also need the author, but authors attribute A, C, and D. Then a get_author function getting attributes A, B, C, and D can be shared by both ingest processes, since what will eventually be in the output will be limited by describeXXXX.rq and the mapping file. Does it make sense? ","created_at":"2015-10-22T18:49:46Z","updated_at":"2015-10-23T16:20:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"068356ee62e32f28549f0506b15bae72df6d5c83","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29/commits","review_comments_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29/comments","review_comment_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/29/comments","statuses_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/statuses/8aed794a937c0a106e28187407df343d9e76071f","head":{"label":"tetherless-world:ingest-code-refactoring","ref":"ingest-code-refactoring","sha":"8aed794a937c0a106e28187407df343d9e76071f","user":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"repo":{"id":39468446,"name":"dco-elasticsearch","full_name":"tetherless-world/dco-elasticsearch","owner":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tetherless-world/dco-elasticsearch","description":"DCO ElasticSearch","fork":false,"url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch","forks_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/forks","keys_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/teams","hooks_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/hooks","issue_events_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/events{/number}","events_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/events","assignees_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/assignees{/user}","branches_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/branches{/branch}","tags_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/tags","blobs_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/refs{/sha}","trees_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/statuses/{sha}","languages_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/languages","stargazers_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/stargazers","contributors_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/contributors","subscribers_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/subscribers","subscription_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/subscription","commits_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/commits{/sha}","git_commits_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/commits{/sha}","comments_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/comments{/number}","issue_comment_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/comments{/number}","contents_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/contents/{+path}","compare_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/merges","archive_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/downloads","issues_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues{/number}","pulls_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls{/number}","milestones_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/milestones{/number}","notifications_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/labels{/name}","releases_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/releases{/id}","created_at":"2015-07-21T20:32:52Z","updated_at":"2015-10-02T12:18:10Z","pushed_at":"2015-10-23T01:27:14Z","git_url":"git://github.com/tetherless-world/dco-elasticsearch.git","ssh_url":"git@github.com:tetherless-world/dco-elasticsearch.git","clone_url":"https://github.com/tetherless-world/dco-elasticsearch.git","svn_url":"https://github.com/tetherless-world/dco-elasticsearch","homepage":null,"size":778,"stargazers_count":2,"watchers_count":2,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":4,"forks":1,"open_issues":4,"watchers":2,"default_branch":"master"}},"base":{"label":"tetherless-world:master","ref":"master","sha":"c5e2da8fa48a54b57f4d29b0172240c8a9722b33","user":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"repo":{"id":39468446,"name":"dco-elasticsearch","full_name":"tetherless-world/dco-elasticsearch","owner":{"login":"tetherless-world","id":4519152,"avatar_url":"https://avatars.githubusercontent.com/u/4519152?v=3","gravatar_id":"","url":"https://api.github.com/users/tetherless-world","html_url":"https://github.com/tetherless-world","followers_url":"https://api.github.com/users/tetherless-world/followers","following_url":"https://api.github.com/users/tetherless-world/following{/other_user}","gists_url":"https://api.github.com/users/tetherless-world/gists{/gist_id}","starred_url":"https://api.github.com/users/tetherless-world/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tetherless-world/subscriptions","organizations_url":"https://api.github.com/users/tetherless-world/orgs","repos_url":"https://api.github.com/users/tetherless-world/repos","events_url":"https://api.github.com/users/tetherless-world/events{/privacy}","received_events_url":"https://api.github.com/users/tetherless-world/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tetherless-world/dco-elasticsearch","description":"DCO ElasticSearch","fork":false,"url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch","forks_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/forks","keys_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/teams","hooks_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/hooks","issue_events_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/events{/number}","events_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/events","assignees_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/assignees{/user}","branches_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/branches{/branch}","tags_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/tags","blobs_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/refs{/sha}","trees_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/statuses/{sha}","languages_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/languages","stargazers_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/stargazers","contributors_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/contributors","subscribers_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/subscribers","subscription_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/subscription","commits_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/commits{/sha}","git_commits_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/git/commits{/sha}","comments_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/comments{/number}","issue_comment_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/comments{/number}","contents_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/contents/{+path}","compare_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/merges","archive_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/downloads","issues_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues{/number}","pulls_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls{/number}","milestones_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/milestones{/number}","notifications_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/labels{/name}","releases_url":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/releases{/id}","created_at":"2015-07-21T20:32:52Z","updated_at":"2015-10-02T12:18:10Z","pushed_at":"2015-10-23T01:27:14Z","git_url":"git://github.com/tetherless-world/dco-elasticsearch.git","ssh_url":"git@github.com:tetherless-world/dco-elasticsearch.git","clone_url":"https://github.com/tetherless-world/dco-elasticsearch.git","svn_url":"https://github.com/tetherless-world/dco-elasticsearch","homepage":null,"size":778,"stargazers_count":2,"watchers_count":2,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":4,"forks":1,"open_issues":4,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29"},"html":{"href":"https://github.com/tetherless-world/dco-elasticsearch/pull/29"},"issue":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/29"},"comments":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/issues/29/comments"},"review_comments":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29/comments"},"review_comment":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/pulls/29/commits"},"statuses":{"href":"https://api.github.com/repos/tetherless-world/dco-elasticsearch/statuses/8aed794a937c0a106e28187407df343d9e76071f"}}}}