code: def fetch_file(uri, file=None, username=None, password=None):
      
      boto.log.info('Fetching %s' % uri)
      if file == None:
          file = tempfile.NamedTemporaryFile()
      try:
          if uri.startswith('s3://'):
              bucket_name, key_name = uri[len('s3://'):].split('/', 1)
              c = boto.connect_s3(aws_access_key_id=username, aws_secret_access_key=password)
              bucket = c.get_bucket(bucket_name)
              key = bucket.get_key(key_name)
              key.get_contents_to_file(file)
          else:
              if username and password:
                  passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
                  passman.add_password(None, uri, username, password)
                  authhandler = urllib2.HTTPBasicAuthHandler(passman)
                  opener = urllib2.build_opener(authhandler)
                  urllib2.install_opener(opener)
              s = urllib2.urlopen(uri)
              file.write(s.read())
          file.seek(0)
      except:
          raise
          boto.log.exception('Problem Retrieving file: %s' % uri)
          file = None
      return file
docs: Fetch a file based on the URI provided. If you do not pass in a file pointer
      a tempfile.NamedTemporaryFile, or None if the file could not be 
      retrieved is returned.
      The URI can be either an HTTP url, or "s3://bucket_name/key_name"