Media copy research and development
This commit is contained in:
parent
d318df5e8f
commit
80fd76c485
1
mediacopy/.gitignore
vendored
Normal file
1
mediacopy/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.env
|
67
mediacopy/file_copy.py
Normal file
67
mediacopy/file_copy.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import os, time, sys
|
||||||
|
from shutil import copy2
|
||||||
|
import filecmp
|
||||||
|
import pathlib
|
||||||
|
from PIL import Image, ExifTags
|
||||||
|
import pendulum
|
||||||
|
|
||||||
|
INGEST_DIR = pathlib.PureWindowsPath(r'\\192.168.1.4\photos\z_temp\external_backup\olympus\DCIM\100OLYMP')
|
||||||
|
PHOTO_LIBRARY = '//192.168.1.4/photos/photo_library/'
|
||||||
|
file_list = os.listdir(INGEST_DIR)
|
||||||
|
# print(file_list)
|
||||||
|
move_list = []
|
||||||
|
|
||||||
|
for item in file_list:
|
||||||
|
cur_file = pathlib.Path(os.path.join(INGEST_DIR, item))
|
||||||
|
# print(cur_file)
|
||||||
|
# print("last modified: %s" % time.ctime(os.path.getmtime(cur_file)))
|
||||||
|
# created_date = cur_file.stat().st_ctime
|
||||||
|
|
||||||
|
##Check for Exif Data
|
||||||
|
## if no exif data revert to file created time
|
||||||
|
try:
|
||||||
|
created_date = Image.open(cur_file)._getexif()[36867]
|
||||||
|
parsed_date = pendulum.parse(created_date)
|
||||||
|
except:
|
||||||
|
created_date = (time.ctime(os.path.getctime(cur_file)))
|
||||||
|
parsed_date = pendulum.parse(created_date, strict=False)
|
||||||
|
|
||||||
|
filename, file_extension = os.path.splitext(item)
|
||||||
|
filename = item ## Critical to the process
|
||||||
|
if not file_extension.lower() == ".nef" and not file_extension.lower() == ".jpg":
|
||||||
|
continue
|
||||||
|
|
||||||
|
# print(filename, file_extension)
|
||||||
|
# print(created_date)
|
||||||
|
# print()
|
||||||
|
|
||||||
|
# print(parsed_date)
|
||||||
|
year = parsed_date.year
|
||||||
|
month = str(parsed_date.month).zfill(2)
|
||||||
|
day = str(parsed_date.day).zfill(2)
|
||||||
|
destination = "%s%s/%s/%s/%s" % (PHOTO_LIBRARY, year, month, day, filename)
|
||||||
|
# print(destination)
|
||||||
|
print("We want to move %s to %s%s/%s/%s." % (filename, PHOTO_LIBRARY, year, month, day))
|
||||||
|
|
||||||
|
## check if the directory exists
|
||||||
|
if not os.path.isdir(os.path.join(PHOTO_LIBRARY, str(year))):
|
||||||
|
print("We couldn't find your directory")
|
||||||
|
os.makedirs(os.path.join(PHOTO_LIBRARY, year))
|
||||||
|
if not os.path.isdir(os.path.join(PHOTO_LIBRARY, str(year), str(month))):
|
||||||
|
print("We couldn't find your directory")
|
||||||
|
os.makedirs(os.path.join(PHOTO_LIBRARY, str(year), str(month)))
|
||||||
|
if not os.path.isdir(os.path.join(PHOTO_LIBRARY, str(year), str(month), str(day))):
|
||||||
|
print("We couldn't find your directory")
|
||||||
|
os.makedirs(os.path.join(PHOTO_LIBRARY, str(year), str(month), str(day)))
|
||||||
|
|
||||||
|
## We should be copying, creating a source and destination hash
|
||||||
|
## comparing the files and then deleting the source
|
||||||
|
print()
|
||||||
|
print("Copying %s to %s" % (cur_file, destination))
|
||||||
|
copy2(cur_file, destination)
|
||||||
|
if filecmp.cmp(cur_file, destination) == True:
|
||||||
|
print("%s and %s are a match. Time to delete %s" % (cur_file, destination, cur_file))
|
||||||
|
os.remove(cur_file)
|
||||||
|
|
||||||
|
### TODO:
|
||||||
|
### Find files with no extension and save them + directory to a file
|
19
mediacopy/new_scans.py
Normal file
19
mediacopy/new_scans.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
'''
|
||||||
|
Honestly just check to see what the newest file is and if it is newer than the last one we saw
|
||||||
|
Send a push notification to Alex
|
||||||
|
|
||||||
|
Aspirations:
|
||||||
|
[] Suggest new names
|
||||||
|
[] Rename them in the tool
|
||||||
|
'''
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
SCANS_DIR = r'\\192.168.1.4\scans'
|
||||||
|
listing = os.listdir(SCANS_DIR)
|
||||||
|
print(listing)
|
||||||
|
|
||||||
|
for item in listing:
|
||||||
|
cur_file = os.path.join(SCANS_DIR, item)
|
||||||
|
# print("last modified: %s" % time.ctime(os.path.getmtime(cur_file))) # Last Modified Time
|
||||||
|
print("%s Created: %s" % (item, time.ctime(os.path.getctime(cur_file))))
|
71
mediacopy/test_menu.py
Normal file
71
mediacopy/test_menu.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
from PyInquirer import style_from_dict, Token, prompt, Separator
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
|
||||||
|
style = style_from_dict({
|
||||||
|
Token.Separator: '#cc5454',
|
||||||
|
Token.QuestionMark: '#673ab7 bold',
|
||||||
|
Token.Selected: '#cc5454', # default
|
||||||
|
Token.Pointer: '#673ab7 bold',
|
||||||
|
Token.Instruction: '', # default
|
||||||
|
Token.Answer: '#f44336 bold',
|
||||||
|
Token.Question: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
questions = [
|
||||||
|
{
|
||||||
|
'type': 'checkbox',
|
||||||
|
'message': 'Select toppings',
|
||||||
|
'name': 'toppings',
|
||||||
|
'choices': [
|
||||||
|
Separator('= The Meats ='),
|
||||||
|
{
|
||||||
|
'name': 'Ham'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Ground Meat'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Bacon'
|
||||||
|
},
|
||||||
|
Separator('= The Cheeses ='),
|
||||||
|
{
|
||||||
|
'name': 'Mozzarella',
|
||||||
|
'checked': True
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Cheddar'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Parmesan'
|
||||||
|
},
|
||||||
|
Separator('= The usual ='),
|
||||||
|
{
|
||||||
|
'name': 'Mushroom'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Tomato'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Pepperoni'
|
||||||
|
},
|
||||||
|
Separator('= The extras ='),
|
||||||
|
{
|
||||||
|
'name': 'Pineapple'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Olives',
|
||||||
|
'disabled': 'out of stock'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Extra cheese'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'validate': lambda answer: 'You must choose at least one topping.' \
|
||||||
|
if len(answer) == 0 else True
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
answers = prompt(questions, style=style)
|
||||||
|
pprint(answers)
|
37
mediacopy/tkinter.py
Normal file
37
mediacopy/tkinter.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import filedialog
|
||||||
|
# from tkinter import *
|
||||||
|
|
||||||
|
class Application(tk.Frame):
|
||||||
|
def __init__(self, master=None):
|
||||||
|
super().__init__(master)
|
||||||
|
self.master = master
|
||||||
|
self.pack()
|
||||||
|
self.create_widgets()
|
||||||
|
|
||||||
|
def create_widgets(self):
|
||||||
|
self.copy_from = tk.Button(self)
|
||||||
|
self.copy_from["text"] = "Copy from..."
|
||||||
|
# self.copy_from["command"] = self.get_dir(self.copy_from)
|
||||||
|
self.copy_from.pack(side="top")
|
||||||
|
|
||||||
|
self.copy_to = tk.Button(self)
|
||||||
|
self.copy_to["text"] = "Copy to..."
|
||||||
|
# self.copy_to.bind('<Enter>', self.get_dir(self.copy_to))
|
||||||
|
self.copy_to.pack(side="top")
|
||||||
|
|
||||||
|
|
||||||
|
self.quit = tk.Button(self, text="QUIT", fg="red",
|
||||||
|
command=self.master.destroy)
|
||||||
|
self.quit.pack(side="bottom")
|
||||||
|
|
||||||
|
def get_dir(self, the_widget):
|
||||||
|
folder_selected = filedialog.askdirectory()
|
||||||
|
if len(folder_selected) > 6:
|
||||||
|
the_widget.config(text=folder_selected)
|
||||||
|
|
||||||
|
|
||||||
|
root = tk.Tk()
|
||||||
|
app = Application(master=root)
|
||||||
|
app.copy_from.configure(command=app.get_dir(app.copy_from))
|
||||||
|
app.mainloop()
|
Loading…
Reference in New Issue
Block a user