{"action":"created","comment":{"url":"https://api.github.com/repos/xgcm/xmitgcm/pulls/comments/216644863","pull_request_review_id":154171765,"id":216644863,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNjY0NDg2Mw==","diff_hunk":"@@ -0,0 +1,979 @@\n+import pytest\n+import os\n+import tarfile\n+import xarray as xr\n+import numpy as np\n+import dask\n+from contextlib import contextmanager\n+import py\n+import tempfile\n+from glob import glob\n+from shutil import copyfile\n+import dask\n+import dask.array as dsa\n+\n+import xmitgcm\n+\n+_TESTDATA_FILENAME = 'testdata.tar.gz'\n+_TESTDATA_ITERS = [39600, ]\n+_TESTDATA_DELTAT = 86400\n+\n+_EXPECTED_GRID_VARS = ['XC', 'YC', 'XG', 'YG', 'Zl', 'Zu', 'Z', 'Zp1', 'dxC',\n+                       'rAs', 'rAw', 'Depth', 'rA', 'dxG', 'dyG', 'rAz', 'dyC',\n+                       'PHrefC', 'drC', 'PHrefF', 'drF',\n+                       'hFacS', 'hFacC', 'hFacW']\n+\n+\n+_xc_meta_content = \"\"\" simulation = { 'global_oce_latlon' };\n+ nDims = [   2 ];\n+ dimList = [\n+    90,    1,   90,\n+    40,    1,   40\n+ ];\n+ dataprec = [ 'float32' ];\n+ nrecords = [     1 ];\n+\"\"\"\n+\n+\n+@contextmanager\n+def hide_file(origdir, *basenames):\n+    \"\"\"Temporarily hide files within the context.\"\"\"\n+    # make everything a py.path.local\n+    tmpdir = py.path.local(tempfile.mkdtemp())\n+    origdir = py.path.local(origdir)\n+    oldpaths = [origdir.join(basename) for basename in basenames]\n+    newpaths = [tmpdir.join(basename) for basename in basenames]\n+\n+    # move the files\n+    for oldpath, newpath in zip(oldpaths, newpaths):\n+        oldpath.rename(newpath)\n+\n+    try:\n+        yield str(tmpdir)\n+    finally:\n+        # move them back\n+        for oldpath, newpath in zip(oldpaths, newpaths):\n+            newpath.rename(oldpath)\n+\n+\n+# parameterized fixture are complicated\n+# http://docs.pytest.org/en/latest/fixture.html#fixture-parametrize\n+\n+# dictionary of archived experiments and some expected properties\n+_experiments = {\n+    'global_oce_latlon': {'geometry': 'sphericalpolar',\n+                          'shape': (15, 40, 90), 'test_iternum': 39600,\n+                          'expected_values': {'XC': ((0, 0), 2)},\n+                          'dtype': np.dtype('f4'),\n+                          'layers': {'1RHO': 31},\n+                          'diagnostics': ('DiagGAD-T',\n+                                          ['TOTTTEND', 'ADVr_TH', 'ADVx_TH', 'ADVy_TH',\n+                                           'DFrE_TH', 'DFxE_TH', 'DFyE_TH', 'DFrI_TH',\n+                                           'UTHMASS', 'VTHMASS', 'WTHMASS'])},\n+    'barotropic_gyre': {'geometry': 'cartesian',\n+                        'shape': (1, 60, 60), 'test_iternum': 10,\n+                        'dtype': np.dtype('f4'),\n+                        'expected_values': {'XC': ((0, 0), 10000.0)},\n+                        'all_iters': [0, 10],\n+                        'prefixes': ['T', 'S', 'Eta', 'U', 'V', 'W']},\n+    'internal_wave': {'geometry': 'sphericalpolar',\n+                      'shape': (20, 1, 30), 'test_iternum': 100,\n+                      'dtype': np.dtype('f8'),\n+                      'expected_values': {'XC': ((0, 0), 109.01639344262296)},\n+                      'all_iters': [0, 100, 200],\n+                      'ref_date': \"1990-1-1\",\n+                      'delta_t': 60,\n+                      'expected_time': [\n+                          (0, np.datetime64('1990-01-01T00:00:00.000000000')),\n+                          (1, np.datetime64('1990-01-01T01:40:00.000000000'))],\n+                      # these diagnostics won't load because not all levels\n+                      # were output...no idea how to overcome that bug\n+                      # 'diagnostics': ('diagout1', ['UVEL', 'VVEL']),\n+                      'prefixes': ['T', 'S', 'Eta', 'U', 'V', 'W']},\n+    'global_oce_llc90': {'geometry': 'llc',\n+                         'ref_date': \"1948-01-01 12:00:00\",\n+                         'delta_t': 3600,\n+                         'expected_time': [\n+                             (0, np.datetime64('1948-01-01T12:00:00.000000000')),\n+                             (1, np.datetime64('1948-01-01T20:00:00.000000000'))],\n+                         'shape': (50, 13, 90, 90), 'test_iternum': 8,\n+                         'dtype': np.dtype('f4'),\n+                         'expected_values': {'XC': ((2, 3, 5), -32.5)},\n+                         'diagnostics': ('state_2d_set1', ['ETAN', 'SIarea',\n+                                                           'SIheff', 'SIhsnow', 'DETADT2', 'PHIBOT',\n+                                                           'sIceLoad', 'MXLDEPTH', 'oceSPDep', 'SIatmQnt',\n+                                                           'SIatmFW', 'oceQnet', 'oceFWflx', 'oceTAUX',\n+                                                           'oceTAUY', 'ADVxHEFF', 'ADVyHEFF', 'DFxEHEFF',\n+                                                           'DFyEHEFF', 'ADVxSNOW', 'ADVySNOW', 'DFxESNOW',\n+                                                           'DFyESNOW', 'SIuice', 'SIvice'])},\n+    'curvilinear_leman': {'geometry': 'curvilinear',\n+                          'delta_t': 20,\n+                          'ref_date': \"2013-11-12 12:00\",\n+                          'shape': (35, 64, 340),\n+                          'test_iternum': 6,\n+                          'dtype': np.dtype('f4'),\n+                          'expected_values': {'XC': ((0, 0), 501919.21875)},\n+                          'all_iters': [0, 3, 6],\n+                          'expected_time': [\n+                              (0, np.datetime64('2013-11-12T12:00:00.000000000')),\n+                              (1, np.datetime64('2013-11-12T12:02:00.000000000'))],\n+                          'prefixes': ['THETA']}\n+}\n+\n+\n+def setup_mds_dir(tmpdir_factory, request):\n+    \"\"\"Helper function for setting up test cases.\"\"\"\n+    expt_name = request.param\n+    expected_results = _experiments[expt_name]\n+    target_dir = str(tmpdir_factory.mktemp('mdsdata'))\n+    data_dir = os.path.dirname(request.module.__file__)\n+    return untar(data_dir, expt_name, target_dir), expected_results\n+\n+\n+def untar(data_dir, basename, target_dir):\n+    \"\"\"Unzip a tar file into the target directory. Return path to unzipped\n+    directory.\"\"\"\n+    datafile = os.path.join(data_dir, basename + '.tar.gz')\n+    if not os.path.exists(datafile):\n+        raise IOError('Could not find data file %s' % datafile)\n+    tar = tarfile.open(datafile)\n+    tar.extractall(target_dir)\n+    tar.close()\n+    # subdirectory where file should have been untarred.\n+    # assumes the directory is the same name as the tar file itself.\n+    # e.g. testdata.tar.gz --> testdata/\n+    fulldir = os.path.join(target_dir, basename)\n+    if not os.path.exists(fulldir):\n+        raise IOError('Could not find tar file output dir %s' % fulldir)\n+    # the actual data lives in a file called testdata\n+    return fulldir\n+\n+\n+# find the tar archive in the test directory\n+# http://stackoverflow.com/questions/29627341/pytest-where-to-store-expected-data\n+@pytest.fixture(scope='module', params=_experiments.keys())\n+def all_mds_datadirs(tmpdir_factory, request):\n+    return setup_mds_dir(tmpdir_factory, request)\n+\n+\n+@pytest.fixture(scope='module', params=['barotropic_gyre', 'internal_wave'])\n+def multidim_mds_datadirs(tmpdir_factory, request):\n+    return setup_mds_dir(tmpdir_factory, request)\n+\n+\n+@pytest.fixture(scope='module', params=['global_oce_latlon',\n+                                        'global_oce_llc90'])\n+def mds_datadirs_with_diagnostics(tmpdir_factory, request):\n+    return setup_mds_dir(tmpdir_factory, request)\n+\n+\n+@pytest.fixture(scope='module', params=['internal_wave', 'global_oce_llc90'])\n+def mds_datadirs_with_refdate(tmpdir_factory, request):\n+    return setup_mds_dir(tmpdir_factory, request)\n+\n+\n+@pytest.fixture(scope='module', params=['global_oce_latlon'])\n+def layers_mds_datadirs(tmpdir_factory, request):\n+    return setup_mds_dir(tmpdir_factory, request)\n+\n+\n+@pytest.fixture(scope='module', params=['global_oce_llc90'])\n+def llc_mds_datadirs(tmpdir_factory, request):\n+    return setup_mds_dir(tmpdir_factory, request)\n+\n+\n+def test_parse_meta(tmpdir):\n+    \"\"\"Check the parsing of MITgcm .meta into python dictionary.\"\"\"\n+\n+    from xmitgcm.utils import parse_meta_file\n+    p = tmpdir.join(\"XC.meta\")\n+    p.write(_xc_meta_content)\n+    fname = str(p)\n+    result = parse_meta_file(fname)\n+    expected = {\n+        'nrecords': 1,\n+        'basename': 'XC',\n+        'simulation': \"'global_oce_latlon'\",\n+        'dimList': [[90, 1, 90], [40, 1, 40]],\n+        'nDims': 2,\n+        'dataprec': np.dtype('float32')\n+    }\n+    for k, v in expected.items():\n+        assert result[k] == v\n+\n+\n+@pytest.mark.parametrize(\"dtype\", [np.dtype('f8'), np.dtype('f4'), np.dtype('i4')])","path":"xmitgcm/test/test_utils.py","position":205,"original_position":205,"commit_id":"22e96cd402bd62aa74fa6ac2cd4339f301379efe","original_commit_id":"22e96cd402bd62aa74fa6ac2cd4339f301379efe","user":{"login":"stickler-ci","id":16011037,"node_id":"MDQ6VXNlcjE2MDExMDM3","avatar_url":"https://avatars3.githubusercontent.com/u/16011037?v=4","gravatar_id":"","url":"https://api.github.com/users/stickler-ci","html_url":"https://github.com/stickler-ci","followers_url":"https://api.github.com/users/stickler-ci/followers","following_url":"https://api.github.com/users/stickler-ci/following{/other_user}","gists_url":"https://api.github.com/users/stickler-ci/gists{/gist_id}","starred_url":"https://api.github.com/users/stickler-ci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stickler-ci/subscriptions","organizations_url":"https://api.github.com/users/stickler-ci/orgs","repos_url":"https://api.github.com/users/stickler-ci/repos","events_url":"https://api.github.com/users/stickler-ci/events{/privacy}","received_events_url":"https://api.github.com/users/stickler-ci/received_events","type":"User","site_admin":false},"body":"E501 line too long (83 > 79 characters)","created_at":"2018-09-11T12:11:03Z","updated_at":"2018-09-11T12:11:04Z","html_url":"https://github.com/xgcm/xmitgcm/pull/93#discussion_r216644863","pull_request_url":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/xgcm/xmitgcm/pulls/comments/216644863"},"html":{"href":"https://github.com/xgcm/xmitgcm/pull/93#discussion_r216644863"},"pull_request":{"href":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93"}}},"pull_request":{"url":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93","id":212474234,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyNDc0MjM0","html_url":"https://github.com/xgcm/xmitgcm/pull/93","diff_url":"https://github.com/xgcm/xmitgcm/pull/93.diff","patch_url":"https://github.com/xgcm/xmitgcm/pull/93.patch","issue_url":"https://api.github.com/repos/xgcm/xmitgcm/issues/93","number":93,"state":"open","locked":false,"title":"clean refactored read_mds","user":{"login":"raphaeldussin","id":14662821,"node_id":"MDQ6VXNlcjE0NjYyODIx","avatar_url":"https://avatars1.githubusercontent.com/u/14662821?v=4","gravatar_id":"","url":"https://api.github.com/users/raphaeldussin","html_url":"https://github.com/raphaeldussin","followers_url":"https://api.github.com/users/raphaeldussin/followers","following_url":"https://api.github.com/users/raphaeldussin/following{/other_user}","gists_url":"https://api.github.com/users/raphaeldussin/gists{/gist_id}","starred_url":"https://api.github.com/users/raphaeldussin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphaeldussin/subscriptions","organizations_url":"https://api.github.com/users/raphaeldussin/orgs","repos_url":"https://api.github.com/users/raphaeldussin/repos","events_url":"https://api.github.com/users/raphaeldussin/events{/privacy}","received_events_url":"https://api.github.com/users/raphaeldussin/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-08-31T19:24:45Z","updated_at":"2018-09-11T12:11:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"265292fb5a0bdf78eb38485d6056078995ea7f86","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93/commits","review_comments_url":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93/comments","review_comment_url":"https://api.github.com/repos/xgcm/xmitgcm/pulls/comments{/number}","comments_url":"https://api.github.com/repos/xgcm/xmitgcm/issues/93/comments","statuses_url":"https://api.github.com/repos/xgcm/xmitgcm/statuses/22e96cd402bd62aa74fa6ac2cd4339f301379efe","head":{"label":"raphaeldussin:clean_refac_read_mds","ref":"clean_refac_read_mds","sha":"22e96cd402bd62aa74fa6ac2cd4339f301379efe","user":{"login":"raphaeldussin","id":14662821,"node_id":"MDQ6VXNlcjE0NjYyODIx","avatar_url":"https://avatars1.githubusercontent.com/u/14662821?v=4","gravatar_id":"","url":"https://api.github.com/users/raphaeldussin","html_url":"https://github.com/raphaeldussin","followers_url":"https://api.github.com/users/raphaeldussin/followers","following_url":"https://api.github.com/users/raphaeldussin/following{/other_user}","gists_url":"https://api.github.com/users/raphaeldussin/gists{/gist_id}","starred_url":"https://api.github.com/users/raphaeldussin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphaeldussin/subscriptions","organizations_url":"https://api.github.com/users/raphaeldussin/orgs","repos_url":"https://api.github.com/users/raphaeldussin/repos","events_url":"https://api.github.com/users/raphaeldussin/events{/privacy}","received_events_url":"https://api.github.com/users/raphaeldussin/received_events","type":"User","site_admin":false},"repo":{"id":138317630,"node_id":"MDEwOlJlcG9zaXRvcnkxMzgzMTc2MzA=","name":"xmitgcm","full_name":"raphaeldussin/xmitgcm","owner":{"login":"raphaeldussin","id":14662821,"node_id":"MDQ6VXNlcjE0NjYyODIx","avatar_url":"https://avatars1.githubusercontent.com/u/14662821?v=4","gravatar_id":"","url":"https://api.github.com/users/raphaeldussin","html_url":"https://github.com/raphaeldussin","followers_url":"https://api.github.com/users/raphaeldussin/followers","following_url":"https://api.github.com/users/raphaeldussin/following{/other_user}","gists_url":"https://api.github.com/users/raphaeldussin/gists{/gist_id}","starred_url":"https://api.github.com/users/raphaeldussin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/raphaeldussin/subscriptions","organizations_url":"https://api.github.com/users/raphaeldussin/orgs","repos_url":"https://api.github.com/users/raphaeldussin/repos","events_url":"https://api.github.com/users/raphaeldussin/events{/privacy}","received_events_url":"https://api.github.com/users/raphaeldussin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/raphaeldussin/xmitgcm","description":"Read MITgcm mds binary files into xarray","fork":true,"url":"https://api.github.com/repos/raphaeldussin/xmitgcm","forks_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/forks","keys_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/teams","hooks_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/hooks","issue_events_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/issues/events{/number}","events_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/events","assignees_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/assignees{/user}","branches_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/branches{/branch}","tags_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/tags","blobs_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/git/refs{/sha}","trees_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/statuses/{sha}","languages_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/languages","stargazers_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/stargazers","contributors_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/contributors","subscribers_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/subscribers","subscription_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/subscription","commits_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/commits{/sha}","git_commits_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/git/commits{/sha}","comments_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/comments{/number}","issue_comment_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/issues/comments{/number}","contents_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/contents/{+path}","compare_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/merges","archive_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/downloads","issues_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/issues{/number}","pulls_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/pulls{/number}","milestones_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/milestones{/number}","notifications_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/labels{/name}","releases_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/releases{/id}","deployments_url":"https://api.github.com/repos/raphaeldussin/xmitgcm/deployments","created_at":"2018-06-22T15:17:13Z","updated_at":"2018-08-27T14:47:43Z","pushed_at":"2018-09-11T12:08:19Z","git_url":"git://github.com/raphaeldussin/xmitgcm.git","ssh_url":"git@github.com:raphaeldussin/xmitgcm.git","clone_url":"https://github.com/raphaeldussin/xmitgcm.git","svn_url":"https://github.com/raphaeldussin/xmitgcm","homepage":"http://xmitgcm.readthedocs.io","size":117074,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"xgcm:master","ref":"master","sha":"84592eead73e09b8d7553426b643a720c71aa9ea","user":{"login":"xgcm","id":14025832,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDI1ODMy","avatar_url":"https://avatars2.githubusercontent.com/u/14025832?v=4","gravatar_id":"","url":"https://api.github.com/users/xgcm","html_url":"https://github.com/xgcm","followers_url":"https://api.github.com/users/xgcm/followers","following_url":"https://api.github.com/users/xgcm/following{/other_user}","gists_url":"https://api.github.com/users/xgcm/gists{/gist_id}","starred_url":"https://api.github.com/users/xgcm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xgcm/subscriptions","organizations_url":"https://api.github.com/users/xgcm/orgs","repos_url":"https://api.github.com/users/xgcm/repos","events_url":"https://api.github.com/users/xgcm/events{/privacy}","received_events_url":"https://api.github.com/users/xgcm/received_events","type":"Organization","site_admin":false},"repo":{"id":70649781,"node_id":"MDEwOlJlcG9zaXRvcnk3MDY0OTc4MQ==","name":"xmitgcm","full_name":"xgcm/xmitgcm","owner":{"login":"xgcm","id":14025832,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MDI1ODMy","avatar_url":"https://avatars2.githubusercontent.com/u/14025832?v=4","gravatar_id":"","url":"https://api.github.com/users/xgcm","html_url":"https://github.com/xgcm","followers_url":"https://api.github.com/users/xgcm/followers","following_url":"https://api.github.com/users/xgcm/following{/other_user}","gists_url":"https://api.github.com/users/xgcm/gists{/gist_id}","starred_url":"https://api.github.com/users/xgcm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xgcm/subscriptions","organizations_url":"https://api.github.com/users/xgcm/orgs","repos_url":"https://api.github.com/users/xgcm/repos","events_url":"https://api.github.com/users/xgcm/events{/privacy}","received_events_url":"https://api.github.com/users/xgcm/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/xgcm/xmitgcm","description":"Read MITgcm mds binary files into xarray","fork":false,"url":"https://api.github.com/repos/xgcm/xmitgcm","forks_url":"https://api.github.com/repos/xgcm/xmitgcm/forks","keys_url":"https://api.github.com/repos/xgcm/xmitgcm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xgcm/xmitgcm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xgcm/xmitgcm/teams","hooks_url":"https://api.github.com/repos/xgcm/xmitgcm/hooks","issue_events_url":"https://api.github.com/repos/xgcm/xmitgcm/issues/events{/number}","events_url":"https://api.github.com/repos/xgcm/xmitgcm/events","assignees_url":"https://api.github.com/repos/xgcm/xmitgcm/assignees{/user}","branches_url":"https://api.github.com/repos/xgcm/xmitgcm/branches{/branch}","tags_url":"https://api.github.com/repos/xgcm/xmitgcm/tags","blobs_url":"https://api.github.com/repos/xgcm/xmitgcm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xgcm/xmitgcm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xgcm/xmitgcm/git/refs{/sha}","trees_url":"https://api.github.com/repos/xgcm/xmitgcm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xgcm/xmitgcm/statuses/{sha}","languages_url":"https://api.github.com/repos/xgcm/xmitgcm/languages","stargazers_url":"https://api.github.com/repos/xgcm/xmitgcm/stargazers","contributors_url":"https://api.github.com/repos/xgcm/xmitgcm/contributors","subscribers_url":"https://api.github.com/repos/xgcm/xmitgcm/subscribers","subscription_url":"https://api.github.com/repos/xgcm/xmitgcm/subscription","commits_url":"https://api.github.com/repos/xgcm/xmitgcm/commits{/sha}","git_commits_url":"https://api.github.com/repos/xgcm/xmitgcm/git/commits{/sha}","comments_url":"https://api.github.com/repos/xgcm/xmitgcm/comments{/number}","issue_comment_url":"https://api.github.com/repos/xgcm/xmitgcm/issues/comments{/number}","contents_url":"https://api.github.com/repos/xgcm/xmitgcm/contents/{+path}","compare_url":"https://api.github.com/repos/xgcm/xmitgcm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xgcm/xmitgcm/merges","archive_url":"https://api.github.com/repos/xgcm/xmitgcm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xgcm/xmitgcm/downloads","issues_url":"https://api.github.com/repos/xgcm/xmitgcm/issues{/number}","pulls_url":"https://api.github.com/repos/xgcm/xmitgcm/pulls{/number}","milestones_url":"https://api.github.com/repos/xgcm/xmitgcm/milestones{/number}","notifications_url":"https://api.github.com/repos/xgcm/xmitgcm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xgcm/xmitgcm/labels{/name}","releases_url":"https://api.github.com/repos/xgcm/xmitgcm/releases{/id}","deployments_url":"https://api.github.com/repos/xgcm/xmitgcm/deployments","created_at":"2016-10-12T01:22:04Z","updated_at":"2018-09-10T17:25:02Z","pushed_at":"2018-09-11T12:08:21Z","git_url":"git://github.com/xgcm/xmitgcm.git","ssh_url":"git@github.com:xgcm/xmitgcm.git","clone_url":"https://github.com/xgcm/xmitgcm.git","svn_url":"https://github.com/xgcm/xmitgcm","homepage":"http://xmitgcm.readthedocs.io","size":117007,"stargazers_count":16,"watchers_count":16,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":23,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":25,"open_issues":23,"watchers":16,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93"},"html":{"href":"https://github.com/xgcm/xmitgcm/pull/93"},"issue":{"href":"https://api.github.com/repos/xgcm/xmitgcm/issues/93"},"comments":{"href":"https://api.github.com/repos/xgcm/xmitgcm/issues/93/comments"},"review_comments":{"href":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93/comments"},"review_comment":{"href":"https://api.github.com/repos/xgcm/xmitgcm/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/xgcm/xmitgcm/pulls/93/commits"},"statuses":{"href":"https://api.github.com/repos/xgcm/xmitgcm/statuses/22e96cd402bd62aa74fa6ac2cd4339f301379efe"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"stickler-ci"}}