diff vdb_common.py @ 1:5c5027485f7d draft

Uploaded correct file
author damion
date Sun, 09 Aug 2015 16:07:50 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vdb_common.py	Sun Aug 09 16:07:50 2015 -0400
@@ -0,0 +1,88 @@
+#!/usr/bin/python
+import re
+import os
+import time
+import dateutil
+import dateutil.parser as parser2
+import datetime
+import calendar
+
+def parse_date(adate):
+	"""
+	Convert human-entered time into linux integer timestamp
+
+	@param adate string Human entered date to parse into linux time
+
+	@return integer Linux time equivalent or 0 if no date supplied
+	"""
+	adate = adate.strip()
+	if adate > '':
+	    adateP = parser2.parse(adate, fuzzy=True)
+	    #dateP2 = time.mktime(adateP.timetuple())
+	    # This handles UTC & daylight savings exactly
+	    return calendar.timegm(adateP.timetuple())
+	return 0
+	
+
+def get_unix_time(vtime, voffset=0):
+	return float(vtime) - int(voffset)/100*60*60
+
+
+def natural_sort_key(s, _nsre=re.compile('([0-9]+)')):
+	return [int(text) if text.isdigit() else text.lower()
+		for text in re.split(_nsre, s)] 
+
+
+class date_matcher(object):
+	"""
+	Enables cycling through a list of versions and picking the one that matches
+	or immediately preceeds a given date.  As soon as an item is found, subsequent
+	calls to date_matcher return false (because of the self.found flag)
+	"""
+	def __init__(self, unix_time):
+		"""
+		@param adate linux date/time
+		"""
+		self.found = False
+		self.unix_time = unix_time
+		
+	def __iter__(self):
+		return self
+
+	def next(self, unix_datetime):
+		select = False
+		if (self.found == False) and (self.unix_time > 0) and (unix_datetime <= self.unix_time):
+			self.found = True
+			select = True
+		return select
+
+
+def dateISOFormat(atimestamp):
+	return datetime.datetime.isoformat(datetime.datetime.fromtimestamp(atimestamp))
+
+def lightDate(unixtime):
+	return datetime.datetime.utcfromtimestamp(float(unixtime)).strftime('%Y-%m-%d %H:%M')						
+	
+def move_files(source_path, destination_path, file_paths):
+	"""
+	MOVE FILES TO CACHE FOLDER (RATHER THAN COPYING THEM) FOR GREATER EFFICIENCY.
+	Since a number of data source systems have hidden / temporary files in their
+	data folder structure, a list of file_paths is required to select only that
+	content that should be copied over.  Note: this will leave skeleton of folders; only files are moved.
+	
+	Note: Tried using os.renames() but it errors when attempting to remove folders 
+	from git archive that aren't empty due to files that are not to be copied.
+	
+	
+	@param source_path string Absolute folder path to move data files from
+	@param destination_path string Absolute folder path to move data files to
+	@param file_paths string List of files and their relative paths from source_path root
+	"""
+	for file_name in file_paths:
+		if len(file_name):
+			print "(" + file_name + ")"
+			v_path = os.path.dirname(os.path.join(destination_path, file_name))
+			if not os.path.isdir(v_path): 
+				os.makedirs(v_path)
+			os.rename(os.path.join(source_path, file_name), os.path.join(destination_path, file_name) )
+