HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
ftest_UrlNormalization.py
Go to the documentation of this file.
1 #!/usr/bin/python
2 # coding: utf-8
3 """
4 HCE project, Python bindings, Crawler application.
5 Url normalization tests.
6 
7 @package: dc
8 @file ftest_UrlNormalization.py
9 @author Alexander Vybornyh <alexander.hce.cluster@gmail.com>
10 @link: http://hierarchical-cluster-engine.com/
11 @copyright: Copyright &copy; 2017 IOIX Ukraine
12 @license: http://hierarchical-cluster-engine.com/license/
13 @since: 0.1
14 """
15 
16 import os
17 import sys
18 import argparse
19 import logging
20 
21 import ppath
22 from ppath import sys
23 
24 # from app.Utils import urlNormalization
25 import app.Utils as Utils
26 
27 
28 class bcolors:
29  HEADER = '\033[95m'
30  OKBLUE = '\033[94m'
31  OKGREEN = '\033[92m'
32  WARNING = '\033[93m'
33  FAIL = '\033[91m'
34  ENDC = '\033[0m'
35  BOLD = '\033[1m'
36  UNDERLINE = '\033[4m'
37 
38 
39 def printMessage(msg, color, newLine=True):
40  sys.stdout.write(color + str(msg) + bcolors.ENDC + ('\n' if newLine else ''))
41 
42 
43 def getLogger():
44  # create logger
45  logger = logging.getLogger('hce')
46  logger.setLevel(logging.DEBUG)
47 
48  # create console handler and set level to debug
49  ch = logging.StreamHandler()
50  ch.setLevel(logging.DEBUG)
51 
52  # create formatter
53  formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
54 
55  # add formatter to ch
56  ch.setFormatter(formatter)
57 
58  # add ch to logger
59  logger.addHandler(ch)
60 
61  return logger
62 
63 
64 class OutputFile(object):
65  def __init__(self, fileName):
66  self.fp = None
67  try:
68  self.fp = open(fileName, 'w')
69  except Exception:
70  pass
71 
72 
73  def __exit__(self):
74  print '__exit__()'
75 
76 
77  def write(self, msg):
78  if self.fp is not None:
79  self.fp.write(msg)
80 
81 
82 def executeTest(base, url, res, log=None):
83 # print base, ' ', url, ' ', res
84  result = Utils.urlNormalization(base, url, log=log)
85  if result != res:
86  printMessage("Wrong result: %s\nexpected: %s\n(base: %s, url: %s)" % (result, res, base, url), bcolors.FAIL)
87  else:
88  printMessage("Success", bcolors.OKGREEN, False)
89  printMessage(' : %s' % url, bcolors.HEADER)
90 
91  return result == res
92 
93 
95  pr = argparse.ArgumentParser()
96  pr.add_argument('-i', '--inputFile')
97  pr.add_argument('-o', '--outputFile')
98 
99  return pr
100 
101 
102 if __name__ == "__main__":
103  try:
104  logger = None # getLogger()
105 
106  parser = createParser()
107  namespace = parser.parse_args(sys.argv[1:])
108 
109  if namespace.inputFile is None:
110  raise Exception("Not set input file name")
111 
112  ofile = OutputFile(namespace.outputFile)
113 
114  with open(namespace.inputFile, 'r') as f:
115  lines = f.readlines()
116 
117  base = None
118  url = None
119  res = None
120  for line in lines:
121  parts = line.split()
122  if len(parts) == 1:
123  base = parts[0]
124  elif len(parts) == 2:
125  url, res = parts
126  if executeTest(base, url, res, logger):
127  ofile.write('Success: %s\n' % url)
128  else:
129  ofile.write('Fail: %s\n' % url)
130 
131  except Exception, err:
132  sys.stderr.write(str(err) + '\n')
def executeTest(base, url, res, log=None)
def printMessage(msg, color, newLine=True)