12.8.1-10 baseline

Former-commit-id: ca25d508ec [formerly 7c799ab7b99993c77b6568529b46aaf13d01300b]
Former-commit-id: b5e8fee24d
This commit is contained in:
Steve Harris 2012-08-06 09:34:26 -05:00
parent 2653ddc2e3
commit 6244359a80
10 changed files with 225 additions and 136 deletions

View file

@ -126,7 +126,7 @@ fields.</i>
</p> </p>
<hr width="100%"> <hr width="100%">
<h2><a name="Testing"></a>Testing Your Own localWxConfig.py File</h2> <h2><a name="Testing"></a>Testing Your Own localWxConfig.py File</h2>
The recommended way to test your localConfigWx.py file is to start EDEX The recommended way to test your localWxConfig.py file is to start EDEX
while running a tail command on the /awips2/edex/logs/edex-request-<i>date</i>.log. while running a tail command on the /awips2/edex/logs/edex-request-<i>date</i>.log.
If no exceptions result from the changes, you should be fine to proceed into GFE for If no exceptions result from the changes, you should be fine to proceed into GFE for
further testing. further testing.

View file

@ -271,7 +271,7 @@ public class GageTableDlg extends JFrame {
setLocation(xCoord - (bounds.width / 2), yCoord - (bounds.height / 2)); setLocation(xCoord - (bounds.width / 2), yCoord - (bounds.height / 2));
setVisible(true); setVisible(true);
tableModel.refreshTable(); // tableModel.refreshTable();
displayManager.setGageTableDlgReference(this); displayManager.setGageTableDlgReference(this);
} }
@ -766,7 +766,8 @@ public class GageTableDlg extends JFrame {
GageTableSettings settings = null; GageTableSettings settings = null;
if (f.exists()) { if (f.exists()) {
settings = JAXB.unmarshal(path, GageTableSettings.class); // settings = JAXB.unmarshal(path, GageTableSettings.class);
settings = JAXB.unmarshal(f, GageTableSettings.class);
} else { } else {
settings = getDefaultSettings(); settings = getDefaultSettings();
} }
@ -816,7 +817,7 @@ public class GageTableDlg extends JFrame {
dataManager.setColumnDataList(columnDataList); dataManager.setColumnDataList(columnDataList);
dataManager.setColumnWidthMap(columnWidthMap); dataManager.setColumnWidthMap(columnWidthMap);
} catch (Exception e) { } catch (Exception e) {
// e.printStackTrace(); e.printStackTrace();
System.out.println("MPE Settings file not found"); System.out.println("MPE Settings file not found");
} }
} }

View file

@ -118,6 +118,8 @@ import com.vividsolutions.jts.geom.Polygon;
* Apr 16, 2012 #14515 Qinglu Lin Added return at the beginning of changeTemplate() * Apr 16, 2012 #14515 Qinglu Lin Added return at the beginning of changeTemplate()
* if the newly selected product is same as current one. * if the newly selected product is same as current one.
* Jul 10, 2012 #15099 Qinglu Lin Add updatePolygon() and apply it in xxxSelected methods. * Jul 10, 2012 #15099 Qinglu Lin Add updatePolygon() and apply it in xxxSelected methods.
* Jul 26, 2012 #15227 Qinglu Lin Added removeDuplicateVertices(), removeOverlaidSegments(),
* adjustLatLon(), etc.
* *
* </pre> * </pre>
* *
@ -150,6 +152,9 @@ public class WarngenDialog extends CaveSWTDialog implements
/** "Cancel" button text */ /** "Cancel" button text */
private static final String CLOSE_BUTTON_LABEL = "Close"; private static final String CLOSE_BUTTON_LABEL = "Close";
private static final double MIN_LATLON_DIFF = 1.0E-5;
private static final double MIN_DIFF = 1.0E-8;
private ArrayList<String> mainProducts; private ArrayList<String> mainProducts;
private Map<String, String> otherProducts; private Map<String, String> otherProducts;
@ -2093,13 +2098,42 @@ public class WarngenDialog extends CaveSWTDialog implements
*/ */
private boolean updatePolygon(AbstractWarningRecord oldWarning) { private boolean updatePolygon(AbstractWarningRecord oldWarning) {
Geometry geo = oldWarning.getGeometry(); Geometry geo = oldWarning.getGeometry();
Coordinate[] coords = geo.getCoordinates(); Coordinate[] coords0 = geo.getCoordinates();
java.util.List<Coordinate> points = new ArrayList<Coordinate>(Arrays.asList(coords));
GeometryFactory gf = new GeometryFactory(); GeometryFactory gf = new GeometryFactory();
PolygonUtil.truncate(points, 2);
// Duplicate vertices (BOX.SV.W.0049, July 2012) makes removeOverlaidSegments
// not working. So, remove the duplicate vertex first.
Coordinate[] coords = removeDuplicateVertices(coords0);
if (coords.length != coords0.length) {
java.util.List<Coordinate> points = new ArrayList<Coordinate>(Arrays.asList(coords));
Polygon rval = gf.createPolygon(gf.createLinearRing(points
.toArray(new Coordinate[points.size()])), null);
oldWarning.setGeometry(rval);
}
int size = coords.length;
boolean adjusted = false;
if (size > 3) {
Coordinate[] coords2 = new Coordinate[size+3];
for (int i=0; i<size; i++) {
coords2[i] = coords[i];
}
coords2[size] = coords[1];
coords2[size+1] = coords[2];
coords2[size+2] = coords[3];
adjusted = removeOverlaidSegments(coords2);
coords = Arrays.copyOf(coords2,size);
coords[0] = coords2[size-1];
}
java.util.List<Coordinate> points = new ArrayList<Coordinate>(Arrays.asList(coords));
Polygon rval = gf.createPolygon(gf.createLinearRing(points Polygon rval = gf.createPolygon(gf.createLinearRing(points
.toArray(new Coordinate[points.size()])), null); .toArray(new Coordinate[points.size()])), null);
if (adjusted)
oldWarning.setGeometry(rval);
boolean invalidPolyFlag = false; boolean invalidPolyFlag = false;
if (rval.isValid() == false) { if (rval.isValid() == false) {
@ -2116,4 +2150,148 @@ public class WarngenDialog extends CaveSWTDialog implements
} }
return false; return false;
} }
/**
* Remove duplicate vertices
*/
private Coordinate[] removeDuplicateVertices(Coordinate[] coords) {
int size = coords.length;
java.util.List<Coordinate> coords2 = new ArrayList<Coordinate>();
coords2.add(coords[0]);
for (int i=1; i<size; i++)
if (Math.abs(coords[i].x-coords[i-1].x) > MIN_LATLON_DIFF ||
Math.abs(coords[i].y-coords[i-1].y) > MIN_LATLON_DIFF)
coords2.add(coords[i]);
size = coords2.size();
Coordinate[] coords3 = coords2.toArray(new Coordinate[size]);
return coords3;
}
/**
* Remove overlaid segments
*/
private boolean removeOverlaidSegments(Coordinate[] coords) {
double diffx1, diffx2, diffy1, diffy2;
double ratio1, ratio2;
boolean adjusted = false;
for (int i=2; i<coords.length-2; i++) {
diffx1 = coords[i-1].x - coords[i].x;
if (Math.abs(diffx1) > MIN_LATLON_DIFF) {
ratio1 = (coords[i-1].y-coords[i].y)/diffx1;
diffx2 = coords[i].x - coords[i+1].x;
if (Math.abs(diffx2) > MIN_LATLON_DIFF) {
ratio2 = (coords[i].y-coords[i+1].y)/diffx2;
if (Math.abs(ratio1-ratio2) < MIN_DIFF) {
if (diffx1 > 0.0 && diffx2 > 0.0 ||
diffx1 < 0.0 && diffx2 < 0.0) {
// three vertices on a straight line. Not overlaid.
} else {
// two segments overlaid
adjustLatLon('y',coords,i);
adjusted = true;
}
}
} else {
continue;
}
} else {
diffy1 = coords[i-1].y - coords[i].y;
ratio1 = (coords[i-1].x-coords[i].x)/diffy1;
diffy2 = coords[i].y - coords[i+1].y;
if (Math.abs(diffy2) > MIN_LATLON_DIFF) {
ratio2 = (coords[i].x-coords[i+1].x)/diffy2;
if (Math.abs(ratio1-ratio2) < MIN_DIFF) {
if (diffy1 > 0.0 && diffy2 > 0.0 ||
diffy1 < 0.0 && diffy2 < 0.0) {
// three vertices on a straight line. Not overlaid.
} else {
// two segments overlaid
adjustLatLon('x',coords,i);
adjusted = true;
}
}
} else {
continue;
}
}
}
return adjusted;
}
/**
* Increase or decrease latitude or longitude slightly
*/
private void adjustLatLon(char direction, Coordinate[] coords, int i) {
// Empirical value.
// 1.0E3 not working for horizontal rectangle cases
double adjustedValue = 5.0E-3;
int n = coords.length;
int factor;
if (direction == 'x') {
// adjust longitude
double diffx = coords[i-2].x - coords[i-1].x;
if (Math.abs(diffx) > MIN_LATLON_DIFF) {
if (coords[i-1].y > coords[i].y) {
factor = 1;
} else
factor = -1;
if (diffx < 0.0) {
coords[i+1].x -= factor*adjustedValue;
} else {
coords[i-1].x += factor*adjustedValue;
}
if (i == n-3)
coords[0].x = coords[i-1].x;
} else {
diffx = coords[i+2].x - coords[i+1].x;
if (Math.abs(diffx) > MIN_LATLON_DIFF) {
if (coords[i+1].y > coords[i].y) {
factor = -1;
} else
factor = 1;
if (diffx < 0.0) {
coords[i-1].x -= factor*adjustedValue;
} else {
coords[i+1].x += factor*adjustedValue;
}
if (i == n-3)
coords[0].x = coords[i-1].x;
}
}
} else {
// adjust latitude
double diffy = coords[i-2].y - coords[i-1].y;
if (Math.abs(diffy) > MIN_LATLON_DIFF) {
if (coords[i-1].x > coords[i].x) {
factor = -1;
} else
factor = 1;
if (diffy > 0.0) {
coords[i+1].y -= factor*adjustedValue;
} else {
coords[i-1].y += factor*adjustedValue;
}
if (i == n-3)
coords[0].y = coords[i-1].y;
}
else {
diffy = coords[i+2].y - coords[i+1].y;
if (Math.abs(diffy) > MIN_LATLON_DIFF) {
if (coords[i+1].x > coords[i].x) {
factor = -1;
} else
factor = 1;
if (diffy < 0.0) {
coords[i-1].y -= factor*adjustedValue;
} else {
coords[i+1].y += factor*adjustedValue;
}
if (i == n-3)
coords[0].y = coords[i-1].y;
}
}
}
}
} }

View file

@ -802,6 +802,17 @@ public class GFEDao extends DefaultPluginDao {
3600 * 1000)); 3600 * 1000));
} }
if ((!uTimeList.isEmpty()) && (!vTimeList.isEmpty())
& (uTimeList.size() == vTimeList.size())) {
for (TimeRange tr : uTimeList) {
if (vTimeList.contains(tr)) {
timeList.add(new TimeRange(tr.getStart(), tr.getStart()));
}
}
return timeList;
}
ParmID sWindId = new ParmID(id.toString().replace("wind", "ws")); ParmID sWindId = new ParmID(id.toString().replace("wind", "ws"));
List<TimeRange> sTimeList = new ArrayList<TimeRange>(); List<TimeRange> sTimeList = new ArrayList<TimeRange>();
results = executeD2DParmQuery(sWindId); results = executeD2DParmQuery(sWindId);
@ -818,30 +829,16 @@ public class GFEDao extends DefaultPluginDao {
3600 * 1000)); 3600 * 1000));
} }
for (TimeRange tr : uTimeList) { if ((!sTimeList.isEmpty()) && (!dTimeList.isEmpty())
if (vTimeList.contains(tr)) { & (sTimeList.size() == dTimeList.size())) {
timeList.add(new TimeRange(tr.getStart(), tr.getStart())); for (TimeRange tr : sTimeList) {
if (dTimeList.contains(tr)) {
timeList.add(new TimeRange(tr.getStart(), tr.getStart()));
}
} }
}
if (uTimeList.size() != vTimeList.size()) { return timeList;
if (logger.isDebugEnabled()) {
logger.debug("Wind data is incomplete for " + id.toString());
}
} }
for (TimeRange tr : sTimeList) {
if (!timeList.contains(tr) && dTimeList.contains(tr)) {
timeList.add(new TimeRange(tr.getStart(), tr.getStart()));
}
}
if (sTimeList.size() != dTimeList.size()) {
if (logger.isDebugEnabled()) {
logger.debug("Wind data is incomplete for " + id.toString());
}
}
} else { } else {
List<DataTime> results = executeD2DParmQuery(id); List<DataTime> results = executeD2DParmQuery(id);
for (DataTime o : results) { for (DataTime o : results) {

View file

@ -438,7 +438,7 @@ class IscMosaic:
# rename weather element # rename weather element
if self.__renameWE: if self.__renameWE:
siteID = getattr(vars[0], "siteID") siteID = str(getattr(vars[0], "siteID"))
incomingOfficeType = IFPServerConfigManager.getServerConfig(self.__mysite).getOfficeType(siteID) incomingOfficeType = IFPServerConfigManager.getServerConfig(self.__mysite).getOfficeType(siteID)
if incomingOfficeType != self.__myOfficeType: if incomingOfficeType != self.__myOfficeType:
idx = parmName.rfind("_") idx = parmName.rfind("_")
@ -510,13 +510,13 @@ class IscMosaic:
numFailed = 0 numFailed = 0
while retryAttempt != retries: while retryAttempt != retries:
LogStream.logDebug("iscMosaic: Attempting to acquire cluster lock for:",parmName) self.logDebug("iscMosaic: Attempting to acquire cluster lock for:",parmName)
startTime = time.time() startTime = time.time()
clusterLock = ClusterLockUtils.lock("ISC Write Lock",parmName , 120000, True) clusterLock = ClusterLockUtils.lock("ISC Write Lock",parmName , 120000, True)
elapsedTime = (time.time() - startTime)*1000 elapsedTime = (time.time() - startTime)*1000
LogStream.logDebug("iscMosaic: Request for",parmName+" took",elapsedTime,"ms") self.logDebug("iscMosaic: Request for",parmName+" took",elapsedTime,"ms")
if str(clusterLock.getLockState()) == "SUCCESSFUL": if str(clusterLock.getLockState()) == "SUCCESSFUL":
LogStream.logDebug("iscMosaic: Successfully acquired cluster lock for:",parmName) self.logDebug("iscMosaic: Successfully acquired cluster lock for:",parmName)
try: try:
# open up the ifpServer weather element # open up the ifpServer weather element
self.__dbwe = self.__db.getItem(parmName,ISC_USER) self.__dbwe = self.__db.getItem(parmName,ISC_USER)
@ -531,7 +531,7 @@ class IscMosaic:
gridType = getattr(vars[0], "gridType") gridType = getattr(vars[0], "gridType")
minV = self.__dbwe.getGpi().getMinValue() minV = self.__dbwe.getGpi().getMinValue()
# compute the site mask # compute the site mask
self.__siteID = getattr(vars[0], "siteID") self.__siteID = str(getattr(vars[0], "siteID"))
if self.__areaMask is None: if self.__areaMask is None:
self.__areaMask = self.__computeAreaMask().getGrid().__numpy__[0] self.__areaMask = self.__computeAreaMask().getGrid().__numpy__[0]
@ -631,23 +631,23 @@ class IscMosaic:
retryAttempt = retries retryAttempt = retries
except: except:
retryAttempt = retryAttempt + 1 retryAttempt = retryAttempt + 1
LogStream.logProblem("Error saving ISC data. Retrying (", retryAttempt, "/", retries, ")",traceback.format_exc()) self.logProblem("Error saving ISC data. Retrying (", retryAttempt, "/", retries, ")",traceback.format_exc())
time.sleep(1) time.sleep(1)
finally: finally:
LogStream.logDebug("iscMosaic: Attempting to release cluster lock for:",parmName) self.logDebug("iscMosaic: Attempting to release cluster lock for:",parmName)
ClusterLockUtils.unlock(clusterLock, False) ClusterLockUtils.unlock(clusterLock, False)
LogStream.logDebug("iscMosaic: Successfully released cluster lock for:",parmName) self.logDebug("iscMosaic: Successfully released cluster lock for:",parmName)
elif str(clusterLock.getLockState()) == "OLD": elif str(clusterLock.getLockState()) == "OLD":
retryAttempt = retryAttempt + 1 retryAttempt = retryAttempt + 1
# Clear old lock to retry # Clear old lock to retry
LogStream.logDebug("Old lock retrieved for ISC write. Attempting to renew lock") self.logDebug("Old lock retrieved for ISC write. Attempting to renew lock")
ClusterLockUtils.unlock(clusterLock, False) ClusterLockUtils.unlock(clusterLock, False)
elif str(clusterLock.getLockState()) == "FAILED": elif str(clusterLock.getLockState()) == "FAILED":
retryAttempt = retryAttempt + 1 retryAttempt = retryAttempt + 1
if retryAttempt == retries: if retryAttempt == retries:
LogStream.logProblem("Cluster lock could not be established for ",self._we.getParmid(),"at time range",TimeRange(tr[0],tr[1]),"Data was not saved.") self.logProblem("Cluster lock could not be established for ",self._we.getParmid(),"at time range",TimeRange(tr[0],tr[1]),"Data was not saved.")
else: else:
LogStream.logProblem("Cluster lock request failed for ISC write.", retries, "Retrying (", retryAttempt, "/", retries, ")") self.logProblem("Cluster lock request failed for ISC write.", retries, "Retrying (", retryAttempt, "/", retries, ")")
time.sleep(1) time.sleep(1)
return (pName, totalTimeRange, len(inTimesProc), numFailed) return (pName, totalTimeRange, len(inTimesProc), numFailed)
@ -1096,6 +1096,7 @@ class IscMosaic:
gridType = gpi.getGridType().toString() gridType = gpi.getGridType().toString()
gs = self.__decodeGridSlice(pid, grid, TimeRange()) gs = self.__decodeGridSlice(pid, grid, TimeRange())
pd = self.__decodeProj(inGeoDict) pd = self.__decodeProj(inGeoDict)
fill = inFillV fill = inFillV
ifill = int(inFillV) ifill = int(inFillV)
@ -1342,7 +1343,7 @@ class IscMosaic:
# get the list of discrete keys for this parameter that are allowed # get the list of discrete keys for this parameter that are allowed
dd = self.__disDef.keys(parmName) dd = self.__disDef.keys(parmName)
if dd.size() == 0: if dd.size() == 0:
LogStream.logProblem("Unable to validate keys for ", self.logProblem("Unable to validate keys for ",
parmName, " - no def in DiscreteDefinition") parmName, " - no def in DiscreteDefinition")
return grid return grid
@ -1393,7 +1394,7 @@ class IscMosaic:
keyentry = "^".join(eachKey) #join back to string keyentry = "^".join(eachKey) #join back to string
if len(changedReasons): if len(changedReasons):
LogStream.logProblem(smsg, self.logProblem(smsg,
"from [" + oldEntry + "] to [" + keyentry + "]", "from [" + oldEntry + "] to [" + keyentry + "]",
"(" + ",".join(changedReasons) + ")") "(" + ",".join(changedReasons) + ")")
msg = self.__siteID + " " + parmName + " " + \ msg = self.__siteID + " " + parmName + " " + \
@ -1495,7 +1496,7 @@ class IscMosaic:
# report any changes # report any changes
if len(changedReasons): if len(changedReasons):
LogStream.logProblem(smsg, self.logProblem(smsg,
" from [" + oldEntry + "] to [" + keyentry + "]", " from [" + oldEntry + "] to [" + keyentry + "]",
"(" + ",".join(changedReasons) + ")") "(" + ",".join(changedReasons) + ")")
msg = self.__siteID + " " + parmName + " " + \ msg = self.__siteID + " " + parmName + " " + \

View file

@ -58,7 +58,7 @@ mkdir -p $commonDest/site
log_msg 25 log_msg 25
log_msg Making temporary cave configuration directories log_msg Making temporary cave configuration directories
mkdir -p $caveDest/site/colormaps mkdir -p $caveDest/site
log_msg 30 log_msg 30
# Copies the localization information to the staging area # Copies the localization information to the staging area
@ -78,8 +78,8 @@ log_msg Copying cave site configuration for site ${CAPS_SITE} to temporary direc
cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/gfe $caveDest/site cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/gfe $caveDest/site
log_msg 70 log_msg 70
log_msg Copying cave site configuration for site ${CAPS_SITE} to temporary directory... log_msg Copying cave site colormaps configuration for site ${CAPS_SITE} to temporary directory...
cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/colormaps/GFE $caveDest/site/colormaps cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/colormaps $caveDest/site
log_msg 80 log_msg 80
# Tar up everything. # Tar up everything.

View file

@ -132,7 +132,7 @@ cp -r GFEconfig/edex_static/site/gfe ${edex_site_dest}
log_msg 80 log_msg 80
cp -r GFEconfig/edex_static/site/smartinit ${edex_site_si_dest} cp -r GFEconfig/edex_static/site/smartinit ${edex_site_si_dest}
log_msg 90 log_msg 90
cp -r GFEconfig/cave_static/site ${cave_site_dest} cp -r GFEconfig/cave_static/site/* ${cave_site_dest}
log_msg 93 log_msg 93
log_msg "Files successfully copied!" log_msg "Files successfully copied!"

View file

@ -8,7 +8,7 @@
Name: awips2-python-h5py Name: awips2-python-h5py
Summary: AWIPS II Python h5py Distribution - 64 Bit Summary: AWIPS II Python h5py Distribution - 64 Bit
Version: 1.3.0 Version: 1.3.0
Release: 1 Release: 2
Group: AWIPSII Group: AWIPSII
BuildRoot: %{_build_root} BuildRoot: %{_build_root}
URL: N/A URL: N/A

View file

@ -76,6 +76,7 @@
<packagereq type="default">awips2-python-pygtk</packagereq> <packagereq type="default">awips2-python-pygtk</packagereq>
<packagereq type="default">awips2-python-pycairo</packagereq> <packagereq type="default">awips2-python-pycairo</packagereq>
<packagereq type="default">awips2-localapps-environment</packagereq> <packagereq type="default">awips2-localapps-environment</packagereq>
<packagereq type="default">awips2-data.gfe</packagereq>
</packagelist> </packagelist>
</group> </group>

View file

@ -1,89 +0,0 @@
#
# AWIPS II Python pupynere Site-Package Spec File
#
Name: awips2-python-pupynere
Summary: AWIPS II Python pupynere Site-Package
Version: 1.0.15
Release: 1
Group: AWIPSII
BuildRoot: /tmp
URL: N/A
License: N/A
Distribution: N/A
Vendor: Raytheon
Packager: Bryan Kowal
AutoReq: no
requires: awips2-python
requires: awips2-python-numpy
provides: awips2-python-pupynere
%define _docdir python.pupynere
%description
AWIPS II Python pupynere Site-Package - Installs the AWIPS II Python
pupynere Site-Package in the Python installation.
# Turn off the brp-python-bytecompile script
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
%prep
# Verify That The User Has Specified A BuildRoot.
if [ "${RPM_BUILD_ROOT}" = "/tmp" ]
then
echo "An Actual BuildRoot Must Be Specified. Use The --buildroot Parameter."
echo "Unable To Continue ... Terminating"
exit 1
fi
mkdir -p ${RPM_BUILD_ROOT}
%build
SITE_PACKAGE_SRC_DIR="pythonPackages/pupynere"
PREREQ_PACKAGE_SRC_DIR="pythonPackages/setuptools"
# Build and install the pre-req setuptools
cd ${WORKSPACE_DIR}/${PREREQ_PACKAGE_SRC_DIR}
${PYTHON_EXE} setup.py build
${PYTHON_EXE} setup.py install
# Build pupynere
cd ${WORKSPACE_DIR}/${SITE_PACKAGE_SRC_DIR}
${PYTHON_EXE} setup.py build
%install
SITE_PACKAGE_SRC_DIR="pythonPackages/pupynere"
cd ${WORKSPACE_DIR}/${SITE_PACKAGE_SRC_DIR}
${PYTHON_EXE} setup.py install --root=${RPM_BUILD_ROOT} \
--prefix=/awips2/python
%pre
if [ -d /usr/share/doc/awips2/%{_docdir} ]; then
rm -rf /usr/share/doc/awips2/%{_docdir}
fi
PYTHON_INSTALL="/awips2/python"
echo -e "\e[1;34m--------------------------------------------------------------------------------\e[m"
echo -e "\e[1;34m\| Installing the AWIPS II Python pupynere Site-Package...\e[m"
echo -e "\e[1;34m--------------------------------------------------------------------------------\e[m"
echo -e "\e[1;34m Python Install Root = ${PYTHON_INSTALL}\e[m"
%post
PYTHON_INSTALL="/awips2/python"
echo -e "\e[1;32m--------------------------------------------------------------------------------\e[m"
echo -e "\e[1;32m\| AWIPS II Python pupynere Site-Package Installation - COMPLETE\e[m"
echo -e "\e[1;32m--------------------------------------------------------------------------------\e[m"
%preun
%postun
echo -e "\e[1;34m--------------------------------------------------------------------------------\e[m"
echo -e "\e[1;34m\| The AWIPS II Python pupynere Site-Package Has Been Successfully Removed\e[m"
echo -e "\e[1;34m--------------------------------------------------------------------------------\e[m"
echo ""
%files
%defattr(644,awips,fxalpha,755)
/awips2/python/lib/python2.7/site-packages/*