def test_generate_webdata(paths, overwrite_default, results): """ Testing auto-Generation and auto-validation of WebGear data files """ try: output = generate_webdata(paths, overwrite_default=overwrite_default, logging=True) assert bool(output) == results except Exception as e: if isinstance(e, requests.exceptions.Timeout): logger.exceptions(str(e)) else: pytest.fail(str(e))
def __init__(self, enablePiCamera=False, stabilize=False, source=0, camera_num=0, y_tube=False, backend=0, colorspace=None, resolution=(640, 480), framerate=25, logging=False, time_delay=0, database=None, **options): # initialize global params self.__jpeg_quality = 90 # 90% quality self.__jpeg_optimize = 0 # optimization off self.__jpeg_progressive = 0 # jpeg will be baseline instead self.__frame_size_reduction = 20 # 20% reduction self.__logging = logging self.__database = database custom_data_location = "" # path to save data-files to custom location data_path = "" # path to WebGear data-files overwrite_default = False # reformat dictionary options = {str(k).strip(): v for k, v in options.items()} # assign values to global variables if specified and valid if options: if "frame_size_reduction" in options: value = options["frame_size_reduction"] if isinstance(value, (int, float)) and value >= 0 and value <= 90: self.__frame_size_reduction = value else: logger.warning( "Skipped invalid `frame_size_reduction` value!") del options["frame_size_reduction"] # clean if "frame_jpeg_quality" in options: value = options["frame_jpeg_quality"] if isinstance(value, (int, float)) and value >= 10 and value <= 95: self.__jpeg_quality = int(value) else: logger.warning( "Skipped invalid `frame_jpeg_quality` value!") del options["frame_jpeg_quality"] # clean if "frame_jpeg_optimize" in options: value = options["frame_jpeg_optimize"] if isinstance(value, bool): self.__jpeg_optimize = int(value) else: logger.warning( "Skipped invalid `frame_jpeg_optimize` value!") del options["frame_jpeg_optimize"] # clean if "frame_jpeg_progressive" in options: value = options["frame_jpeg_progressive"] if isinstance(value, bool): self.__jpeg_progressive = int(value) else: logger.warning( "Skipped invalid `frame_jpeg_progressive` value!") del options["frame_jpeg_progressive"] # clean if "custom_data_location" in options: value = options["custom_data_location"] if isinstance(value, str): assert os.access( value, os.W_OK ), "[WebGear:ERROR] :: Permission Denied!, cannot write WebGear data-files to '{}' directory!".format( value) assert os.path.isdir( os.path.abspath(value) ), "[WebGear:ERROR] :: `custom_data_location` value must be the path to a directory and not to a file!" custom_data_location = os.path.abspath(value) else: logger.warning( "Skipped invalid `custom_data_location` value!") del options["custom_data_location"] # clean if "overwrite_default_files" in options: value = options["overwrite_default_files"] if isinstance(value, bool): overwrite_default = value else: logger.warning( "Skipped invalid `overwrite_default_files` value!") del options["overwrite_default_files"] # clean self.stream = None # # define stream with necessary params # self.stream = VideoGear( # enablePiCamera=enablePiCamera, # stabilize=stabilize, # source=source, # camera_num=camera_num, # y_tube=y_tube, # backend=backend, # colorspace=colorspace, # resolution=resolution, # framerate=framerate, # logging=logging, # time_delay=time_delay, # **options # ) # check if custom certificates path is specified if custom_data_location: data_path = generate_webdata( custom_data_location, overwrite_default=overwrite_default, logging=logging, ) else: # otherwise generate suitable path from os.path import expanduser data_path = generate_webdata( os.path.join(expanduser("~"), ".vidgear"), overwrite_default=overwrite_default, logging=logging, ) # log it if self.__logging: logger.debug( "`{}` is the default location for saving WebGear data-files.". format(data_path)) if self.__logging: logger.debug( "Setting params:: Size Reduction:{}%, JPEG quality:{}%, JPEG optimizations:{}, JPEG progressive:{}" .format( self.__frame_size_reduction, self.__jpeg_quality, bool(self.__jpeg_optimize), bool(self.__jpeg_progressive), )) # define Jinja2 templates handler self.__templates = Jinja2Templates( directory="{}/templates".format(data_path)) # define custom exception handlers self.__exception_handlers = { 404: self.__not_found, 500: self.__server_error } # define routing tables self.routes = [ Route("/", endpoint=self.__homepage), Route("/video", endpoint=self.__video), Mount( "/static", app=StaticFiles(directory="{}/static".format(data_path)), name="static", ), ] # copying original routing tables for further validation self.__rt_org_copy = self.routes[:] # keeps check if producer loop should be running self.__isrunning = True