From b5e8fee24d5daa955f761030a3916644e1768c68 Mon Sep 17 00:00:00 2001 From: Steve Harris Date: Mon, 6 Aug 2012 09:34:26 -0500 Subject: [PATCH] 12.8.1-10 baseline Former-commit-id: 7c799ab7b99993c77b6568529b46aaf13d01300b --- .../help/localWxConfig.html | 2 +- .../ui/dialogs/gagetable/GageTableDlg.java | 7 +- .../viz/warngen/gui/WarngenDialog.java | 184 +++++++++++++++++- .../edex/plugin/gfe/db/dao/GFEDao.java | 39 ++-- .../edex_static/base/gfe/isc/iscMosaic.py | 29 +-- .../scripts/export_configuration | 6 +- .../ServiceBackup/scripts/proc_receive_config | 2 +- rpms/awips2.64/Installer.h5py/component.spec | 2 +- rpms/common/yum/arch.x86/comps.xml | 1 + .../Installer.pupynere/component.spec_ORIG | 89 --------- 10 files changed, 225 insertions(+), 136 deletions(-) delete mode 100644 rpms/python.site-packages/Installer.pupynere/component.spec_ORIG diff --git a/cave/com.raytheon.viz.gfe/help/localWxConfig.html b/cave/com.raytheon.viz.gfe/help/localWxConfig.html index 7d3de91ed6..0e01225ffd 100644 --- a/cave/com.raytheon.viz.gfe/help/localWxConfig.html +++ b/cave/com.raytheon.viz.gfe/help/localWxConfig.html @@ -126,7 +126,7 @@ fields.


Testing Your Own localWxConfig.py File

-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-date.log. If no exceptions result from the changes, you should be fine to proceed into GFE for further testing. diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/gagetable/GageTableDlg.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/gagetable/GageTableDlg.java index e41d6e5084..c4f37e91d2 100644 --- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/gagetable/GageTableDlg.java +++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/gagetable/GageTableDlg.java @@ -271,7 +271,7 @@ public class GageTableDlg extends JFrame { setLocation(xCoord - (bounds.width / 2), yCoord - (bounds.height / 2)); setVisible(true); - tableModel.refreshTable(); +// tableModel.refreshTable(); displayManager.setGageTableDlgReference(this); } @@ -766,7 +766,8 @@ public class GageTableDlg extends JFrame { GageTableSettings settings = null; if (f.exists()) { - settings = JAXB.unmarshal(path, GageTableSettings.class); +// settings = JAXB.unmarshal(path, GageTableSettings.class); + settings = JAXB.unmarshal(f, GageTableSettings.class); } else { settings = getDefaultSettings(); } @@ -816,7 +817,7 @@ public class GageTableDlg extends JFrame { dataManager.setColumnDataList(columnDataList); dataManager.setColumnWidthMap(columnWidthMap); } catch (Exception e) { - // e.printStackTrace(); + e.printStackTrace(); System.out.println("MPE Settings file not found"); } } diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java index b48e7ba2f4..d357d3ae62 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java @@ -118,6 +118,8 @@ import com.vividsolutions.jts.geom.Polygon; * Apr 16, 2012 #14515 Qinglu Lin Added return at the beginning of changeTemplate() * 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 26, 2012 #15227 Qinglu Lin Added removeDuplicateVertices(), removeOverlaidSegments(), + * adjustLatLon(), etc. * * * @@ -150,6 +152,9 @@ public class WarngenDialog extends CaveSWTDialog implements /** "Cancel" button text */ 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 mainProducts; private Map otherProducts; @@ -2093,13 +2098,42 @@ public class WarngenDialog extends CaveSWTDialog implements */ private boolean updatePolygon(AbstractWarningRecord oldWarning) { Geometry geo = oldWarning.getGeometry(); - Coordinate[] coords = geo.getCoordinates(); - java.util.List points = new ArrayList(Arrays.asList(coords)); + Coordinate[] coords0 = geo.getCoordinates(); 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 points = new ArrayList(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 points = new ArrayList(Arrays.asList(coords)); Polygon rval = gf.createPolygon(gf.createLinearRing(points .toArray(new Coordinate[points.size()])), null); + + if (adjusted) + oldWarning.setGeometry(rval); boolean invalidPolyFlag = false; if (rval.isValid() == false) { @@ -2116,4 +2150,148 @@ public class WarngenDialog extends CaveSWTDialog implements } return false; } + + /** + * Remove duplicate vertices + */ + private Coordinate[] removeDuplicateVertices(Coordinate[] coords) { + int size = coords.length; + java.util.List coords2 = new ArrayList(); + coords2.add(coords[0]); + for (int i=1; i 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 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; + } + } + } + } + } diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java index 9e2cd51240..fce65b0152 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java @@ -802,6 +802,17 @@ public class GFEDao extends DefaultPluginDao { 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")); List sTimeList = new ArrayList(); results = executeD2DParmQuery(sWindId); @@ -818,30 +829,16 @@ public class GFEDao extends DefaultPluginDao { 3600 * 1000)); } - for (TimeRange tr : uTimeList) { - if (vTimeList.contains(tr)) { - timeList.add(new TimeRange(tr.getStart(), tr.getStart())); + if ((!sTimeList.isEmpty()) && (!dTimeList.isEmpty()) + & (sTimeList.size() == dTimeList.size())) { + for (TimeRange tr : sTimeList) { + if (dTimeList.contains(tr)) { + timeList.add(new TimeRange(tr.getStart(), tr.getStart())); + } } - } - if (uTimeList.size() != vTimeList.size()) { - if (logger.isDebugEnabled()) { - logger.debug("Wind data is incomplete for " + id.toString()); - } + return timeList; } - - 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 { List results = executeD2DParmQuery(id); for (DataTime o : results) { diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py index 86351b0109..1bf9b782f7 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py @@ -438,7 +438,7 @@ class IscMosaic: # rename weather element if self.__renameWE: - siteID = getattr(vars[0], "siteID") + siteID = str(getattr(vars[0], "siteID")) incomingOfficeType = IFPServerConfigManager.getServerConfig(self.__mysite).getOfficeType(siteID) if incomingOfficeType != self.__myOfficeType: idx = parmName.rfind("_") @@ -510,13 +510,13 @@ class IscMosaic: numFailed = 0 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() clusterLock = ClusterLockUtils.lock("ISC Write Lock",parmName , 120000, True) 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": - LogStream.logDebug("iscMosaic: Successfully acquired cluster lock for:",parmName) + self.logDebug("iscMosaic: Successfully acquired cluster lock for:",parmName) try: # open up the ifpServer weather element self.__dbwe = self.__db.getItem(parmName,ISC_USER) @@ -531,7 +531,7 @@ class IscMosaic: gridType = getattr(vars[0], "gridType") minV = self.__dbwe.getGpi().getMinValue() # compute the site mask - self.__siteID = getattr(vars[0], "siteID") + self.__siteID = str(getattr(vars[0], "siteID")) if self.__areaMask is None: self.__areaMask = self.__computeAreaMask().getGrid().__numpy__[0] @@ -631,23 +631,23 @@ class IscMosaic: retryAttempt = retries except: 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) 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) - LogStream.logDebug("iscMosaic: Successfully released cluster lock for:",parmName) + self.logDebug("iscMosaic: Successfully released cluster lock for:",parmName) elif str(clusterLock.getLockState()) == "OLD": retryAttempt = retryAttempt + 1 # 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) elif str(clusterLock.getLockState()) == "FAILED": retryAttempt = retryAttempt + 1 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: - 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) return (pName, totalTimeRange, len(inTimesProc), numFailed) @@ -1096,6 +1096,7 @@ class IscMosaic: gridType = gpi.getGridType().toString() gs = self.__decodeGridSlice(pid, grid, TimeRange()) + pd = self.__decodeProj(inGeoDict) fill = inFillV ifill = int(inFillV) @@ -1342,7 +1343,7 @@ class IscMosaic: # get the list of discrete keys for this parameter that are allowed dd = self.__disDef.keys(parmName) if dd.size() == 0: - LogStream.logProblem("Unable to validate keys for ", + self.logProblem("Unable to validate keys for ", parmName, " - no def in DiscreteDefinition") return grid @@ -1393,7 +1394,7 @@ class IscMosaic: keyentry = "^".join(eachKey) #join back to string if len(changedReasons): - LogStream.logProblem(smsg, + self.logProblem(smsg, "from [" + oldEntry + "] to [" + keyentry + "]", "(" + ",".join(changedReasons) + ")") msg = self.__siteID + " " + parmName + " " + \ @@ -1495,7 +1496,7 @@ class IscMosaic: # report any changes if len(changedReasons): - LogStream.logProblem(smsg, + self.logProblem(smsg, " from [" + oldEntry + "] to [" + keyentry + "]", "(" + ",".join(changedReasons) + ")") msg = self.__siteID + " " + parmName + " " + \ diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration index d38bc35396..35e7d3d589 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/export_configuration @@ -58,7 +58,7 @@ mkdir -p $commonDest/site log_msg 25 log_msg Making temporary cave configuration directories -mkdir -p $caveDest/site/colormaps +mkdir -p $caveDest/site log_msg 30 # 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 log_msg 70 -log_msg Copying cave site configuration for site ${CAPS_SITE} to temporary directory... -cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/colormaps/GFE $caveDest/site/colormaps +log_msg Copying cave site colormaps configuration for site ${CAPS_SITE} to temporary directory... +cp -r ${LOCALIZATION_PATH}/cave_static/site/${CAPS_SITE}/colormaps $caveDest/site log_msg 80 # Tar up everything. diff --git a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config index d82567bcdc..42dbc13678 100644 --- a/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config +++ b/edexOsgi/com.raytheon.uf.tools.gfesuite.servicebackup/svcBackup/ServiceBackup/scripts/proc_receive_config @@ -132,7 +132,7 @@ cp -r GFEconfig/edex_static/site/gfe ${edex_site_dest} log_msg 80 cp -r GFEconfig/edex_static/site/smartinit ${edex_site_si_dest} 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 "Files successfully copied!" diff --git a/rpms/awips2.64/Installer.h5py/component.spec b/rpms/awips2.64/Installer.h5py/component.spec index 601e5df45b..7fd5310b23 100644 --- a/rpms/awips2.64/Installer.h5py/component.spec +++ b/rpms/awips2.64/Installer.h5py/component.spec @@ -8,7 +8,7 @@ Name: awips2-python-h5py Summary: AWIPS II Python h5py Distribution - 64 Bit Version: 1.3.0 -Release: 1 +Release: 2 Group: AWIPSII BuildRoot: %{_build_root} URL: N/A diff --git a/rpms/common/yum/arch.x86/comps.xml b/rpms/common/yum/arch.x86/comps.xml index c330baa594..44d31e0e82 100644 --- a/rpms/common/yum/arch.x86/comps.xml +++ b/rpms/common/yum/arch.x86/comps.xml @@ -76,6 +76,7 @@ awips2-python-pygtk awips2-python-pycairo awips2-localapps-environment + awips2-data.gfe diff --git a/rpms/python.site-packages/Installer.pupynere/component.spec_ORIG b/rpms/python.site-packages/Installer.pupynere/component.spec_ORIG deleted file mode 100644 index 0a751cf91f..0000000000 --- a/rpms/python.site-packages/Installer.pupynere/component.spec_ORIG +++ /dev/null @@ -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/* \ No newline at end of file