Ejemplo n.º 1
0
def _import(params):
    destination = os.path.expanduser(params['--destination'])

    if(params['--source'] is not None):
        source = os.path.expanduser(params['--source'])

        for current_file in filesystem.get_all_files(source, None):
            media = Media.get_class_by_file(current_file, [Photo, Video])
            if(media is None):
                continue

            if(media.__name__ == 'Video'):
                filesystem.set_date_from_path_video(media)

            if(params['--album-from-folder'] == True):
                media.set_album_from_folder()

            dest_path = filesystem.process_file(current_file, destination, media, allowDuplicate=False, move=False)
            if(dest_path is not None):
                print '%s -> %s' % (current_file, dest_path)
    elif(params['--file'] is not None):
        current_file = os.path.expanduser(params['--file'])
        media = Media.get_class_by_file(current_file, [Photo, Video])
        if(media.__name__ == 'Video'):
            filesystem.set_date_from_path_video(media)

        if(params['--album-from-folder'] == True):
            media.set_album_from_folder()

        dest_path = filesystem.process_file(current_file, destination, media, allowDuplicate=False, move=False)
        if(dest_path is not None):
            print '%s -> %s' % (current_file, dest_path)
Ejemplo n.º 2
0
def main(argv):
    args = arguments.parse(
        argv, None, ['file=', 'type='],
        './import.py --type=<photo or video> --file=<path to file>')

    if ('file' not in args):
        print 'No file specified'
        sys.exit(1)

    media = Media.get_class_by_file(args['file'], [Photo, Video])

    if (media is None):
        print 'Not a valid file'
        sys.exit(1)

    metadata = media.get_metadata()

    place_name = geolocation.place_name(metadata['latitude'],
                                        metadata['longitude'])

    output = {
        'latitude': metadata['latitude'],
        'longitude': metadata['longitude'],
        'place_name': place_name
    }
    print '%r' % output
Ejemplo n.º 3
0
def main(argv):
    args = arguments.parse(argv, None, ['file='], './import.py --file=<path to file>')

    if('file' not in args):
        print 'No file specified'
        sys.exit(1)

    media = Media.get_class_by_file(args['file'], [Photo, Video])

    if(media is None):
        print 'Not a valid file'
        sys.exit(1)

    metadata = media.get_metadata()
    output = {'date_taken': metadata['date_taken']}
    print '%r' % output
Ejemplo n.º 4
0
def main(argv):
    args = arguments.parse(argv, None, ['file=','type='], './import.py --type=<photo or video> --file=<path to file>')

    if('file' not in args):
        print 'No file specified'
        sys.exit(1)

    media = Media.get_class_by_file(args['file'], [Photo, Video])

    if(media is None):
        print 'Not a valid file'
        sys.exit(1)

    metadata = media.get_metadata()

    place_name = geolocation.place_name(metadata['latitude'], metadata['longitude'])

    output = {'latitude': metadata['latitude'], 'longitude': metadata['longitude'], 'place_name': place_name}
    print '%r' % output
Ejemplo n.º 5
0
def _update(params):
    location_coords = None
    for file_path in params['INPUT']:
        if(not os.path.exists(file_path)):
            if(constants.debug == True):
                print 'Could not find %s' % file_path
            print '{"source":"%s", "error_msg":"Could not find %s"}' % (file_path, file_path)
            continue

        file_path = os.path.expanduser(file_path)
        destination = os.path.expanduser(os.path.dirname(os.path.dirname(os.path.dirname(file_path))))

        media = Media.get_class_by_file(file_path, [Photo, Video])
        if(media is None):
            continue

        updated = False
        if(params['--location'] is not None):
            if(location_coords is None):
                location_coords = geolocation.coordinates_by_name(params['--location'])

            if(location_coords is not None and 'latitude' in location_coords and 'longitude' in location_coords):
                location_status = media.set_location(location_coords['latitude'], location_coords['longitude'])
                if(location_status != True):
                    if(constants.debug == True):
                        print 'Failed to update location'
                    print '{"source":"%s", "error_msg":"Failed to update location"}' % file_path
                    sys.exit(1)
                updated = True


        if(params['--time'] is not None):
            time_string = params['--time']
            time_format = '%Y-%m-%d %H:%M:%S'
            if(re.match('^\d{4}-\d{2}-\d{2}$', time_string)):
                time_string = '%s 00:00:00' % time_string

            if(re.match('^\d{4}-\d{2}-\d{2}$', time_string) is None and re.match('^\d{4}-\d{2}-\d{2} \d{2}:\d{2}\d{2}$', time_string)):
                if(constants.debug == True):
                    print 'Invalid time format. Use YYYY-mm-dd hh:ii:ss or YYYY-mm-dd'
                print '{"source":"%s", "error_msg":"Invalid time format. Use YYYY-mm-dd hh:ii:ss or YYYY-mm-dd"}' % file_path
                sys.exit(1)

            if(time_format is not None):
                time = datetime.strptime(time_string, time_format)
                media.set_date_taken(time)
                updated = True

        if(params['--album'] is not None):
            media.set_album(params['--album'])
            updated = True

        # Updating a title can be problematic when doing it 2+ times on a file.
        # You would end up with img_001.jpg -> img_001-first-title.jpg -> img_001-first-title-second-title.jpg.
        # To resolve that we have to track the prior title (if there was one.
        # Then we massage the updated_media's metadata['base_name'] to remove the old title.
        # Since FileSystem.get_file_name() relies on base_name it will properly rename the file by updating the title
        #     instead of appending it.
        remove_old_title_from_name = False
        if(params['--title'] is not None):
            # We call get_metadata() to cache it before making any changes
            metadata = media.get_metadata()
            title_update_status = media.set_title(params['--title'])
            original_title = metadata['title']
            if(title_update_status and original_title is not None):
                # @TODO: We should move this to a shared method since FileSystem.get_file_name() does it too.
                original_title = re.sub('\W+', '-', original_title.lower())
                original_base_name = metadata['base_name']
                remove_old_title_from_name = True
            updated = True
                
        if(updated == True):
            updated_media = Media.get_class_by_file(file_path, [Photo, Video])
            # See comments above on why we have to do this when titles get updated.
            if(remove_old_title_from_name is True and len(original_title) > 0):
                updated_media.get_metadata()
                updated_media.set_metadata_basename(original_base_name.replace('-%s' % original_title, ''))

            dest_path = filesystem.process_file(file_path, destination, updated_media, move=True, allowDuplicate=True)
            if(constants.debug == True):
                print '%s -> %s' % (file_path, dest_path)

            print '{"source":"%s", "destination":"%s"}' % (file_path, dest_path)
            # If the folder we moved the file out of or its parent are empty we delete it.
            filesystem.delete_directory_if_empty(os.path.dirname(file_path))
            filesystem.delete_directory_if_empty(os.path.dirname(os.path.dirname(file_path)))