Source code for updatemysql


"""
This is the documentation for updatemysql.py.

This file contains a set of functions that:
    1. Create tables in the MySQL database if they do not yet exist.
    
    2. After establishing a connection to the MySQL server, 
    tables for farside, XT-cut, composite map, SO-PHI, and synoptic map can be created 
    and populated with the following information: tag, filename, date_range, latest_date, caption, file_creation_time, and filepath.

"""

import os, re
from datetime import datetime
import pymysql

[docs] def connect_to_mysql(): """ Summary: Connect to a MySQL server using the provided configuration and return the connection object. Description: This function establishes a connection to a MySQL server using the parameters specified in the ~/.my.cnf configuration file and connects to the 'Farside' database. If the connection is successful, it returns the connection object. If the connection fails, a RuntimeError is raised. Parameters: None Returns: pymysql.connections.Connection: A connection object to the MySQL server. Raises: RuntimeError: If the connection to the MySQL server is not open. Example: >>> connection = connect_to_mysql() >>> # Perform database operations using the 'connection' object. """ connection = pymysql.connect( read_default_file='~/.my.cnf', database='Farside', ) if connection.open: return connection else: raise RuntimeError('connection to mysql server is not open')
[docs] def create_table(cursor, overwrite=False): """ After the connection to MySQL server is established, create tables in the Farside database. Example: >>> Table= create_table() """ # create farside_movies if overwrite: cursor.execute("DROP TABLE IF EXISTS farside_movies") cursor.execute(""" CREATE TABLE IF NOT EXISTS farside_movies ( farsideID INT AUTO_INCREMENT PRIMARY KEY, tag VARCHAR(50), filename VARCHAR(255) UNIQUE, date_range VARCHAR(50) UNIQUE, latest_date DATE, caption TEXT, file_creation_time DATE, filepath VARCHAR(255) UNIQUE ) """) # create farside_comp_maps if overwrite: cursor.execute("DROP TABLE IF EXISTS farside_comp_maps") cursor.execute(""" CREATE TABLE IF NOT EXISTS farside_comp_maps ( farsideID INT AUTO_INCREMENT PRIMARY KEY, tag VARCHAR(50), filename VARCHAR(255) UNIQUE, date_range VARCHAR(50) UNIQUE, latest_date DATE, caption TEXT, file_creation_time DATE, filepath VARCHAR(255) UNIQUE ) """) # create farside_xtcut_longmap if overwrite: cursor.execute("DROP TABLE IF EXISTS farside_xtcut_longmap") cursor.execute(""" CREATE TABLE IF NOT EXISTS farside_xtcut_longmap ( farsideID INT AUTO_INCREMENT PRIMARY KEY, tag VARCHAR(50), filename VARCHAR(255) UNIQUE, date_range VARCHAR(50) UNIQUE, latest_date DATE, caption TEXT, file_creation_time DATE, filepath VARCHAR(255) UNIQUE ) """) # create synoptic_map if overwrite: cursor.execute("DROP TABLE IF EXISTS synoptic_map") cursor.execute(""" CREATE TABLE IF NOT EXISTS synoptic_map ( farsideID INT AUTO_INCREMENT PRIMARY KEY, tag VARCHAR(50), filename VARCHAR(255) UNIQUE, date_range VARCHAR(50) UNIQUE, latest_date DATE, caption TEXT, file_creation_time DATE, filepath VARCHAR(255) UNIQUE ) """) # create SO_PHI if overwrite: cursor.execute("DROP TABLE IF EXISTS SO_PHI") cursor.execute(""" CREATE TABLE IF NOT EXISTS SO_PHI ( farsideID INT AUTO_INCREMENT PRIMARY KEY, tag VARCHAR(50), filename VARCHAR(255) UNIQUE, date_range VARCHAR(50) UNIQUE, latest_date DATE, caption TEXT, file_creation_time DATE, filepath VARCHAR(255) UNIQUE ) """)
[docs] def extracting_movies(): """ Example: >>> Table= extracting_movies() """ parent_folder="/scratch/seismo/gosip/farside/" folders = os.listdir(parent_folder) extracted_movies = [] for child_folder in folders: if child_folder=="movies": tag="movies" movie_folder=parent_folder+child_folder movie_files=os.listdir(movie_folder) for filename in movie_files: date_range= re.search(r"(\d{4}\.\d{2}\.\d{2}-\d{4}\.\d{2}\.\d{2})", filename) if date_range: date_range=date_range.group(1) latest_date = re.search(r"(\d{4}\.\d{2}\.\d{2})$", date_range) if latest_date: latest_date=latest_date.group(1) filepath=parent_folder+tag+"/"+filename caption="none" creation_time = os.path.getctime(filepath) file_creation_time= datetime.fromtimestamp(creation_time).strftime('%Y-%m-%d %H:%M:%S') extracted_movies.append((tag, filename, date_range, latest_date, caption, file_creation_time, filepath)) return extracted_movies
[docs] def extracting_composite_maps(): """ Example: >>> Table= extracting_composite_maps() """ parent_folder="/scratch/seismo/gosip/farside/" folders = os.listdir(parent_folder) extracted_composite_maps = [] for child_folder in folders: if child_folder=="composite_map": tag="composite_map" parent_folder_comp=parent_folder +tag folders_comp = os.listdir(parent_folder_comp) for file_year in folders_comp: year = str(file_year) child_folder_comp = parent_folder_comp+"/"+year child_files = os.listdir(child_folder_comp) for filename in child_files: filepath = child_folder_comp+"/"+filename date_range= re.search(r"(\d{4}\.\d{2}\.\d{2}_\d{2}:\d{2}:\d{2})", filename) if date_range: date_range=date_range.group(1) latest_date = re.search(r"(\d{4}\.\d{2}\.\d{2})", date_range) if latest_date: latest_date=latest_date.group(1) caption = re.search(r"(\d{2}:\d{2}:\d{2})", date_range) if caption: caption=caption.group(1) creation_time = os.path.getctime(filepath) file_creation_time= datetime.fromtimestamp(creation_time).strftime('%Y-%m-%d %H:%M:%S') extracted_composite_maps.append((tag, filename, date_range, latest_date, caption, file_creation_time, filepath)) return extracted_composite_maps
[docs] def extracting_xt_cut(): """ Example: >>> Table= extracting_xt_cut() """ parent_folder="/scratch/seismo/gosip/farside/" folders = os.listdir(parent_folder) extracted_composite_xt_cut = [] for child_folder in folders: if child_folder=="lon_time_map": tag="lon_time_map" parent_folder_comp=parent_folder+tag folders_comp = os.listdir(parent_folder_comp) for file_year in folders_comp: year = str(file_year) child_folder_comp = parent_folder_comp+"/"+year child_files = os.listdir(child_folder_comp) for filename in child_files: filepath = child_folder_comp+"/"+filename date_range= re.search(r"(\d{4}\.\d{2}\.\d{2}_\d{2}:\d{2}:\d{2})", filename) if date_range: date_range=date_range.group(1) latest_date = re.search(r"(\d{4}\.\d{2}\.\d{2})", date_range) if latest_date: latest_date=latest_date.group(1) caption = re.search(r"(\d{2}:\d{2}:\d{2})", date_range) if caption: caption=caption.group(1) creation_time = os.path.getctime(filepath) file_creation_time= datetime.fromtimestamp(creation_time).strftime('%Y-%m-%d %H:%M:%S') extracted_composite_xt_cut.append((tag, filename, date_range, latest_date, caption, file_creation_time, filepath)) return extracted_composite_xt_cut
[docs] def extracting_synoptic_maps(): """ Example: >>> Table= extracting_synoptic_maps() """ parent_folder="/scratch/seismo/gosip/farside/" folders = os.listdir(parent_folder) extracted_synoptic_maps= [] for child_folder in folders: if child_folder=="synoptic_map": tag="synoptic_map" parent_folder_synoptic=parent_folder+tag folders_synoptic = os.listdir(parent_folder_synoptic) for folder in folders_synoptic: sub_file = str(folder) child_folder_synoptic = parent_folder_synoptic+"/"+sub_file child_synoptic = os.listdir(child_folder_synoptic) for year_synoptic in child_synoptic: year_synoptic = str(year_synoptic) sub_sub_file = child_folder_synoptic +"/"+year_synoptic child_sub_sub_file = os.listdir(sub_sub_file) for filename in child_sub_sub_file: date_range= re.search(r"(\d{4}\.\d{2}\.\d{2}_\d{2}:\d{2}:\d{2})", filename) if date_range: date_range=date_range.group(1) latest_date = re.search(r"(\d{4}\.\d{2}\.\d{2})", date_range) if latest_date: latest_date=latest_date.group(1) filepath=parent_folder_synoptic+"/"+ sub_file+"/"+ year_synoptic+"/"+filename caption=sub_file creation_time = os.path.getctime(filepath) file_creation_time= datetime.fromtimestamp(creation_time).strftime('%Y-%m-%d %H:%M:%S') extracted_synoptic_maps.append((tag, filename, date_range, latest_date, caption, file_creation_time, filepath)) return (extracted_synoptic_maps)
[docs] def extracting_SO_PHI(): """ Example: >>> Table= extracting_SO_PHI() """ parent_folder="/scratch/seismo/gosip/farside/" folders = os.listdir(parent_folder) extracted_sophi = [] for child_folder in folders: if child_folder=="SO_PHI": tag="SO_PHI" parent_folder_sophi=parent_folder +tag folders_sophi = os.listdir(parent_folder_sophi) for file_year in folders_sophi: year = str(file_year) child_folder_sophi = parent_folder_sophi+"/"+year child_files = os.listdir(child_folder_sophi) for filename in child_files: filepath = child_folder_sophi+"/"+filename date_range= re.search(r"(\d{4}\.\d{2}\.\d{2}_\d{2}:\d{2}:\d{2})", filename) if date_range: date_range=date_range.group(1) latest_date = re.search(r"(\d{4}\.\d{2}\.\d{2})", date_range) if latest_date: latest_date=latest_date.group(1) caption = re.search(r"(\d{2}:\d{2}:\d{2})", date_range) if caption: caption=caption.group(1) creation_time = os.path.getctime(filepath) file_creation_time= datetime.fromtimestamp(creation_time).strftime('%Y-%m-%d %H:%M:%S') extracted_sophi.append((tag, filename, date_range, latest_date, caption, file_creation_time, filepath)) return(extracted_sophi)
if __name__ == "__main__": T = [datetime.now()] extracting_movies_val=extracting_movies() T.append(datetime.now()) print(T[-1]-T[-2], 'extract movies') extracting_comp_maps_val=extracting_composite_maps() T.append(datetime.now()) print(T[-1]-T[-2], 'extract composite maps') extracting_xt_cut_val = extracting_xt_cut() T.append(datetime.now()) print(T[-1]-T[-2], 'extract xt cut') extracting_synoptic_maps_val= extracting_synoptic_maps() T.append(datetime.now()) print(T[-1]-T[-2], 'extract synoptic maps') extracting_SO_PHI_val= extracting_SO_PHI() T.append(datetime.now()) print(T[-1]-T[-2], 'extract SO/PHI') try: connection = connect_to_mysql() cursor = connection.cursor() create_table(cursor, overwrite=False) connection.commit() T.append(datetime.now()) print(T[-1]-T[-2], 'create tables') cursor.executemany(""" INSERT IGNORE INTO farside_movies (tag, filename, date_range, latest_date, caption, file_creation_time, filepath) VALUES ( %s, %s, %s, %s, %s, %s, %s) """, extracting_movies_val) connection.commit() T.append(datetime.now()) print(T[-1]-T[-2], 'write to farside_movies') cursor.executemany(""" INSERT IGNORE INTO farside_comp_maps (tag, filename, date_range, latest_date, caption, file_creation_time, filepath) VALUES ( %s, %s, %s, %s, %s, %s, %s) """, extracting_comp_maps_val) connection.commit() T.append(datetime.now()) print(T[-1]-T[-2], 'write to farside_comp_maps') cursor.executemany(""" INSERT IGNORE INTO farside_xtcut_longmap (tag, filename, date_range, latest_date, caption, file_creation_time, filepath) VALUES ( %s, %s, %s, %s, %s, %s, %s) """, extracting_xt_cut_val) connection.commit() T.append(datetime.now()) print(T[-1]-T[-2], 'write to farside_xtcut_longmap') cursor.executemany(""" INSERT IGNORE INTO synoptic_map (tag, filename, date_range, latest_date, caption, file_creation_time, filepath) VALUES ( %s, %s, %s, %s, %s, %s, %s) """, extracting_synoptic_maps_val) connection.commit() T.append(datetime.now()) print(T[-1]-T[-2], 'write to synoptic_map') cursor.executemany(""" INSERT IGNORE INTO SO_PHI (tag, filename, date_range, latest_date, caption, file_creation_time, filepath) VALUES ( %s, %s, %s, %s, %s, %s, %s) """, extracting_SO_PHI_val) connection.commit() T.append(datetime.now()) print(T[-1]-T[-2], 'write to SO_PHI') finally: cursor.close() connection.close() T.append(datetime.now()) print(T[-1]-T[0], 'total elapsed time') # 0:00:00.013719 create tables # 0:00:00.002967 extract movies # 0:00:01.555588 extract composite maps # 0:00:00.029831 extract xt cut # 0:00:00.059572 extract synoptic maps # 0:00:00.033863 extract SO/PHI # 0:00:00.006888 write to farside_movies # 0:00:00.655665 write to farside_comp_maps # 0:00:00.010167 write to farside_xtcut_longmap # 0:00:00.019722 write to synoptic_map # 0:00:00.014718 write to SO_PHI # 0:00:02.402804 total elapsed time