import os
from datetime import *

class FilesFilter():
    """
    filter to get file list in a folder, which file modification time between[start_date,end_date]
    """
    @staticmethod
    def get_files_list(path_to_folder,start_date=None,end_date=None):
        file_list = []
        if start_date and end_date:
            if isinstance(start_date,date) and isinstance(end_date,date):
                folder_file_list = os.listdir(path_to_folder)
                for f in folder_file_list:
                    #print os.path.getmtime(f)
                    file_mtime = date.fromtimestamp(os.path.getmtime(f))
                    if start_date <= file_mtime <= end_date:
                        file_list.append(os.path.join(path_to_folder,f))
            else:
                print 'start or end datetime format error!'
        else:
            folder_file_list = os.listdir(path_to_folder)
            for f in folder_file_list:
                file_list.append(os.path.join(path_to_folder,f))
        return file_list


    @staticmethod
    def get_files_after_a_modified_timestamp(path_to_folder,modified_timestamp=None,startswith=r''):
        if (not isinstance(modified_timestamp,datetime)) or (not modified_timestamp):
            print 'parameter modified_timestamp error!'
            print modified_timestamp

        file_list = []
        folder_file_list = os.listdir(path_to_folder)
        filted_file_list = []

        for item in folder_file_list:
            if item.startswith(startswith):
                filted_file_list.append(os.path.join(path_to_folder,item))

        for f in filted_file_list:
            if (not modified_timestamp) or (modified_timestamp < datetime.fromtimestamp(os.path.getmtime(f))):
                file_list.append(f)

        return file_list

    @staticmethod
    def get_latest_modified_timestamp(path_to_folder,startswith=r''):
        latest_modified_timestamp = 0

        folder_file_list = os.listdir(path_to_folder)
        filted_file_list = []

        for item in folder_file_list:
            if item.startswith(startswith):
                filted_file_list.append(os.path.join(path_to_folder,item))

        for f in filted_file_list:
            if os.path.getmtime(f) > latest_modified_timestamp:
                latest_modified_timestamp = os.path.getmtime(f)
                #print latest_modified_timestamp

        return datetime.fromtimestamp(latest_modified_timestamp)


def test():

    #files_filter = FilesFilter()

    start = '2016-05-19'
    end = '2016-05-21'
    start_date = datetime.strptime(start,'%Y-%m-%d').date()
    end_date = datetime.strptime(end,'%Y-%m-%d').date()

    #print end_date < start_date

    print FilesFilter.get_files_list('.',start_date,end_date)

    lis_in_log_folder = r'D:\01_Automation\23_Experiential_Conclusions_2016\19_Anhui_Provicial_Hospital\Log\trl\LIS_Translator_in'
    lis_in_log_file_list = FilesFilter.get_files_list(lis_in_log_folder)

    print lis_in_log_file_list


    '''
    # datetime and string conversion...
    start = '2016-05-20'
    end = '2016-05-21'

    start_date = datetime.strptime(start,'%Y-%m-%d').date()
    end_date = datetime.strptime(end,'%Y-%m-%d').date()

    print start_date,end_date
    '''

def test2():
    directory = r"F:\Zhongshan\log_aptio_20161110\Log"
    modified_timestamp = 1479292284.55

    files_arrays = FilesFilter.get_files_after_a_modified_timestamp(directory,modified_timestamp,'CONTROL')
    print files_arrays

def test3():
    directory = r"F:\Zhongshan\log_aptio_20161110\Log"
    print 'latest file timestamp:', FilesFilter.get_latest_modified_timestamp(directory,'CONTROL')
    print 'mtime for control.txt', os.path.getmtime(r'F:\Zhongshan\log_aptio_20161110\Log\control.txt')


if __name__ == '__main__':
    test2()
    test3()
    #print os.listdir(r'D:\01_Automation\23_Experiential_Conclusions_2016\19_Anhui_Provicial_Hospital\Log\trl')

