コード例 #1
0
    def testCreatingFileHandle(self):
        fh1 = file_handle.FromTempFile(self.temp_file_txt)
        self.assertEquals(fh1.extension, '.txt')

        fh2 = file_handle.FromFilePath(self.abs_path_html)
        self.assertEquals(fh2.extension, '.html')
        self.assertNotEquals(fh1.id, fh2.id)
コード例 #2
0
 def _GetTempFileHandle(self, trace_data):
     temp_dir = tempfile.mkdtemp()
     trace_files = []
     counter = 0
     try:
         for trace, part in self._GetTraceParts(trace_data):
             file_path = os.path.join(temp_dir, '%s.trace' % counter)
             self._DumpTraceToFile(trace, file_path)
             logging.info('Trace (%s) of size %d bytes saved.', part,
                          os.path.getsize(file_path))
             trace_files.append(file_path)
             counter += 1
         tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html')
         tf.close()
         if trace_files:
             title = ''
             if self.page:
                 title = self.page.display_name
             cmd = (['python', _TRACE2HTML_PATH] + trace_files +
                    ['--output', tf.name] + ['--title', title])
             subprocess.check_output(cmd)
         else:
             logging.warning('No traces to convert to html.')
         return file_handle.FromTempFile(tf)
     finally:
         shutil.rmtree(temp_dir)
コード例 #3
0
 def _GetTempFileHandle(self, trace_data):
     temp_dir = tempfile.mkdtemp()
     trace_files = []
     counter = 0
     try:
         trace_size_data = {}
         for traces_list, part in self._GetTraceParts(trace_data):
             for trace in traces_list:
                 if isinstance(trace, trace_data_module.TraceFileHandle):
                     file_path = trace.file_path
                 else:
                     file_path = os.path.join(temp_dir,
                                              '%s.trace' % counter)
                     self._DumpTraceToFile(trace, file_path)
                 trace_size_data.setdefault(part, 0)
                 trace_size_data[part] += os.path.getsize(file_path)
                 trace_files.append(file_path)
                 counter += 1
         logging.info('Trace sizes in bytes: %s', trace_size_data)
         tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html')
         tf.close()
         if trace_files:
             title = ''
             if self.page:
                 title = self.page.display_name
             cmd = (['python', _TRACE2HTML_PATH] + trace_files +
                    ['--output', tf.name] + ['--title', title])
             subprocess.check_output(cmd)
         else:
             logging.warning('No traces to convert to html.')
         return file_handle.FromTempFile(tf)
     finally:
         shutil.rmtree(temp_dir)
コード例 #4
0
 def _GetTempFileHandle(self, trace_data):
     if self.page:
         title = self.page.display_name
     else:
         title = ''
     content = StringIO.StringIO()
     trace2html.WriteHTMLForTraceDataToFile(
         [trace_data.GetEventsFor(trace_data_module.CHROME_TRACE_PART)],
         title, content)
     tf = tempfile.NamedTemporaryFile(delete=False, suffix='.html')
     tf.write(content.getvalue().encode('utf-8'))
     tf.close()
     return file_handle.FromTempFile(tf)
コード例 #5
0
def TryCaptureScreenShot(platform, tab=None, timeout=None):
    """ If the platform or tab supports screenshot, attempt to take a screenshot
  of the current browser.

  Args:
    platform: current platform
    tab: browser tab if available
    timeout: An float denoting the number of seconds to wait for a successful
        screenshot. If set to None, only attempts once.

  Returns:
    file handle of the tempoerary file path for the screenshot if
    present, None otherwise.
  """
    try:
        if platform.CanTakeScreenshot():
            tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
            tf.close()
            try:
                py_utils.WaitFor(lambda: platform.TakeScreenshot(tf.name),
                                 timeout or 0)
            except py_utils.TimeoutException:
                logging.warning('Did not succeed in screenshot capture')
            return file_handle.FromTempFile(tf)
        elif tab and tab.IsAlive() and tab.screenshot_supported:
            tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
            tf.close()
            image = tab.Screenshot()
            image_util.WritePngFile(image, tf.name)
            return file_handle.FromTempFile(tf)
        else:
            logging.warning(
                'Either tab has crashed or browser does not support taking tab '
                'screenshot. Skip taking screenshot on failure.')
            return None
    except Exception as e:  # pylint: disable=broad-except
        logging.warning('Exception when trying to capture screenshot: %s',
                        repr(e))
        return None
コード例 #6
0
 def _TryCaptureScreenShot(self, page, tab, results):
   try:
     # TODO(nednguyen): once all platforms support taking screenshot,
     # remove the tab checking logic and consider moving this to story_runner.
     # (crbug.com/369490)
     if tab.browser.platform.CanTakeScreenshot():
       tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
       tf.close()
       tab.browser.platform.TakeScreenshot(tf.name)
       results.AddProfilingFile(page, file_handle.FromTempFile(tf))
     elif tab.IsAlive() and tab.screenshot_supported:
       tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
       tf.close()
       image = tab.Screenshot()
       image_util.WritePngFile(image, tf.name)
       results.AddProfilingFile(page, file_handle.FromTempFile(tf))
     else:
       logging.warning(
           'Either tab has crashed or browser does not support taking tab '
           'screenshot. Skip taking screenshot on failure.')
   except Exception as e:
     logging.warning('Exception when trying to capture screenshot: %s',
                     repr(e))
コード例 #7
0
    def testUploadScreenshotToCloudStorage(self):
        tf = tempfile.NamedTemporaryFile(suffix='.png', delete=False)
        fh1 = file_handle.FromTempFile(tf)

        local_path = '123456abcdefg.png'

        with mock.patch('catapult_base.cloud_storage.Insert') as mock_insert:
            with mock.patch('telemetry.util.screenshot._GenerateRemotePath',
                            return_value=local_path):

                url = screenshot._UploadScreenShotToCloudStorage(fh1)
                mock_insert.assert_called_with(cloud_storage.TELEMETRY_OUTPUT,
                                               local_path, fh1.GetAbsPath())
                self.assertTrue(url is not None)
コード例 #8
0
ファイル: screenshot.py プロジェクト: gam0za/AlbaAlza
def TryCaptureScreenShot(platform, tab=None):
    """ If the platform or tab supports screenshot, attempt to take a screenshot
  of the current browser.

  Args:
    platform: current platform
    tab: browser tab if available

  Returns:
    file handle of the tempoerary file path for the screenshot if
    present, None otherwise.
  """
    try:
        # TODO(nednguyen): once all platforms support taking screenshot,
        # remove the tab checking logic and consider moving this to story_runner.
        # (crbug.com/369490)
        if platform.CanTakeScreenshot():
            tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
            tf.close()
            platform.TakeScreenshot(tf.name)
            return file_handle.FromTempFile(tf)
        elif tab and tab.IsAlive() and tab.screenshot_supported:
            tf = tempfile.NamedTemporaryFile(delete=False, suffix='.png')
            tf.close()
            image = tab.Screenshot()
            image_util.WritePngFile(image, tf.name)
            return file_handle.FromTempFile(tf)
        else:
            logging.warning(
                'Either tab has crashed or browser does not support taking tab '
                'screenshot. Skip taking screenshot on failure.')
            return None
    except Exception as e:
        logging.warning('Exception when trying to capture screenshot: %s',
                        repr(e))
        return None