tools/site_compare/site_compare.py
def Compare(base, compare, ops, root_path=None, out_path=None):
  """Compares a series of scrapes using a series of operators.

  Args:
    base: (browser, version) tuple of version to consider the baseline
    compare: (browser, version) tuple of version to compare to
    ops: list of operators plus operator arguments
    root_path: root of the scrapes
    out_path: place to put any output from the operators

  Returns:
    None

  @TODO(jhaas): this method will likely change, to provide a robust and
  well-defined way of chaining operators, applying operators conditionally,
  and full-featured scripting of the operator chain. There also needs
  to be better definition of the output; right now it's to stdout and
  a log.txt file, with operator-dependent images saved for error output
  """
  if root_path is None:
    # default save path is "scrapes" off the current root
    root_path = os.path.join(os.path.split(__file__)[0], "Scrapes")

  if out_path is None:
    out_path = os.path.join(os.path.split(__file__)[0], "Compares")

  if type(base) in types.StringTypes: base = (base, None)
  if type(compare) in types.StringTypes: compare = (compare, None)
  if type(ops) in types.StringTypes: ops = [ops]

  base_dir = os.path.join(root_path, base[0])
  compare_dir = os.path.join(root_path, compare[0])

  if base[1] is None:
    # base defaults to earliest capture
    base = (base[0], max(os.listdir(base_dir)))

  if compare[1] is None:
    # compare defaults to latest capture
    compare = (compare[0], min(os.listdir(compare_dir)))

  out_path = os.path.join(out_path, base[0], base[1], compare[0], compare[1])
  drivers.windowing.PreparePath(out_path)

  # TODO(jhaas): right now we're just dumping output to a log file
  # (and the console), which works as far as it goes but isn't nearly
  # robust enough. Change this after deciding exactly what we want to
  # change it to.
  out_file = open(os.path.join(out_path, "log.txt"), "w")
  description_string = ("Comparing %s %s to %s %s" %
                        (base[0], base[1], compare[0], compare[1]))
  out_file.write(description_string)
  print(description_string)

  base_dir = os.path.join(base_dir, base[1])
  compare_dir = os.path.join(compare_dir, compare[1])

  for filename in os.listdir(base_dir):
    out_file.write("%s: " % filename)

    if not os.path.isfile(os.path.join(compare_dir, filename)):
      out_file.write("Does not exist in target directory\n")
      print("File %s does not exist in target directory" % filename)
      continue

    base_filename = os.path.join(base_dir, filename)
    compare_filename = os.path.join(compare_dir, filename)

    for op in ops:
      if type(op) in types.StringTypes: op = (op, None)

      module = operators.GetOperator(op[0])

      ret = module.Compare(base_filename, compare_filename)
      if ret is None:
        print("%s: OK" % (filename,))
        out_file.write("OK\n")
      else:
        print("%s: %s" % (filename, ret[0]))
        out_file.write("%s\n" % (ret[0]))
        ret[1].save(os.path.join(out_path, filename))

  out_file.close()
Compares a series of scrapes using a series of operators.

  Args:
    base: (browser, version) tuple of version to consider the baseline
    compare: (browser, version) tuple of version to compare to
    ops: list of operators plus operator arguments
    root_path: root of the scrapes
    out_path: place to put any output from the operators

  Returns:
    None

  @TODO(jhaas): this method will likely change, to provide a robust and
  well-defined way of chaining operators, applying operators conditionally,
  and full-featured scripting of the operator chain. There also needs
  to be better definition of the output; right now it's to stdout and
  a log.txt file, with operator-dependent images saved for error output
  
Compares a series of scrapes using a series of operators.
Compares a series of scrapes using a series of operators .
def Compare(base, compare, ops, root_path=None, out_path=None):
  if root_path is None:
    root_path = os.path.join(os.path.split(__file__)[0], "Scrapes")
  if out_path is None:
    out_path = os.path.join(os.path.split(__file__)[0], "Compares")
  if type(base) in types.StringTypes: base = (base, None)
  if type(compare) in types.StringTypes: compare = (compare, None)
  if type(ops) in types.StringTypes: ops = [ops]
  base_dir = os.path.join(root_path, base[0])
  compare_dir = os.path.join(root_path, compare[0])
  if base[1] is None:
    base = (base[0], max(os.listdir(base_dir)))
  if compare[1] is None:
    compare = (compare[0], min(os.listdir(compare_dir)))
  out_path = os.path.join(out_path, base[0], base[1], compare[0], compare[1])
  drivers.windowing.PreparePath(out_path)
  out_file = open(os.path.join(out_path, "log.txt"), "w")
  description_string = ("Comparing %s %s to %s %s" %
                        (base[0], base[1], compare[0], compare[1]))
  out_file.write(description_string)
  print(description_string)
  base_dir = os.path.join(base_dir, base[1])
  compare_dir = os.path.join(compare_dir, compare[1])
  for filename in os.listdir(base_dir):
    out_file.write("%s: " % filename)
    if not os.path.isfile(os.path.join(compare_dir, filename)):
      out_file.write("Does not exist in target directory\n")
      print("File %s does not exist in target directory" % filename)
      continue
    base_filename = os.path.join(base_dir, filename)
    compare_filename = os.path.join(compare_dir, filename)
    for op in ops:
      if type(op) in types.StringTypes: op = (op, None)
      module = operators.GetOperator(op[0])
      ret = module.Compare(base_filename, compare_filename)
      if ret is None:
        print("%s: OK" % (filename,))
        out_file.write("OK\n")
      else:
        print("%s: %s" % (filename, ret[0]))
        out_file.write("%s\n" % (ret[0]))
        ret[1].save(os.path.join(out_path, filename))
  out_file.close()
def Compare ( base , compare , ops , root_path = None , out_path = None ) : if root_path is None : root_path = os . path . join ( os . path . split ( __file__ ) [ 0 ] , "Scrapes" ) if out_path is None : out_path = os . path . join ( os . path . split ( __file__ ) [ 0 ] , "Compares" ) if type ( base ) in types . StringTypes : base = ( base , None ) if type ( compare ) in types . StringTypes : compare = ( compare , None ) if type ( ops ) in types . StringTypes : ops = [ ops ] base_dir = os . path . join ( root_path , base [ 0 ] ) compare_dir = os . path . join ( root_path , compare [ 0 ] ) if base [ 1 ] is None : base = ( base [ 0 ] , max ( os . listdir ( base_dir ) ) ) if compare [ 1 ] is None : compare = ( compare [ 0 ] , min ( os . listdir ( compare_dir ) ) ) out_path = os . path . join ( out_path , base [ 0 ] , base [ 1 ] , compare [ 0 ] , compare [ 1 ] ) drivers . windowing . PreparePath ( out_path ) out_file = open ( os . path . join ( out_path , "log.txt" ) , "w" ) description_string = ( "Comparing %s %s to %s %s" % ( base [ 0 ] , base [ 1 ] , compare [ 0 ] , compare [ 1 ] ) ) out_file . write ( description_string ) print ( description_string ) base_dir = os . path . join ( base_dir , base [ 1 ] ) compare_dir = os . path . join ( compare_dir , compare [ 1 ] ) for filename in os . listdir ( base_dir ) : out_file . write ( "%s: " % filename ) if not os . path . isfile ( os . path . join ( compare_dir , filename ) ) : out_file . write ( "Does not exist in target directory\n" ) print ( "File %s does not exist in target directory" % filename ) continue base_filename = os . path . join ( base_dir , filename ) compare_filename = os . path . join ( compare_dir , filename ) for op in ops : if type ( op ) in types . StringTypes : op = ( op , None ) module = operators . GetOperator ( op [ 0 ] ) ret = module . Compare ( base_filename , compare_filename ) if ret is None : print ( "%s: OK" % ( filename , ) ) out_file . write ( "OK\n" ) else : print ( "%s: %s" % ( filename , ret [ 0 ] ) ) out_file . write ( "%s\n" % ( ret [ 0 ] ) ) ret [ 1 ] . save ( os . path . join ( out_path , filename ) ) out_file . close ( )
Compares a series of scrapes using a series of operators.
Compares a series of scrapes using a series of operators .
"""Compares a series of scrapes using a series of operators.

  Args:
    base: (browser, version) tuple of version to consider the baseline
    compare: (browser, version) tuple of version to compare to
    ops: list of operators plus operator arguments
    root_path: root of the scrapes
    out_path: place to put any output from the operators

  Returns:
    None

  @TODO(jhaas): this method will likely change, to provide a robust and
  well-defined way of chaining operators, applying operators conditionally,
  and full-featured scripting of the operator chain. There also needs
  to be better definition of the output; right now it's to stdout and
  a log.txt file, with operator-dependent images saved for error output
  """ # default save path is "scrapes" off the current root # base defaults to earliest capture # compare defaults to latest capture # TODO(jhaas): right now we're just dumping output to a log file # (and the console), which works as far as it goes but isn't nearly # robust enough. Change this after deciding exactly what we want to # change it to.
None
base
(browser, version) tuple of version to consider the baseline
( browser version ) tuple of version to consider the baseline
compare
(browser, version) tuple of version to compare to
( browser version ) tuple of version to compare to
ops
list of operators plus operator arguments
list of operators plus operator arguments
root_path
root of the scrapes
root of the scrapes
out_path
place to put any output from the operators
place to put any output from the operators