1# Licensed to the Software Freedom Conservancy (SFC) under one 2# or more contributor license agreements. See the NOTICE file 3# distributed with this work for additional information 4# regarding copyright ownership. The SFC licenses this file 5# to you under the Apache License, Version 2.0 (the 6# "License"); you may not use this file except in compliance 7# with the License. You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, 12# software distributed under the License is distributed on an 13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14# KIND, either express or implied. See the License for the 15# specific language governing permissions and limitations 16# under the License. 17 18import abc 19import os 20from selenium.webdriver.common.utils import keys_to_typing 21 22 23class FileDetector(object): 24 """ 25 Used for identifying whether a sequence of chars represents the path to a 26 file. 27 """ 28 __metaclass__ = abc.ABCMeta 29 30 @abc.abstractmethod 31 def is_local_file(self, *keys): 32 return 33 34 35class UselessFileDetector(FileDetector): 36 """ 37 A file detector that never finds anything. 38 """ 39 def is_local_file(self, *keys): 40 return None 41 42 43class LocalFileDetector(FileDetector): 44 """ 45 Detects files on the local disk. 46 """ 47 def is_local_file(self, *keys): 48 file_path = ''.join(keys_to_typing(keys)) 49 50 if not file_path: 51 return None 52 53 try: 54 if os.path.isfile(file_path): 55 return file_path 56 except Exception: 57 pass 58 return None 59