{"action":"created","comment":{"url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/comments/40127372","id":40127372,"diff_hunk":"@@ -0,0 +1,906 @@\n+#! /usr/bin/env python\n+'''\n+    PURPOSE: Retieves archived NARR files from the NCEP for the dates\n+             requested.  Extracts the variables LST requires (HGT, TMP, SPFH)\n+             and repackages them into our internal location and filenames.\n+\n+    PROJECT: Land Satellites Data Systems Science Research and Development\n+             (LSRD) at the USGS EROS\n+\n+    LICENSE: NASA Open Source Agreement 1.3\n+\n+    NOTES:\n+\n+          NCEP     - National Centers for Environmental Prediction\n+                     http://www.ncep.noaa.gov\n+\n+          NARR     - NCEP North American Regional Reanalysis\n+\n+          CISL RDA - Computational & Information Systems Lab\n+                     Research Data Archive http://rda.ucar.edu\n+\n+          NCAR     - National Center for Atmospheric Research\n+                     http://ncar.ucar.edu\n+\n+          UCAR     - University Corporation for Atmospheric Research\n+                     http://www2.ucar.edu\n+'''\n+import os\n+import sys\n+import shutil\n+import logging\n+import errno\n+import commands\n+import requests\n+import calendar\n+import itertools\n+import multiprocessing as mp\n+from cStringIO import StringIO\n+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter\n+from osgeo import gdal, osr\n+from time import sleep\n+from datetime import datetime, timedelta, date\n+from contextlib import closing\n+import collections\n+import json\n+\n+\n+def debug(tag, message):\n+    logger = logging.getLogger(tag)\n+    logger.debug(message)\n+\n+\n+def substring_between(s, start, finish):\n+    '''Find string between two substrings'''\n+    end_of_start = s.index(start) + len(start)\n+    start_of_finish = s.index(finish, end_of_start)\n+    return s[end_of_start:start_of_finish]\n+\n+\n+# ============================================================================\n+class Web(object):\n+    '''\n+    Description:\n+        Provides methods for interfacing with web resources.\n+    '''\n+\n+    # ------------------------------------------------------------------------\n+    class Session(object):\n+        '''\n+        Description:\n+            Manages an http(s) session.\n+        '''\n+\n+        # --------------------------------------------------------------------\n+        def __init__(self, max_retries=3, block_size=None, timeout=300.0):\n+            super(Web.Session, self).__init__()\n+\n+            self.logger = logging.getLogger(__name__)\n+\n+            self.session = requests.Session()\n+\n+            self.timeout = timeout\n+            self.max_retries = max_retries\n+\n+            # Determine if we are streaming or not based on block_size\n+            self.block_size = block_size\n+            self.stream = False\n+            if self.block_size is not None:\n+                self.stream = True\n+\n+            adapter = requests.adapters.HTTPAdapter(max_retries=max_retries)\n+            self.session.mount('http://', adapter)\n+            self.session.mount('https://', adapter)\n+\n+        # --------------------------------------------------------------------\n+        def login(self, login_url, login_data):\n+            '''\n+            Description:\n+                Provides for establishing a logged in session.\n+            '''\n+\n+            # Login to the site\n+            self.session.post(url=login_url, data=login_data)\n+\n+        # --------------------------------------------------------------------\n+        def _get_file(self, download_url, destination_file, headers=None):\n+            '''\n+            Notes: Downloading this way will place the whole source file into\n+                   memory before dumping to the local file.\n+            '''\n+\n+            req = self.session.get(url=download_url, timeout=self.timeout,\n+                                   headers=headers)\n+\n+            if not req.ok:\n+                self.logger.error('HTTP - Transfer of [{0}] - FAILED'\n+                                  .format(download_url))\n+                # The raise_for_status gets caught by this try's except block\n+                req.raise_for_status()\n+\n+            # Write the downloaded data to the destination file\n+            with open(destination_file, 'wb') as local_fd:\n+                local_fd.write(req.content)\n+\n+                return True\n+\n+        # --------------------------------------------------------------------\n+        def _stream_file(self, download_url, destination_file, headers=None):\n+            '''\n+            Notes: Downloading this way streams 'block_size' of data at a\n+                   time.\n+            '''\n+\n+            retrieved_bytes = 0\n+            with closing(self.session.get(url=download_url,\n+                                          timeout=self.timeout,\n+                                          stream=True,\n+                                          headers=headers)) as req:\n+                file_size = int(req.headers['content-length'])\n+\n+                # Set block size based on streaming\n+                if self.stream:\n+                    block_size = self.block_size\n+                else:\n+                    block_size = file_size\n+\n+                # Write the downloaded data to the destination file\n+                with open(destination_file, 'wb') as local_fd:\n+                    for data_chunk in req.iter_content(block_size):\n+                        local_fd.write(data_chunk)\n+                        retrieved_bytes += len(data_chunk)\n+\n+                if retrieved_bytes != file_size:\n+                    raise Exception('Transfer Failed - HTTP -'\n+                                    ' Retrieved {0} out of {1} bytes'\n+                                    .format(retrieved_bytes, file_size))\n+                else:\n+                    return True\n+\n+        # --------------------------------------------------------------------\n+        def http_transfer_file(self, download_url, destination_file):\n+            '''\n+            Description:\n+                Use http to transfer a file from a source location to a\n+                destination file on the localhost.\n+            Returns:\n+                status_code - One of the following\n+                            - 200, requests.codes['ok']\n+                            - 404, requests.codes['not_found']:\n+                            - 503, requests.codes['service_unavailable']:\n+            Notes:\n+                If a 503 is returned, the logged exception should be reviewed\n+                to determine the real cause of the error.\n+            '''\n+\n+            self.logger.info(download_url)\n+\n+            retry_attempt = 0\n+            done = False\n+            while not done:\n+                status_code = requests.codes['ok']\n+                try:\n+\n+                    done = self._stream_file(download_url,\n+                                             destination_file)\n+\n+                    if done:\n+                        self.logger.info(\"Transfer Complete - HTTP\")\n+\n+                except Exception:\n+                    self.logger.exception('HTTP - Transfer Issue')\n+\n+                    if status_code != requests.codes['not_found']:\n+                        if retry_attempt > self.max_retries:\n+                            self.logger.info('HTTP - Transfer Failed'\n+                                             ' - exceeded retry limit')\n+                            done = True\n+                        else:\n+                            retry_attempt += 1\n+                            sleep(int(1.5 * retry_attempt))\n+                    else:\n+                        # Not Found - So break the looping because we are done\n+                        done = True\n+\n+            return status_code\n+\n+        # --------------------------------------------------------------------\n+        def get_last_modified(self, download_url, destination_file, headers=None):\n+            '''\n+            Notes: Downloading this way streams 'block_size' of data at a\n+                   time.\n+            '''\n+            with closing(self.session.get(url=download_url,\n+                                          timeout=self.timeout,\n+                                          stream=self.stream,\n+                                          headers=headers)) as req:\n+                last_modified = req.headers['last-modified']\n+            return last_modified\n+\n+        # --------------------------------------------------------------------\n+        def get_lines_from_url(self, download_url):\n+            data = []\n+            with closing(self.session.get(url=download_url,\n+                                          timeout=self.timeout,\n+                                          stream=self.stream)) as req:\n+                for line in req.iter_lines():\n+                    data.append(line)\n+\n+            return data\n+\n+\n+# ============================================================================\n+class System(object):\n+    '''\n+    Description:\n+        Provides methods for interfacing with the host server.\n+    '''\n+\n+    # ------------------------------------------------------------------------\n+    @staticmethod\n+    def execute_cmd(cmd):\n+        '''\n+        Description:\n+            Execute a command line and return the terminal output or raise an\n+            exception\n+\n+        Returns:\n+            output - The stdout and/or stderr from the executed command.\n+        '''\n+\n+        logger = logging.getLogger(__name__)\n+\n+        output = ''\n+\n+        logger.info('Executing [{0}]'.format(cmd))\n+        (status, output) = commands.getstatusoutput(cmd)\n+\n+        if status < 0:\n+            message = 'Application terminated by signal [{0}]'.format(cmd)\n+            if len(output) > 0:\n+                message = ' Stdout/Stderr is: '.join([message, output])\n+            raise Exception(message)\n+\n+        if status != 0:\n+            message = 'Application failed to execute [{0}]'.format(cmd)\n+            if len(output) > 0:\n+                message = ' Stdout/Stderr is: '.join([message, output])\n+            raise Exception(message)\n+\n+        if os.WEXITSTATUS(status) != 0:\n+            message = ('Application [{0}] returned error code [{1}]'\n+                       .format(cmd, os.WEXITSTATUS(status)))\n+            if len(output) > 0:\n+                message = ' Stdout/Stderr is: '.join([message, output])\n+            raise Exception(message)\n+\n+        return output\n+\n+    # ------------------------------------------------------------------------\n+    @staticmethod\n+    def create_directory(directory):\n+        '''\n+        Description:\n+            Create the specified directory with some error checking.\n+        '''\n+\n+        # Create/Make sure the directory exists\n+        try:\n+            os.makedirs(directory, mode=0755)\n+        except OSError as ose:\n+            if ose.errno == errno.EEXIST and os.path.isdir(directory):\n+                pass\n+            else:\n+                raise\n+\n+\n+class Config(object):\n+    '''Access to configurable attributes of script\n+\n+    First it will try to read json data from the config file.\n+    If the file does not exist then all config will be from default values.\n+    If Key/value pair doesn't exist in file then default values will be used.\n+    '''\n+    config = None  # Stores result of reading json object from file.\n+    default_config = {'ncep_url_format': 'http://ftp.cpc.ncep.noaa.gov/wd51we/NARR_archive/{0}',\n+                      'remote_name_format': 'rcdas.{0:03}{1:02}{2:02}{3:02}.awip32.merged',\n+                      'archive_directory_format': '{0}/{1:0>4}/{2:0>2}/{3:0>2}',\n+                      'archive_name_format': 'NARR_3D.{0}.{1:04}{2:02}{3:02}.{4:04}.{5}'\n+                     }\n+    @classmethod\n+    def read_config(cls, cfg_file='lst_auxillary.config.example'):\n+        # Load the file\n+        with open(cfg_file, 'r') as fd:\n+            lines = list()\n+            for line in fd:\n+                # Skip rudimentary comments\n+                if line.strip().startswith('#'):\n+                    continue\n+\n+                lines.append(line)\n+\n+            cls.config = json.loads(' '.join(lines))\n+\n+        if cls.config is None:\n+            raise Exception('Failed loading configuration')\n+        return cls.config\n+\n+    @classmethod\n+    def get(cls, attr):\n+        try:\n+            if(cls.config is None):\n+                cls.config = cls.read_config()\n+            if attr in cls.config:\n+                return cls.config[attr]\n+            else:\n+                return cls.default_config[attr]\n+        except IOError:\n+            # If no config is read then use defaults\n+            return cls.default_config[attr]\n+            pass\n+\n+\n+class Ncep(object):\n+    '''Interface for interacting with Ncep website\n+\n+    NarrData depends on the following functionality of this class:\n+        Provide means of getting a particular grib file into current working\n+            directory via get_grib_file()\n+        Provides a dict of all files available via get_dict_of_date_modified()\n+            keys are filenames, values are time of last modification\n+        Provides format of the grib filename via get_filename()\n+    '''\n+    mtime_by_name = None\n+    session = None\n+\n+    # NOAA_FMT.format(year, month, day, hour)\n+    @staticmethod\n+    def get_url(filename):\n+        return Config.get('ncep_url_format').format(filename)\n+\n+    @staticmethod\n+    def get_filename(year, month, day, hour):","path":"lst_auxillary_data/update_narr_aux_data.py","position":362,"original_position":362,"commit_id":"e5dfd6c1c448493b8fbbd4fd7fbe3830722f5e85","original_commit_id":"e5dfd6c1c448493b8fbbd4fd7fbe3830722f5e85","user":{"login":"rdilley-usgs","id":12140146,"avatar_url":"https://avatars.githubusercontent.com/u/12140146?v=3","gravatar_id":"","url":"https://api.github.com/users/rdilley-usgs","html_url":"https://github.com/rdilley-usgs","followers_url":"https://api.github.com/users/rdilley-usgs/followers","following_url":"https://api.github.com/users/rdilley-usgs/following{/other_user}","gists_url":"https://api.github.com/users/rdilley-usgs/gists{/gist_id}","starred_url":"https://api.github.com/users/rdilley-usgs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rdilley-usgs/subscriptions","organizations_url":"https://api.github.com/users/rdilley-usgs/orgs","repos_url":"https://api.github.com/users/rdilley-usgs/repos","events_url":"https://api.github.com/users/rdilley-usgs/events{/privacy}","received_events_url":"https://api.github.com/users/rdilley-usgs/received_events","type":"User","site_admin":false},"body":"Should have a description comment","created_at":"2015-09-22T18:48:03Z","updated_at":"2015-09-22T18:48:03Z","html_url":"https://github.com/USGS-EROS/espa-land-surface-temperature/pull/3#discussion_r40127372","pull_request_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/comments/40127372"},"html":{"href":"https://github.com/USGS-EROS/espa-land-surface-temperature/pull/3#discussion_r40127372"},"pull_request":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3","id":45219203,"html_url":"https://github.com/USGS-EROS/espa-land-surface-temperature/pull/3","diff_url":"https://github.com/USGS-EROS/espa-land-surface-temperature/pull/3.diff","patch_url":"https://github.com/USGS-EROS/espa-land-surface-temperature/pull/3.patch","issue_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues/3","number":3,"state":"open","locked":false,"title":"Finished 'update_narr_aux_data.py'","user":{"login":"NGenetzky","id":12733783,"avatar_url":"https://avatars.githubusercontent.com/u/12733783?v=3","gravatar_id":"","url":"https://api.github.com/users/NGenetzky","html_url":"https://github.com/NGenetzky","followers_url":"https://api.github.com/users/NGenetzky/followers","following_url":"https://api.github.com/users/NGenetzky/following{/other_user}","gists_url":"https://api.github.com/users/NGenetzky/gists{/gist_id}","starred_url":"https://api.github.com/users/NGenetzky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NGenetzky/subscriptions","organizations_url":"https://api.github.com/users/NGenetzky/orgs","repos_url":"https://api.github.com/users/NGenetzky/repos","events_url":"https://api.github.com/users/NGenetzky/events{/privacy}","received_events_url":"https://api.github.com/users/NGenetzky/received_events","type":"User","site_admin":false},"body":"The script is used to download the narr aux data from the NCEP data source.","created_at":"2015-09-16T20:21:02Z","updated_at":"2015-09-22T18:48:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"65115cb39c896303bb39ccdeaaa050f1e9230f96","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3/commits","review_comments_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3/comments","review_comment_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/comments{/number}","comments_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues/3/comments","statuses_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/statuses/e5dfd6c1c448493b8fbbd4fd7fbe3830722f5e85","head":{"label":"NGenetzky:dev_v0.0.1-a","ref":"dev_v0.0.1-a","sha":"e5dfd6c1c448493b8fbbd4fd7fbe3830722f5e85","user":{"login":"NGenetzky","id":12733783,"avatar_url":"https://avatars.githubusercontent.com/u/12733783?v=3","gravatar_id":"","url":"https://api.github.com/users/NGenetzky","html_url":"https://github.com/NGenetzky","followers_url":"https://api.github.com/users/NGenetzky/followers","following_url":"https://api.github.com/users/NGenetzky/following{/other_user}","gists_url":"https://api.github.com/users/NGenetzky/gists{/gist_id}","starred_url":"https://api.github.com/users/NGenetzky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NGenetzky/subscriptions","organizations_url":"https://api.github.com/users/NGenetzky/orgs","repos_url":"https://api.github.com/users/NGenetzky/repos","events_url":"https://api.github.com/users/NGenetzky/events{/privacy}","received_events_url":"https://api.github.com/users/NGenetzky/received_events","type":"User","site_admin":false},"repo":{"id":40251689,"name":"espa-land-surface-temperature","full_name":"NGenetzky/espa-land-surface-temperature","owner":{"login":"NGenetzky","id":12733783,"avatar_url":"https://avatars.githubusercontent.com/u/12733783?v=3","gravatar_id":"","url":"https://api.github.com/users/NGenetzky","html_url":"https://github.com/NGenetzky","followers_url":"https://api.github.com/users/NGenetzky/followers","following_url":"https://api.github.com/users/NGenetzky/following{/other_user}","gists_url":"https://api.github.com/users/NGenetzky/gists{/gist_id}","starred_url":"https://api.github.com/users/NGenetzky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NGenetzky/subscriptions","organizations_url":"https://api.github.com/users/NGenetzky/orgs","repos_url":"https://api.github.com/users/NGenetzky/repos","events_url":"https://api.github.com/users/NGenetzky/events{/privacy}","received_events_url":"https://api.github.com/users/NGenetzky/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/NGenetzky/espa-land-surface-temperature","description":"ESPA modules for determining land surface temperature","fork":true,"url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature","forks_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/forks","keys_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/teams","hooks_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/hooks","issue_events_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/issues/events{/number}","events_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/events","assignees_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/assignees{/user}","branches_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/branches{/branch}","tags_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/tags","blobs_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/git/refs{/sha}","trees_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/statuses/{sha}","languages_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/languages","stargazers_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/stargazers","contributors_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/contributors","subscribers_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/subscribers","subscription_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/subscription","commits_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/commits{/sha}","git_commits_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/git/commits{/sha}","comments_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/comments{/number}","issue_comment_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/issues/comments{/number}","contents_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/contents/{+path}","compare_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/merges","archive_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/downloads","issues_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/issues{/number}","pulls_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/pulls{/number}","milestones_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/milestones{/number}","notifications_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/labels{/name}","releases_url":"https://api.github.com/repos/NGenetzky/espa-land-surface-temperature/releases{/id}","created_at":"2015-08-05T14:59:28Z","updated_at":"2015-08-05T14:59:30Z","pushed_at":"2015-09-16T20:16:24Z","git_url":"git://github.com/NGenetzky/espa-land-surface-temperature.git","ssh_url":"git@github.com:NGenetzky/espa-land-surface-temperature.git","clone_url":"https://github.com/NGenetzky/espa-land-surface-temperature.git","svn_url":"https://github.com/NGenetzky/espa-land-surface-temperature","homepage":null,"size":13300,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"USGS-EROS:dev_v0.0.1","ref":"dev_v0.0.1","sha":"1c29d9557fa83c60c7f7abca2038edb22ab8f6ef","user":{"login":"USGS-EROS","id":12549192,"avatar_url":"https://avatars.githubusercontent.com/u/12549192?v=3","gravatar_id":"","url":"https://api.github.com/users/USGS-EROS","html_url":"https://github.com/USGS-EROS","followers_url":"https://api.github.com/users/USGS-EROS/followers","following_url":"https://api.github.com/users/USGS-EROS/following{/other_user}","gists_url":"https://api.github.com/users/USGS-EROS/gists{/gist_id}","starred_url":"https://api.github.com/users/USGS-EROS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/USGS-EROS/subscriptions","organizations_url":"https://api.github.com/users/USGS-EROS/orgs","repos_url":"https://api.github.com/users/USGS-EROS/repos","events_url":"https://api.github.com/users/USGS-EROS/events{/privacy}","received_events_url":"https://api.github.com/users/USGS-EROS/received_events","type":"Organization","site_admin":false},"repo":{"id":36674207,"name":"espa-land-surface-temperature","full_name":"USGS-EROS/espa-land-surface-temperature","owner":{"login":"USGS-EROS","id":12549192,"avatar_url":"https://avatars.githubusercontent.com/u/12549192?v=3","gravatar_id":"","url":"https://api.github.com/users/USGS-EROS","html_url":"https://github.com/USGS-EROS","followers_url":"https://api.github.com/users/USGS-EROS/followers","following_url":"https://api.github.com/users/USGS-EROS/following{/other_user}","gists_url":"https://api.github.com/users/USGS-EROS/gists{/gist_id}","starred_url":"https://api.github.com/users/USGS-EROS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/USGS-EROS/subscriptions","organizations_url":"https://api.github.com/users/USGS-EROS/orgs","repos_url":"https://api.github.com/users/USGS-EROS/repos","events_url":"https://api.github.com/users/USGS-EROS/events{/privacy}","received_events_url":"https://api.github.com/users/USGS-EROS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/USGS-EROS/espa-land-surface-temperature","description":"ESPA modules for determining land surface temperature","fork":false,"url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature","forks_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/forks","keys_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/keys{/key_id}","collaborators_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/teams","hooks_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/hooks","issue_events_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues/events{/number}","events_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/events","assignees_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/assignees{/user}","branches_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/branches{/branch}","tags_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/tags","blobs_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/git/refs{/sha}","trees_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/git/trees{/sha}","statuses_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/statuses/{sha}","languages_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/languages","stargazers_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/stargazers","contributors_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/contributors","subscribers_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/subscribers","subscription_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/subscription","commits_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/commits{/sha}","git_commits_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/git/commits{/sha}","comments_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/comments{/number}","issue_comment_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues/comments{/number}","contents_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/contents/{+path}","compare_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/compare/{base}...{head}","merges_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/merges","archive_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/downloads","issues_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues{/number}","pulls_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls{/number}","milestones_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/milestones{/number}","notifications_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/labels{/name}","releases_url":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/releases{/id}","created_at":"2015-06-01T16:40:39Z","updated_at":"2015-09-02T18:42:41Z","pushed_at":"2015-09-16T20:21:02Z","git_url":"git://github.com/USGS-EROS/espa-land-surface-temperature.git","ssh_url":"git@github.com:USGS-EROS/espa-land-surface-temperature.git","clone_url":"https://github.com/USGS-EROS/espa-land-surface-temperature.git","svn_url":"https://github.com/USGS-EROS/espa-land-surface-temperature","homepage":null,"size":13622,"stargazers_count":3,"watchers_count":3,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3"},"html":{"href":"https://github.com/USGS-EROS/espa-land-surface-temperature/pull/3"},"issue":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues/3"},"comments":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/USGS-EROS/espa-land-surface-temperature/statuses/e5dfd6c1c448493b8fbbd4fd7fbe3830722f5e85"}}}}