import arcpy arcpy.ImportToolbox("//XXX.XXX.XXX.XXX/arcData/lab_data/FOLDER1/FOLDER2/MyToolBox10_1.tbx") jobID = arcpy.GetParameterAsText(0) if jobID == '#' or not jobID: jobID = "\\\\XXX.XXX.XXX.XXX\\arcData\\lab_data\\FOLDER1\\FOLDER2\\ToolData\\SaveAndEmail.gdb\\Stations" Output_File_Name = arcpy.GetParameterAsText(1) if Output_File_Name == '#' or not Output_File_Name: Output_File_Name = "BTS_2013_Spring" Email_To = arcpy.GetParameterAsText(2) if Email_To == '#' or not Email_To: Email_To = "EndUserEmail@WhereEver.com" Email_Subject = arcpy.GetParameterAsText(3) if Email_Subject == '#' or not Email_Subject: Email_Subject = "BTS_2013_Spring_Stations" Email_Body = arcpy.GetParameterAsText(4) if Email_Body == '#' or not Email_Body: Email_Body = "Here are your stations" Worked = arcpy.GetParameterAsText(5) Input_Stations = "%jobID%" Scratch_Folder = "%scratchFolder%" arcpy.gp.toolbox = "//XXX.XXX.XXX.XXX/arcData/lab_data/FOLDER1/FOLDER2/MyToolBox10_1.tbx"; arcpy.gp.CreateFilesZipAndEmail(Input_Stations, Scratch_Folder, Output_File_Name, Email_To, Email_Subject, Email_Body)
import arcpy import ErrorUtils import locale import os import smtplib import SSDataObject import SSUtilities import string import zipfile locale.setlocale(locale.LC_ALL, '') arcpy.SetLogHistory(False) from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.Utils import COMMASPACE, formatdate from email import Encoders inputSratchFolder = "" def createNobelTecFile(inputNTfc, inputNTfileName): try: outputNTname = os.path.join(inputSratchFolder, (inputNTfileName + "_Nav.txt")) f = open(outputNTname,'w') rows = arcpy.SearchCursor(inputNTfc) for row in rows: label = row.getValue("LABEL") f.write('[' + label + ']\n') f.write('Type = Mark\n') lon = row.getValue("LON") lonDD = int(abs(lon)) lonMM = float((float(abs(lon)) - lonDD) * 60.0) lonMMs = str(lonMM) lat = row.getValue("LAT") latDD = int(lat) latMM = float((float(lat) - latDD) * 60.0) latMMs = str(latMM) f.write('LatLon = ' + str(latDD) + ' ' + latMMs + ' N ' + str(lonDD) + ' ' + lonMMs + ' W\n') f.write('Color = 0x000000\n') testType = row.getValue("TYPE") if testType == "CTD Only": symbol = str(1) elif testType == "Bongo and CTD": symbol = str(9) elif testType == "Random Clam Station": symbol = str(1) elif testType == "Random BTS Station": symbol = str(1) elif testType == "Random BTS Station with Bongo": symbol = str(9) elif testType == "Random BTS Alt Station": symbol = str(1) elif testType == "Scallop - Fixed Station: Start": symbol = str(2) elif testType == "Scallop - Fixed Station: End": symbol = str(3) elif testType == "Scallop - Non-Random": symbol = str(4) elif testType == "Scallop - Non-Random > 40m": symbol = str(5) elif testType == "Random Scallop Station": symbol = str(1) elif testType == "Fixed Scallop Station": symbol = str(9) elif testType == "Random Shrimp Station": symbol = str(1) elif testType == "Fixed Shrimp Station": symbol = str(9) f.write('BmpIdx = ' + symbol + '\n') f.write('ExistsOutsideCollection = True\n') f.write('Locked = True\n') f.write('MarkRenamed = True\n') f.close() return outputNTname except: arcpy.AddMessage("Create NobelTec File Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) def createChiefSciFile(inputCSfc, inputCSfileName): try: outputCSname = os.path.join(inputSratchFolder, (inputCSfileName + ".csv")) fieldList = [f.name for f in arcpy.ListFields(inputCSfc) if not f.name.startswith('Shape')] exportXYV(inputCSfc, fieldList, outputCSname) return outputCSname except: arcpy.AddMessage("Create Chief Scientist File Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) def exportXYV(inputFC, fieldList, outFile): ssdo = SSDataObject.SSDataObject(inputFC) inputFields = [ssdo.oidName, "SHAPE@XY"] + fieldList cnt = SSUtilities.getCount(inputFC) badIDs = [] badRecord = 0 try: rows = arcpy.da.SearchCursor(ssdo.inputFC, inputFields) except: arcpy.AddIDMessage("ERROR", 204) raise SystemExit() delimiter = "," floatTypes = ["Single", "Double"] localeDict = {} for field in fieldList: fieldType = ssdo.allFields[field].type if fieldType in floatTypes: formatToken = "%f" else: formatToken = "%s" localeDict[field] = formatToken fo = SSUtilities.openFile(outFile, 'w') outRow = delimiter.join(fieldList) fo.write("%s\n" % outRow.encode('utf-8')) for row in rows: OID = row[0] badValues = row.count(None) badRow = badValues rowValues = [] for ind, field in enumerate(fieldList): value = row[ind + 2] if value == "" or value == None: rowValues.append("NULL") else: formatValue = locale.format(localeDict[field], value) rowValues.append(formatValue) if badRow: badIDs.append(OID) outRow = delimiter.join(rowValues) fo.write("%s\n" % outRow.encode('utf-8')) del rows fo.close() badIDs = list(set(badIDs)) badIDs.sort() badIDs = [ str(i) for i in badIDs ] bn = len(badIDs) if bn: err = ErrorUtils.reportBadRecords(cnt, bn, badIDs, label=ssdo.oidName, allowNULLs = True) def zipUpFolder(inputFC, chiefSciFile, nobelTecFile): try: outZipFile = os.path.join(inputSratchFolder, "Stations.zip") zip = zipfile.ZipFile(outZipFile, 'w', zipfile.ZIP_DEFLATED) zipws(zip, inputFC, chiefSciFile, nobelTecFile) zip.close() return outZipFile except RuntimeError: if os.path.exists(outZipFile): os.unlink(outZipFile) zip = zipfile.ZipFile(outZipFile, 'w', zipfile.ZIP_STORED) zipws(zip, inputFC, chiefSciFile, nobelTecFile) zip.close() arcpy.AddWarning(arcpy.GetIDMessage(86133)) def zipws(zip, fc, chiefSciZip, nobelTecZip): path = os.path.normpath(os.path.dirname(fc)) chiefSciName = os.path.basename(chiefSciZip) nobelTecName = os.path.basename(nobelTecZip) rootLen = len(path)+len(os.sep) for (dirpath, dirnames, filenames) in os.walk(path): for file in filenames: if not file.endswith('.lock'): zip.write(os.path.join(dirpath, file), os.path.join("Stations.gdb", os.path.join(dirpath, file)[rootLen:])) zip.write(chiefSciZip, chiefSciName) zip.write(nobelTecZip, nobelTecName) def send_mail(send_to, subject, text, f): try: msg = MIMEMultipart() msg['From'] = r'FirstName.LastName@MyEmail.com' msg['To'] = COMMASPACE.join(send_to) msg['CC'] = "FirstName.LastName@MyEmail.com" msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach( MIMEText(text) ) part = MIMEBase('application', "zip") part.set_payload( open(f,"rb").read() ) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f)) msg.attach(part) smtp = smtplib.SMTP("MYSERVER") smtp.sendmail(r'FirstName.LastName@MyEmail.com', send_to, msg.as_string()) smtp.close() except: arcpy.AddMessage("Send Email Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) if __name__ == '__main__': try: inputGDB = arcpy.GetParameterAsText(0) global inputSratchFolder inputSratchFolder = arcpy.GetParameterAsText(1) inputFileName = arcpy.GetParameterAsText(2) sendto = arcpy.GetParameterAsText(3).split(";") subject = arcpy.GetParameterAsText(4) text = arcpy.GetParameterAsText(5) outputNobelTecFile = createNobelTecFile(inputGDB, inputFileName) outputChiefSciFile = createChiefSciFile(inputGDB, inputFileName) outputZipFile = zipUpFolder(inputGDB, outputChiefSciFile, outputNobelTecFile) send_mail(sendto, subject, text, outputZipFile) arcpy.SetParameterAsText(5, "True") except: arcpy.SetParameterAsText(5, "False") arcpy.AddMessage("Create Files Zip and Email Tool Failed") arcpy.AddError(arcpy.GetMessages(2))
import arcpy import locale import os import smtplib import string import zipfile locale.setlocale(locale.LC_ALL, '') arcpy.SetLogHistory(False) from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.Utils import COMMASPACE, formatdate from email import Encoders inputSratchFolder = "" def createNobelTecFile(inputNTfc, inputNTfileName): try: outputNTname = os.path.join(inputSratchFolder, (inputNTfileName + "_Nav.txt")) f = open(outputNTname,'w') rows = arcpy.SearchCursor(inputNTfc) for row in rows: label = row.getValue("LABEL") f.write('[' + label + ']\n') f.write('Type = Mark\n') lon = row.getValue("LON") lonDD = int(abs(lon)) lonMM = float((float(abs(lon)) - lonDD) * 60.0) lonMMs = str(lonMM) lat = row.getValue("LAT") latDD = int(lat) latMM = float((float(lat) - latDD) * 60.0) latMMs = str(latMM) f.write('LatLon = ' + str(latDD) + ' ' + latMMs + ' N ' + str(lonDD) + ' ' + lonMMs + ' W\n') f.write('Color = 0x000000\n') testType = row.getValue("TYPE") if testType == "CTD Only": symbol = str(1) elif testType == "Bongo and CTD": symbol = str(9) elif testType == "Random Clam Station": symbol = str(1) elif testType == "Random BTS Station": symbol = str(1) elif testType == "Random BTS Station with Bongo": symbol = str(9) elif testType == "Random BTS Alt Station": symbol = str(1) elif testType == "Scallop - Fixed Station: Start": symbol = str(2) elif testType == "Scallop - Fixed Station: End": symbol = str(3) elif testType == "Scallop - Non-Random": symbol = str(4) elif testType == "Scallop - Non-Random > 40m": symbol = str(5) elif testType == "Random Scallop Station": symbol = str(1) elif testType == "Fixed Scallop Station": symbol = str(9) elif testType == "Random Shrimp Station": symbol = str(1) elif testType == "Fixed Shrimp Station": symbol = str(9) f.write('BmpIdx = ' + symbol + '\n') f.write('ExistsOutsideCollection = True\n') f.write('Locked = True\n') f.write('MarkRenamed = True\n') f.close() return outputNTname except: arcpy.SetParameterAsText(6, "False") arcpy.AddMessage("Create NobelTec File Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) def createChiefSciFile(inputCSfc, inputCSfileName): try: outputCSname = os.path.join(inputSratchFolder, (inputCSfileName + ".csv")) fieldList = [f.name for f in arcpy.ListFields(inputCSfc) if not f.name.startswith('Shape')] exportXYV(inputCSfc, fieldList, outputCSname) return outputCSname except: arcpy.SetParameterAsText(6, "False") arcpy.AddMessage("Create Chief Scientist File Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) def exportXYV(inputFC, fieldList, outFile): try: rows = arcpy.da.SearchCursor(inputFC, fieldList) delimiter = "," floatTypes = ["Single", "Double"] localeDict = {} fieldListObject = arcpy.ListFields(inputFC) for field in fieldListObject: fieldType = field.type if fieldType in floatTypes: formatToken = "%f" else: formatToken = "%s" localeDict[field.name] = formatToken try: fo = open(outFile, 'w') except: arcpy.SetParameterAsText(6, "False") arcpy.AddIDMessage("ERROR", 210, fileName) raise SystemExit() outRow = delimiter.join(fieldList) fo.write("%s\n" % outRow.encode('utf-8')) for row in rows: rowValues = [] for ind, field in enumerate(fieldList): value = row[ind] if value == "" or value == None: rowValues.append("NULL") else: formatValue = locale.format(localeDict[field], value) rowValues.append(formatValue) outRow = delimiter.join(rowValues) fo.write("%s\n" % outRow.encode('utf-8')) del rows fo.close() except: arcpy.SetParameterAsText(6, "False") arcpy.AddMessage("Create Chief Scientist File Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) def zipUpFolder(inputFC, chiefSciFile, nobelTecFile): try: outZipFile = os.path.join(inputSratchFolder, "Stations.zip") zip = zipfile.ZipFile(outZipFile, 'w', zipfile.ZIP_DEFLATED) zipws(zip, inputFC, chiefSciFile, nobelTecFile) zip.close() return outZipFile except RuntimeError: if os.path.exists(outZipFile): os.unlink(outZipFile) zip = zipfile.ZipFile(outZipFile, 'w', zipfile.ZIP_STORED) zipws(zip, inputFC, chiefSciFile, nobelTecFile) zip.close() arcpy.AddWarning(arcpy.GetIDMessage(86133)) def zipws(zip, fc, chiefSciZip, nobelTecZip): path = os.path.normpath(os.path.dirname(fc)) chiefSciName = os.path.basename(chiefSciZip) nobelTecName = os.path.basename(nobelTecZip) rootLen = len(path)+len(os.sep) for (dirpath, dirnames, filenames) in os.walk(path): for file in filenames: if not file.endswith('.lock'): zip.write(os.path.join(dirpath, file), os.path.join("Stations.gdb", os.path.join(dirpath, file)[rootLen:])) zip.write(chiefSciZip, chiefSciName) zip.write(nobelTecZip, nobelTecName) def send_mail(send_to, subject, text, f): try: msg = MIMEMultipart() msg['From'] = "FirstName.LastName@MyEmail.com" msg['To'] = COMMASPACE.join(send_to) msg['CC'] = "FirstName.LastName@MyEmail.com" msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject send_to = [send_to, "FirstName.LastName@MyEmail.com"] msg.attach( MIMEText(text) ) part = MIMEBase('application', "zip") part.set_payload( open(f,"rb").read() ) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f)) msg.attach(part) smtp = smtplib.SMTP("MyServer") smtp.sendmail("FirstName.LastName@MyEmail.com", send_to, msg.as_string()) smtp.close() except: arcpy.SetParameterAsText(6, "False") arcpy.AddMessage("Send Email Tool Failed") arcpy.AddError(arcpy.GetMessages(2)) if __name__ == '__main__': try: inputGDB = arcpy.GetParameterAsText(0) global inputSratchFolder inputSratchFolder = arcpy.GetParameterAsText(1) inputFileName = arcpy.GetParameterAsText(2) inputSend = [arcpy.GetParameterAsText(3)] subject = arcpy.GetParameterAsText(4) text = arcpy.GetParameterAsText(5) outputNobelTecFile = createNobelTecFile(inputGDB, inputFileName) outputChiefSciFile = createChiefSciFile(inputGDB, inputFileName) outputZipFile = zipUpFolder(inputGDB, outputChiefSciFile, outputNobelTecFile) send_mail(inputSend, subject, text, outputZipFile) arcpy.SetParameterAsText(6, "True") except: arcpy.SetParameterAsText(6, "False") arcpy.AddMessage("Create Files Zip and Email Tool Failed") arcpy.AddError(arcpy.GetMessages(2))