コード例 #1
0
    def __init__(self, args):
        self.fs = FileSystem()
        get_logger('app', 'logs/app.log', level=logging.DEBUG)

        self.storage_dir = args.storage_option

        logging.getLogger('app').debug('App started')

        self.fs.apply_callback_to_file_iterator(self.storage_dir, self.indexer)

        logging.getLogger('app').debug('App stoped normaly')
コード例 #2
0
ファイル: photoIndexer.py プロジェクト: dypa/photoSortPy
class PhotoIndexer:
    def __init__(self, args):
        self.fs = FileSystem()
        get_logger('app', 'logs/app.log', level=logging.DEBUG)

        self.storage_dir = args.storage_option

        logging.getLogger('app').debug('App started')

        self.fs.apply_callback_to_file_iterator(self.storage_dir, self.indexer)

        logging.getLogger('app').debug('App stoped normaly')

    def indexer(self, filename):
        self.fs.check_md5(filename)
コード例 #3
0
    def __init__(self, myPortNumber, orangeIP, orangePortNumber):
        '''
		Constructor de objetos de clase GreenNode.
		Recibe como parametros el numero de puerto del nodo por construir,
		y la IP y puerto del nodo naranja que usa para conectarse.
		Incluye la etapa de inicialización del nodo verde.
		'''
        # Inicializar servicios basicos
        self.myPort = myPortNumber
        self.myID = -1

        self.orangeIP = orangeIP
        self.orangePort = orangePortNumber

        self.tcpl = TCPL()

        self.tcpl.startService(self.myPort)
        self.processSystem = ProcessSystem(self.myPort, True)

        # Diccionario con GreenNodeToken
        self.neighboursTable = dict()
        # Registros en tabla: nodoDestino [0] | distancia [1] | vecino [2]
        self.routingTable = dict()

        self.fileSystem = FileSystem(self.myPort)

        self.assemblePackage = AssemblePackageFactory()
コード例 #4
0
ファイル: photoSorter.py プロジェクト: dypa/photoSortPy
    def __init__(self, args):
        self.fs = FileSystem()
        get_logger('app', 'logs/app.log', level=logging.DEBUG)

        get_logger('images', 'logs/images.log')
        get_logger('videos', 'logs/videos.log')
        get_logger('other', 'logs/other.log')

        self.scan_dir = args.scan_option
        self.storage_dir = args.storage_option

        logging.getLogger('app').debug('App started')

        self.fs.apply_callback_to_file_iterator(self.scan_dir, self.sorter)

        logging.getLogger('app').debug('App stoped normaly')
コード例 #5
0
ファイル: photoSorter.py プロジェクト: dypa/photoSortPy
    def __init__(self, args):
        self.fs = FileSystem()
        get_logger('app', 'logs/app.log', level=logging.DEBUG)

        get_logger('images', 'logs/images.log')
        get_logger('videos', 'logs/videos.log')
        get_logger('other', 'logs/other.log')

        self.scan_dir = args.scan_option
        self.storage_dir = args.storage_option

        logging.getLogger('app').debug('App started')

        self.fs.apply_callback_to_file_iterator(self.scan_dir, self.sorter)

        logging.getLogger('app').debug('App stoped normaly')
コード例 #6
0
ファイル: photoSorter.py プロジェクト: dypa/photoSortPy
class PhotoSorter:
    FILE_FORMAT = '%H-%M-%S_%Y-%m-%d'
    DIR_FORMAT = '/%Y/%m-%Y/%d-%m-%Y'

    VIDEO_EXTENSIONS = [
        '.avi',
        '.thm',
        '.mp4',
        '.mov',
        '.3gp',
        '.mpg',
    ]

    def __init__(self, args):
        self.fs = FileSystem()
        get_logger('app', 'logs/app.log', level=logging.DEBUG)

        get_logger('images', 'logs/images.log')
        get_logger('videos', 'logs/videos.log')
        get_logger('other', 'logs/other.log')

        self.scan_dir = args.scan_option
        self.storage_dir = args.storage_option

        logging.getLogger('app').debug('App started')

        self.fs.apply_callback_to_file_iterator(self.scan_dir, self.sorter)

        logging.getLogger('app').debug('App stoped normaly')

    def read_image_date(self, image_type, filename):
        if image_type in ('gif', 'png'):
            date_time = self.read_file_date(filename)
        elif image_type == 'jpeg':
            date_time = self.read_exif_date(filename)
        else:
            raise PhotoSorterException('Unknown image type')
        return date_time

    def read_file_date(self, filename):
        return datetime.fromtimestamp(self.fs.get_mktime(filename))

    def read_exif_date(self, filename):
        file = open(filename, 'rb')
        r = re.compile(b'\d{4}[:]\d{2}[:]\d{2}\s\d{2}[:]\d{2}[:]\d{2}', re.M)
        matches = r.search(file.read())
        if matches is None:
            datetime_original = self.read_file_date(filename)
        else:
            datetime_original = datetime.strptime(matches.group(0).decode("utf-8"), '%Y:%m:%d %H:%M:%S')
        return datetime_original

    def progress_image(self, filename, date_time, image_type):
        dirname = self.storage_dir + date_time.strftime(self.DIR_FORMAT)
        self.fs.ensure_dir_exists(dirname)
        md5 = self.fs.md5_file(filename)
        newfilename = dirname + '/' + date_time.strftime(self.FILE_FORMAT) + '.' + md5 + '.' + (
            'jpg' if image_type == 'jpeg' else image_type).upper()
        if not self.fs.isfile(newfilename):
            self.fs.copy(filename, newfilename)
            logging.getLogger('images').info(md5 + ' ' + filename + ' => ' + newfilename)
        else:
            logging.getLogger('app').debug('Skip: ' + filename)
        return

    def sorter(self, filename):
        image_type = imghdr.what(filename)
        if image_type:
            self.progress_image(filename, self.read_image_date(image_type, filename), image_type)
        elif self.fs.splitext(filename)[-1].lower() in self.VIDEO_EXTENSIONS:
            logging.getLogger('videos').info(self.read_file_date(filename).strftime(self.FILE_FORMAT) + ' ' + filename)
        else:
            logging.getLogger('other').info(filename)
コード例 #7
0
ファイル: photoSorter.py プロジェクト: dypa/photoSortPy
class PhotoSorter:
    FILE_FORMAT = '%H-%M-%S_%Y-%m-%d'
    DIR_FORMAT = '/%Y/%m-%Y/%d-%m-%Y'

    VIDEO_EXTENSIONS = [
        '.avi',
        '.thm',
        '.mp4',
        '.mov',
        '.3gp',
        '.mpg',
    ]

    def __init__(self, args):
        self.fs = FileSystem()
        get_logger('app', 'logs/app.log', level=logging.DEBUG)

        get_logger('images', 'logs/images.log')
        get_logger('videos', 'logs/videos.log')
        get_logger('other', 'logs/other.log')

        self.scan_dir = args.scan_option
        self.storage_dir = args.storage_option

        logging.getLogger('app').debug('App started')

        self.fs.apply_callback_to_file_iterator(self.scan_dir, self.sorter)

        logging.getLogger('app').debug('App stoped normaly')

    def read_image_date(self, image_type, filename):
        if image_type in ('gif', 'png'):
            date_time = self.read_file_date(filename)
        elif image_type == 'jpeg':
            date_time = self.read_exif_date(filename)
        else:
            raise PhotoSorterException('Unknown image type')
        return date_time

    def read_file_date(self, filename):
        return datetime.fromtimestamp(self.fs.get_mktime(filename))

    def read_exif_date(self, filename):
        file = open(filename, 'rb')
        r = re.compile(b'\d{4}[:]\d{2}[:]\d{2}\s\d{2}[:]\d{2}[:]\d{2}', re.M)
        matches = r.search(file.read())
        if matches is None:
            datetime_original = self.read_file_date(filename)
        else:
            datetime_original = datetime.strptime(
                matches.group(0).decode("utf-8"), '%Y:%m:%d %H:%M:%S')
        return datetime_original

    def progress_image(self, filename, date_time, image_type):
        dirname = self.storage_dir + date_time.strftime(self.DIR_FORMAT)
        self.fs.ensure_dir_exists(dirname)
        md5 = self.fs.md5_file(filename)
        newfilename = dirname + '/' + date_time.strftime(
            self.FILE_FORMAT) + '.' + md5 + '.' + (
                'jpg' if image_type == 'jpeg' else image_type).upper()
        if not self.fs.isfile(newfilename):
            self.fs.copy(filename, newfilename)
            logging.getLogger('images').info(md5 + ' ' + filename + ' => ' +
                                             newfilename)
        else:
            logging.getLogger('app').debug('Skip: ' + filename)
        return

    def sorter(self, filename):
        image_type = imghdr.what(filename)
        if image_type:
            self.progress_image(filename,
                                self.read_image_date(image_type, filename),
                                image_type)
        elif self.fs.splitext(filename)[-1].lower() in self.VIDEO_EXTENSIONS:
            logging.getLogger('videos').info(
                self.read_file_date(filename).strftime(self.FILE_FORMAT) +
                ' ' + filename)
        else:
            logging.getLogger('other').info(filename)
コード例 #8
0
def testFileSystem():
    fs1 = FileSystem(11)
    fs2 = FileSystem(13)

    fileA = [bytearray("Hola, mundo. ", 'utf-8'), bytearray("Soy una prueba. ", 'utf-8'), bytearray("Adiós, mundo.", 'utf-8')]
    fileB = bytearray("Sabías que a los dioses de la muerte les gustan las manzanas?", 'utf-8')
    fileC = bytearray("Tendría que analizarlo", 'utf-8')
    fileD = [bytearray(3), bytearray(2), bytearray(1)]


    fs1.storeFile("B", fileB)
    fs1.storeFile("C", fileC)
    i = 0
    for fragment in fileA:
        fs1.storeFragment("A", i, fragment)
        i += 1
    i = 0
    for fragment in fileD:
        fs1.storeFragment("D", i, fragment)
        i += 1

    fs2.storeFile("B", fileB)
    i = 0
    for fragment in fileA:
        fs2.storeFragment("A", i, fragment)
        i += 1

    assert fs1.findFile("A") == False, "A must not be found in filesystem 1."
    assert fs1.findFragment("A") == True, "A's pieces must be found in filesystem 1."
    assert fs1.findFile("B") == True, "B must be found in filesystem 1."
    assert fs1.findFragment("B") == False, "B's pieces must not be found in filesystem 1."
    assert fs1.findFile("C") == True, "C must be found in filesystem 1."
    assert fs1.findFragment("C") == False, "C's pieces must not be found in filesystem 1."
    assert fs1.findFile("D") == False, "D must not be found in filesystem 1."
    assert fs1.findFragment("D") == True, "D's pieces must be found in filesystem 1."

    assert fs2.findFragment("A") == True, "A's pieces must be found in filesystem 2."
    assert fs2.findFile("B") == True, "B must be found in filesystem 2."
    assert fs2.findFile("C") == False, "C must not be found in filesystem 2."
    assert fs2.findFragment("D") == False, "D's pieces must not be found in filesystem 2."


    aRecoveredFrom2 = fs2.loadFragments("A")
    bRecoveredFrom2 = fs2.loadFile("B")

    fs2.deleteFragment("A")
    fs2.deleteFile("B")
    
    assert fs2.findFragment("A") == False, "A's pieces must not be found in filesystem 2."
    assert fs2.findFile("B") == False, "B must not be found in filesystem 2."

    del fs2


    aRecoveredFrom1 = fs1.loadFragments("A")
    bRecoveredFrom1 = fs1.loadFile("B")
    cRecoveredFrom1 = fs1.loadFile("C")
    dRecoveredFrom1 = fs1.loadFragments("D")

    fs1.deleteFragment("A")
    fs1.deleteFile("B")

    assert fs1.findFragment("A") == False, "A's pieces must not be found in filesystem 1."
    assert fs1.findFile("B") == False, "B must not be found in filesystem 1."
    assert fs1.findFile("C") == True, "C must be found in filesystem 1."
    assert fs1.findFragment("D") == True, "D's pieces must be found in filesystem 1."

    assert len(aRecoveredFrom2) == 3, "Filesystem 2 must have all 3 pieces of A."
    assert aRecoveredFrom2[0] == fileA[0], "First piece of A has changed in filesystem 2."
    assert aRecoveredFrom2[1] == fileA[1], "Second piece of A has changed in filesystem 2."
    assert aRecoveredFrom2[2] == fileA[2], "Third piece of A has changed in filesystem 2."

    assert bRecoveredFrom2 == fileB, "B changed in filesystem 2."



    assert len(aRecoveredFrom1) == 3, "Filesystem 1 must have all 3 pieces of A."
    assert aRecoveredFrom1[0] == fileA[0], "First piece of A has changed in filesystem 1."
    assert aRecoveredFrom1[1] == fileA[1], "Second piece of A has changed in filesystem 1."
    assert aRecoveredFrom1[2] == fileA[2], "Third piece of A has changed in filesystem 1."

    assert bRecoveredFrom1 == fileB, "B changed in filesystem 1."
    assert cRecoveredFrom1 == fileC, "C changed in filesystem 1."

    assert len(dRecoveredFrom1) == 3, "Filesystem 1 must have all 3 pieces of D."
    assert dRecoveredFrom1[0] == fileD[0], "First piece of D has changed in filesystem 1."
    assert dRecoveredFrom1[1] == fileD[1], "Second piece of D has changed in filesystem 1."
    assert dRecoveredFrom1[2] == fileD[2], "Third piece of D has changed in filesystem 1."
コード例 #9
0
def readJobs(disk, cpu):
    jobs = []
    with open(sys.argv[3], "r") as file:
        n_segments = 0
        ios = []

        # Lista de Jobs ordenada pelo tempo de início
        for line in file:
            segment_tree = Tree()
            line = line.split("\n")[0]
            items = line.split(" ")
            n_io = int(items[2])
            n_segments = int(items[5])
            # Organiza segmentos do job
            for i in range(0, n_segments):
                line = next(file)
                line = line.split("\n")[0]
                items_segment = line.split(" ")
                if len(items_segment) == 2:
                    segment_tree.add_node(int(items_segment[0]),
                                          items_segment[1])
                else:
                    segment_tree.add_node(int(items_segment[0]),
                                          items_segment[1],
                                          int(items_segment[2]))
            job = Job(items[0], items[1], None, items[3], items[4],
                      segment_tree)
            # Organiza IOs
            for i in range(0, n_io):
                line = next(file)
                line = line.split("\n")[0]
                items_io = line.split(" ")
                io_name = items_io[0]
                if io_name == DeviceType.Printer:
                    ios.append(
                        Device(
                            DeviceType.Printer,
                            int(
                                random.normal(cpu.TIMESLICE / 2,
                                              cpu.TIMESLICE / 10))))
                elif io_name == DeviceType.Reader:
                    ios.append(
                        Device(
                            DeviceType.Reader,
                            int(
                                random.normal(cpu.TIMESLICE / 2,
                                              cpu.TIMESLICE / 10))))
                elif io_name == DeviceType.Disk:
                    filename = items_io[1]
                    if items_io[2] == "r":
                        read_write = DiskOperation.Read
                    else:
                        read_write = DiskOperation.Write
                    n_opers = int(items_io[3])
                    size = int(items_io[4])
                    is_private = items_io[5]
                    sys_file = FileSystem(filename, job, size, is_private)
                    time = int(
                        random.normal(cpu.TIMESLICE / 2, cpu.TIMESLICE / 10))
                    ios.append(
                        Device(DeviceType.Disk, time, sys_file, read_write,
                               n_opers))
                    disk.addFile(sys_file)
            job.ios = ios
            # Coloca o job no segmento para facilitar impressao da memoria
            for i in range(0, segment_tree.size):
                segment_tree.__getitem__(i).job = job
            jobs.append(job)
            ios = []
    printJobs(jobs)
    return jobs
コード例 #10
0
 def renameAndMoveFile(self, filename):
     fileSystem = FileSystem(self.name)
     fileSystem.renameAndMoveFile(filename)
コード例 #11
0
 def createMonthFolder(self):
     fileSystem = FileSystem(self.name)
     fileSystem.createMonthFolder()