{"action":"created","comment":{"url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/comments/206986564","pull_request_review_id":142507655,"id":206986564,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNjk4NjU2NA==","diff_hunk":"@@ -8,12 +8,222 @@\n pycds.Obs objects. This phase is common to all networks.\n \"\"\"\n \n-from pycds import Obs\n+import logging\n+from sqlalchemy import and_\n+from pint import UnitRegistry\n \n+# local\n+from pycds import Obs, History, Network, Variable, Station\n \n-def align(sesh, obs_tuples):\n-    for time, val, var_name, network_name, station_name, lat, lon \\\n-     in obs_tuples:\n-        # Do checks and make station/variable insertions if necessary/possible\n-        # Create and yield pycds.Obs object\n-        yield Obs()\n+\n+log = logging.getLogger(__name__)\n+ureg = UnitRegistry()\n+Q_ = ureg.Quantity\n+\n+\n+def closest_stns_within_threshold(sesh, lon, lat, threshold):\n+    # Select all history entries that match this station\n+    log.debug(\"Searching for matching meta_history entries\")\n+\n+    query_txt = \"\"\"\n+        WITH stns_in_thresh AS (\n+            SELECT history_id, lat, lon, Geography(ST_Transform(the_geom,4326)) as p_existing,\n+                Geography(ST_SetSRID(ST_MakePoint(:x, :y),4326)) as p_new\n+            FROM crmp.meta_history\n+            WHERE the_geom && ST_Buffer(Geography(ST_SetSRID(ST_MakePoint(:x, :y), 4326)),:thresh)\n+        )\n+        SELECT history_id, ST_Distance(p_existing,p_new) as dist\n+        FROM stns_in_thresh\n+        ORDER BY dist\n+\"\"\" # noqa\n+    q = sesh.execute(query_txt, {\n+        'x': lon,\n+        'y': lat,\n+        'thresh': threshold}\n+    )\n+    valid_hid = set([x[0] for x in q.fetchall()])\n+    log.debug(\"history_ids in threshold\", extra={'hid': valid_hid})\n+    return valid_hid\n+\n+\n+def convert_unit(val, src_unit, dst_unit):\n+    log.debug('Converting units', extra={'src_unit': src_unit,\n+                                         'dst_unit': dst_unit})\n+    try:\n+        val = Q_(val, ureg.parse_expression(src_unit))  # src\n+        val = val.to(dst_unit).magnitude  # dest\n+    except Exception as e:\n+        log.error('Unable to convert units', extra={'src_unit': src_unit,\n+                                                    'dst_unit': dst_unit,\n+                                                    'exception': e})\n+        raise e\n+    log.debug('Converted units')\n+    return val\n+\n+\n+def unit_db_check(unit_obs, unit_db, val):\n+    log.debug('Check if units match')\n+    if unit_obs != unit_db:\n+        try:\n+            val_conv = convert_unit(val, unit_obs, unit_db)\n+        except Exception as e:\n+            log.error('Unable to convert units',\n+                      extra={'src_unit': unit_obs,\n+                             'dst_unit': unit_db,\n+                             'exception': e})\n+            return None\n+        return val_conv\n+    else:\n+        return val\n+\n+\n+def unit_check(sesh, unit_obs, unit_db, val):\n+    log.debug('Check if there are units to compare')\n+    if not unit_obs and not unit_db:\n+        return None\n+    else:\n+        return unit_db_check(unit_obs, unit_db, val)\n+\n+\n+def match_station_with_active(sesh, obs_tuple, histories):\n+    log.debug('Search for active stations')\n+    for history in histories:\n+        hist = sesh.query(History).filter(\n+            and_(History.id == history.id,\n+                 History.sdate != None,\n+                 History.edate == None))    # noqa\n+\n+        if hist.count() == 1:\n+            log.debug('Matched history',\n+                      extra={'station_name': hist.first().station_name})\n+            return hist.first()\n+\n+    log.warning('Could not find match',\n+                extra={'network_name': obs_tuple.network_name,\n+                       'native_id': obs_tuple.station_id})\n+    return None\n+\n+\n+def match_station_with_location(sesh, obs_tuple, histories):\n+    log.debug('Find matching station with location')\n+    close_stns = closest_stns_within_threshold(sesh, obs_tuple.lon,\n+                                               obs_tuple.lat, 800)\n+\n+    if len(close_stns) == 0:\n+        log.debug('No station nearby')\n+        return create_station_and_history_entry(sesh, obs_tuple)\n+\n+    for id in close_stns:\n+        for history in histories:\n+            if id == history.id:\n+                log.debug('Matched history',\n+                          extra={'station_name': history.station_name})\n+                return history\n+\n+\n+def match_station(sesh, obs_tuple, history):\n+    if obs_tuple.lat and obs_tuple.lon:\n+        return match_station_with_location(sesh, obs_tuple, history)\n+    else:\n+        return match_station_with_active(sesh, obs_tuple, history)\n+\n+\n+def create_station_and_history_entry(sesh, obs_tuple):\n+    network = sesh.query(Network).filter(\n+        Network.name == obs_tuple.network_name)\n+\n+    network = network.first()\n+    stn = Station(native_id=obs_tuple.station_id, network=network)\n+    with sesh.begin_nested():\n+        sesh.add(stn)\n+    log.info('Created new station entry',\n+             extra={'native_id': stn.native_id, 'network_name': network.name})\n+\n+    hist = History(station=stn,\n+                   lat=obs_tuple.lat,\n+                   lon=obs_tuple.lon)\n+\n+    with sesh.begin_nested():\n+        sesh.add(hist)\n+    log.info('Created new history entry',\n+             extra={'history': hist.id, 'network_name': obs_tuple.network_name,\n+                    'lat': obs_tuple.lat, 'lon': obs_tuple.lon})\n+    sesh.commit()\n+    return hist\n+\n+\n+def get_variable(sesh, network_name, variable_name):\n+    log.debug('Get variable from db', extra={'var_name': variable_name,\n+                                             'network_name': network_name})\n+    variable = sesh.query(Variable).join(Network).filter(and_(\n+        Network.name == network_name,\n+        Variable.name == variable_name)).first()\n+\n+    if not variable:\n+        log.debug('Unable to match variable')\n+        return None\n+\n+    return variable\n+\n+\n+def get_history(sesh, obs_tuple):","path":"crmprtd/align.py","position":169,"original_position":169,"commit_id":"bae0c77c1952c62ec0ae1947218d59445e072e62","original_commit_id":"bae0c77c1952c62ec0ae1947218d59445e072e62","user":{"login":"nikola-rados","id":26128992,"node_id":"MDQ6VXNlcjI2MTI4OTky","avatar_url":"https://avatars2.githubusercontent.com/u/26128992?v=4","gravatar_id":"","url":"https://api.github.com/users/nikola-rados","html_url":"https://github.com/nikola-rados","followers_url":"https://api.github.com/users/nikola-rados/followers","following_url":"https://api.github.com/users/nikola-rados/following{/other_user}","gists_url":"https://api.github.com/users/nikola-rados/gists{/gist_id}","starred_url":"https://api.github.com/users/nikola-rados/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikola-rados/subscriptions","organizations_url":"https://api.github.com/users/nikola-rados/orgs","repos_url":"https://api.github.com/users/nikola-rados/repos","events_url":"https://api.github.com/users/nikola-rados/events{/privacy}","received_events_url":"https://api.github.com/users/nikola-rados/received_events","type":"User","site_admin":false},"body":"I haven't see that from any of them.","created_at":"2018-08-01T18:32:46Z","updated_at":"2018-08-01T18:32:47Z","html_url":"https://github.com/pacificclimate/crmprtd/pull/24#discussion_r206986564","pull_request_url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/comments/206986564"},"html":{"href":"https://github.com/pacificclimate/crmprtd/pull/24#discussion_r206986564"},"pull_request":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24"}},"in_reply_to_id":206682509},"pull_request":{"url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24","id":203634007,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAzNjM0MDA3","html_url":"https://github.com/pacificclimate/crmprtd/pull/24","diff_url":"https://github.com/pacificclimate/crmprtd/pull/24.diff","patch_url":"https://github.com/pacificclimate/crmprtd/pull/24.patch","issue_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues/24","number":24,"state":"open","locked":false,"title":"Feature Align","user":{"login":"nikola-rados","id":26128992,"node_id":"MDQ6VXNlcjI2MTI4OTky","avatar_url":"https://avatars2.githubusercontent.com/u/26128992?v=4","gravatar_id":"","url":"https://api.github.com/users/nikola-rados","html_url":"https://github.com/nikola-rados","followers_url":"https://api.github.com/users/nikola-rados/followers","following_url":"https://api.github.com/users/nikola-rados/following{/other_user}","gists_url":"https://api.github.com/users/nikola-rados/gists{/gist_id}","starred_url":"https://api.github.com/users/nikola-rados/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikola-rados/subscriptions","organizations_url":"https://api.github.com/users/nikola-rados/orgs","repos_url":"https://api.github.com/users/nikola-rados/repos","events_url":"https://api.github.com/users/nikola-rados/events{/privacy}","received_events_url":"https://api.github.com/users/nikola-rados/received_events","type":"User","site_admin":false},"body":"### Overview\r\nThe output of the _normalization phase_  is a namedTuple **Row**, this is then fed into the _align phase_ which produces a **pycds.Obs** object.  This object has 4 attributes: _time, vars_id, history_id, datum_.  Align ensures that the attributes found in **Row** are valid for our purposes and translates them into the **pycds.Obs** object.  In order for this object to be produced a place (location) and a thing (data) are required.  These 2 items have several checks to ensure that they are suitable for database entry.\r\n\r\n### Place\r\nRequirements for place are **network_name** and **station_id**.  Both of these attributes are used to determine the **history_id** of the station found in the _crmp.meta_history_ table. If there is no matching station currently in the database, new station and history entries will be made.\r\n\r\n### Thing\r\nRequirements for thing are **time** and **value**.  Value has an associated **variable name**, which must already exist in the database in order to be valid.  Once the variable name is confirmed the value's **units** must also match.  If the units do no match those found in the database they will be converted.  These checks for value help us find the correct **vars_id** and ensures that **datum** has the correct units.\r\n\r\n### Flowchart\r\nBelow is the basic logic the code follows.\r\n![align phase](https://user-images.githubusercontent.com/26128992/43161680-9dab6f7c-8f3d-11e8-85b6-f0febcea3d24.jpg)\r\n\r\n","created_at":"2018-07-24T19:43:21Z","updated_at":"2018-08-01T18:32:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"20aad71aa0e1101e39cd47cb8d58b7a4a8ceb755","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24/commits","review_comments_url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24/comments","review_comment_url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues/24/comments","statuses_url":"https://api.github.com/repos/pacificclimate/crmprtd/statuses/bae0c77c1952c62ec0ae1947218d59445e072e62","head":{"label":"pacificclimate:feature-align","ref":"feature-align","sha":"bae0c77c1952c62ec0ae1947218d59445e072e62","user":{"login":"pacificclimate","id":7443397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0NDMzOTc=","avatar_url":"https://avatars0.githubusercontent.com/u/7443397?v=4","gravatar_id":"","url":"https://api.github.com/users/pacificclimate","html_url":"https://github.com/pacificclimate","followers_url":"https://api.github.com/users/pacificclimate/followers","following_url":"https://api.github.com/users/pacificclimate/following{/other_user}","gists_url":"https://api.github.com/users/pacificclimate/gists{/gist_id}","starred_url":"https://api.github.com/users/pacificclimate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pacificclimate/subscriptions","organizations_url":"https://api.github.com/users/pacificclimate/orgs","repos_url":"https://api.github.com/users/pacificclimate/repos","events_url":"https://api.github.com/users/pacificclimate/events{/privacy}","received_events_url":"https://api.github.com/users/pacificclimate/received_events","type":"Organization","site_admin":false},"repo":{"id":33566292,"node_id":"MDEwOlJlcG9zaXRvcnkzMzU2NjI5Mg==","name":"crmprtd","full_name":"pacificclimate/crmprtd","owner":{"login":"pacificclimate","id":7443397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0NDMzOTc=","avatar_url":"https://avatars0.githubusercontent.com/u/7443397?v=4","gravatar_id":"","url":"https://api.github.com/users/pacificclimate","html_url":"https://github.com/pacificclimate","followers_url":"https://api.github.com/users/pacificclimate/followers","following_url":"https://api.github.com/users/pacificclimate/following{/other_user}","gists_url":"https://api.github.com/users/pacificclimate/gists{/gist_id}","starred_url":"https://api.github.com/users/pacificclimate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pacificclimate/subscriptions","organizations_url":"https://api.github.com/users/pacificclimate/orgs","repos_url":"https://api.github.com/users/pacificclimate/repos","events_url":"https://api.github.com/users/pacificclimate/events{/privacy}","received_events_url":"https://api.github.com/users/pacificclimate/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pacificclimate/crmprtd","description":"Utility to download near real time weather data and insert it into PCIC's database","fork":false,"url":"https://api.github.com/repos/pacificclimate/crmprtd","forks_url":"https://api.github.com/repos/pacificclimate/crmprtd/forks","keys_url":"https://api.github.com/repos/pacificclimate/crmprtd/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pacificclimate/crmprtd/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pacificclimate/crmprtd/teams","hooks_url":"https://api.github.com/repos/pacificclimate/crmprtd/hooks","issue_events_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues/events{/number}","events_url":"https://api.github.com/repos/pacificclimate/crmprtd/events","assignees_url":"https://api.github.com/repos/pacificclimate/crmprtd/assignees{/user}","branches_url":"https://api.github.com/repos/pacificclimate/crmprtd/branches{/branch}","tags_url":"https://api.github.com/repos/pacificclimate/crmprtd/tags","blobs_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/refs{/sha}","trees_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pacificclimate/crmprtd/statuses/{sha}","languages_url":"https://api.github.com/repos/pacificclimate/crmprtd/languages","stargazers_url":"https://api.github.com/repos/pacificclimate/crmprtd/stargazers","contributors_url":"https://api.github.com/repos/pacificclimate/crmprtd/contributors","subscribers_url":"https://api.github.com/repos/pacificclimate/crmprtd/subscribers","subscription_url":"https://api.github.com/repos/pacificclimate/crmprtd/subscription","commits_url":"https://api.github.com/repos/pacificclimate/crmprtd/commits{/sha}","git_commits_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/commits{/sha}","comments_url":"https://api.github.com/repos/pacificclimate/crmprtd/comments{/number}","issue_comment_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues/comments{/number}","contents_url":"https://api.github.com/repos/pacificclimate/crmprtd/contents/{+path}","compare_url":"https://api.github.com/repos/pacificclimate/crmprtd/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pacificclimate/crmprtd/merges","archive_url":"https://api.github.com/repos/pacificclimate/crmprtd/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pacificclimate/crmprtd/downloads","issues_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues{/number}","pulls_url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls{/number}","milestones_url":"https://api.github.com/repos/pacificclimate/crmprtd/milestones{/number}","notifications_url":"https://api.github.com/repos/pacificclimate/crmprtd/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pacificclimate/crmprtd/labels{/name}","releases_url":"https://api.github.com/repos/pacificclimate/crmprtd/releases{/id}","deployments_url":"https://api.github.com/repos/pacificclimate/crmprtd/deployments","created_at":"2015-04-07T20:23:03Z","updated_at":"2018-07-12T17:35:55Z","pushed_at":"2018-07-30T23:24:47Z","git_url":"git://github.com/pacificclimate/crmprtd.git","ssh_url":"git@github.com:pacificclimate/crmprtd.git","clone_url":"https://github.com/pacificclimate/crmprtd.git","svn_url":"https://github.com/pacificclimate/crmprtd","homepage":null,"size":496,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"pacificclimate:dev","ref":"dev","sha":"66cbb78f1faa74e0ffc5ef46feb0fda338ca3bfe","user":{"login":"pacificclimate","id":7443397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0NDMzOTc=","avatar_url":"https://avatars0.githubusercontent.com/u/7443397?v=4","gravatar_id":"","url":"https://api.github.com/users/pacificclimate","html_url":"https://github.com/pacificclimate","followers_url":"https://api.github.com/users/pacificclimate/followers","following_url":"https://api.github.com/users/pacificclimate/following{/other_user}","gists_url":"https://api.github.com/users/pacificclimate/gists{/gist_id}","starred_url":"https://api.github.com/users/pacificclimate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pacificclimate/subscriptions","organizations_url":"https://api.github.com/users/pacificclimate/orgs","repos_url":"https://api.github.com/users/pacificclimate/repos","events_url":"https://api.github.com/users/pacificclimate/events{/privacy}","received_events_url":"https://api.github.com/users/pacificclimate/received_events","type":"Organization","site_admin":false},"repo":{"id":33566292,"node_id":"MDEwOlJlcG9zaXRvcnkzMzU2NjI5Mg==","name":"crmprtd","full_name":"pacificclimate/crmprtd","owner":{"login":"pacificclimate","id":7443397,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0NDMzOTc=","avatar_url":"https://avatars0.githubusercontent.com/u/7443397?v=4","gravatar_id":"","url":"https://api.github.com/users/pacificclimate","html_url":"https://github.com/pacificclimate","followers_url":"https://api.github.com/users/pacificclimate/followers","following_url":"https://api.github.com/users/pacificclimate/following{/other_user}","gists_url":"https://api.github.com/users/pacificclimate/gists{/gist_id}","starred_url":"https://api.github.com/users/pacificclimate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pacificclimate/subscriptions","organizations_url":"https://api.github.com/users/pacificclimate/orgs","repos_url":"https://api.github.com/users/pacificclimate/repos","events_url":"https://api.github.com/users/pacificclimate/events{/privacy}","received_events_url":"https://api.github.com/users/pacificclimate/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pacificclimate/crmprtd","description":"Utility to download near real time weather data and insert it into PCIC's database","fork":false,"url":"https://api.github.com/repos/pacificclimate/crmprtd","forks_url":"https://api.github.com/repos/pacificclimate/crmprtd/forks","keys_url":"https://api.github.com/repos/pacificclimate/crmprtd/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pacificclimate/crmprtd/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pacificclimate/crmprtd/teams","hooks_url":"https://api.github.com/repos/pacificclimate/crmprtd/hooks","issue_events_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues/events{/number}","events_url":"https://api.github.com/repos/pacificclimate/crmprtd/events","assignees_url":"https://api.github.com/repos/pacificclimate/crmprtd/assignees{/user}","branches_url":"https://api.github.com/repos/pacificclimate/crmprtd/branches{/branch}","tags_url":"https://api.github.com/repos/pacificclimate/crmprtd/tags","blobs_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/refs{/sha}","trees_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pacificclimate/crmprtd/statuses/{sha}","languages_url":"https://api.github.com/repos/pacificclimate/crmprtd/languages","stargazers_url":"https://api.github.com/repos/pacificclimate/crmprtd/stargazers","contributors_url":"https://api.github.com/repos/pacificclimate/crmprtd/contributors","subscribers_url":"https://api.github.com/repos/pacificclimate/crmprtd/subscribers","subscription_url":"https://api.github.com/repos/pacificclimate/crmprtd/subscription","commits_url":"https://api.github.com/repos/pacificclimate/crmprtd/commits{/sha}","git_commits_url":"https://api.github.com/repos/pacificclimate/crmprtd/git/commits{/sha}","comments_url":"https://api.github.com/repos/pacificclimate/crmprtd/comments{/number}","issue_comment_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues/comments{/number}","contents_url":"https://api.github.com/repos/pacificclimate/crmprtd/contents/{+path}","compare_url":"https://api.github.com/repos/pacificclimate/crmprtd/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pacificclimate/crmprtd/merges","archive_url":"https://api.github.com/repos/pacificclimate/crmprtd/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pacificclimate/crmprtd/downloads","issues_url":"https://api.github.com/repos/pacificclimate/crmprtd/issues{/number}","pulls_url":"https://api.github.com/repos/pacificclimate/crmprtd/pulls{/number}","milestones_url":"https://api.github.com/repos/pacificclimate/crmprtd/milestones{/number}","notifications_url":"https://api.github.com/repos/pacificclimate/crmprtd/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pacificclimate/crmprtd/labels{/name}","releases_url":"https://api.github.com/repos/pacificclimate/crmprtd/releases{/id}","deployments_url":"https://api.github.com/repos/pacificclimate/crmprtd/deployments","created_at":"2015-04-07T20:23:03Z","updated_at":"2018-07-12T17:35:55Z","pushed_at":"2018-07-30T23:24:47Z","git_url":"git://github.com/pacificclimate/crmprtd.git","ssh_url":"git@github.com:pacificclimate/crmprtd.git","clone_url":"https://github.com/pacificclimate/crmprtd.git","svn_url":"https://github.com/pacificclimate/crmprtd","homepage":null,"size":496,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24"},"html":{"href":"https://github.com/pacificclimate/crmprtd/pull/24"},"issue":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/issues/24"},"comments":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/issues/24/comments"},"review_comments":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24/comments"},"review_comment":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/pulls/24/commits"},"statuses":{"href":"https://api.github.com/repos/pacificclimate/crmprtd/statuses/bae0c77c1952c62ec0ae1947218d59445e072e62"}},"author_association":"NONE"}}
{"actor":{"display_login":"nikola-rados"}}