You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.6 KiB
Python

import os
import optparse
from lib import miscutils, fsutils
sources = {}
def optparse_init() -> tuple:
parser = optparse.OptionParser()
parser.add_option('-f', '--file', type='string', dest='s_file', help='Searching lines in the given file.')
parser.add_option('-d', '--directory', type='string', dest='s_dir', help='Searching files in a directory.')
parser.add_option('-q', '--query', type='string', dest='query', help='The search term. Supporting "".')
parser.add_option('-l', '--loop', action='store_true', default=False, dest='loop', help="""Runs the program in
an endless loop.""")
return parser.parse_args()
def read_file_source(fname):
finfo = fsutils.FileInfo(fname)
if finfo.exist:
with finfo.open('r') as f:
return list(f.readlines())
def read_directory_source(dirname):
""" Reading the contents of the directory """
dinfo = fsutils.DirInfo(dirname)
if dinfo.exist:
return dinfo.get_full_content()
def main():
options, args = optparse_init()
engines = []
if options.s_file:
e_file = miscutils.SearchEngine(read_file_source(options.s_file))
engines.append(e_file)
if options.s_dir:
e_dir = miscutils.SearchEngine(read_directory_source(options.s_dir))
engines.append(e_dir)
while True:
if options.query and not options.loop:
query = options.query
else:
query = input('Search: ')
for engine in engines:
for res in engine.search(query):
print(res)
if not options.loop:
break
if __name__ == '__main__':
main()