[python-pyraf] 01/02: Upstream version 2.1.5
Ole Streicher
olebole-guest at moszumanska.debian.org
Wed Nov 27 16:17:09 UTC 2013
This is an automated email from the git hooks/post-receive script.
olebole-guest pushed a commit to branch debian
in repository python-pyraf.
commit 001b3df9285b43c1f033e98d6a368dc579f024c6
Author: Ole Streicher <debian at liska.ath.cx>
Date: Wed Nov 27 17:15:45 2013 +0100
Upstream version 2.1.5
---
PKG-INFO | 2 +-
lib/pyraf.egg-info/PKG-INFO | 2 +-
lib/pyraf.egg-info/SOURCES.txt | 1 +
lib/pyraf/irafpar.py | 81 +++++++++++++++------
lib/pyraf/version.py | 10 +--
lib/pyraf/version.py.orig1 | 6 +-
lib/pyraf/version.py.orig2 | 6 +-
lib/pyraf/wutil.py | 50 ++++++++-----
lib/pyraf_setup.py | 11 ---
lib/pyraf_setup.pyc | Bin 3635 -> 3295 bytes
required_pkgs/d2to1/.authors | 1 +
required_pkgs/d2to1/CHANGES.rst | 14 +++-
required_pkgs/d2to1/d2to1/util.py | 2 +-
required_pkgs/d2to1/d2to1/zestreleaser.py | 26 ++++---
required_pkgs/d2to1/setup.cfg | 2 +-
required_pkgs/d2to1/tox.ini | 11 +++
required_pkgs/stsci.distutils/CHANGES.txt | 18 ++++-
required_pkgs/stsci.distutils/setup.cfg | 2 +-
.../stsci.distutils/stsci/distutils/astutils.py | 44 ++++++-----
.../stsci.distutils/stsci/distutils/hooks.py | 3 +-
.../stsci/distutils/tests/test_hooks.py | 6 +-
.../stsci.tools/lib/stsci/tools/capable.py | 35 +++++++--
setup.cfg | 7 +-
23 files changed, 229 insertions(+), 111 deletions(-)
diff --git a/PKG-INFO b/PKG-INFO
index 2c2820d..53a3460 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: pyraf
-Version: 2.1.3
+Version: 2.1.5
Summary: Provides a Pythonic interface to IRAF that can be used in place of
the existing IRAF CL
Home-page: http://www.stsci.edu/resources/software_hardware/pyraf
diff --git a/lib/pyraf.egg-info/PKG-INFO b/lib/pyraf.egg-info/PKG-INFO
index 2c2820d..53a3460 100644
--- a/lib/pyraf.egg-info/PKG-INFO
+++ b/lib/pyraf.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: pyraf
-Version: 2.1.3
+Version: 2.1.5
Summary: Provides a Pythonic interface to IRAF that can be used in place of
the existing IRAF CL
Home-page: http://www.stsci.edu/resources/software_hardware/pyraf
diff --git a/lib/pyraf.egg-info/SOURCES.txt b/lib/pyraf.egg-info/SOURCES.txt
index 776a6e3..1ecb254 100644
--- a/lib/pyraf.egg-info/SOURCES.txt
+++ b/lib/pyraf.egg-info/SOURCES.txt
@@ -750,6 +750,7 @@ required_pkgs/d2to1/README.rst
required_pkgs/d2to1/ez_setup.py
required_pkgs/d2to1/setup.cfg
required_pkgs/d2to1/setup.py
+required_pkgs/d2to1/tox.ini
required_pkgs/d2to1/d2to1/__init__.py
required_pkgs/d2to1/d2to1/core.py
required_pkgs/d2to1/d2to1/util.py
diff --git a/lib/pyraf/irafpar.py b/lib/pyraf/irafpar.py
index deb87b2..924b3a3 100644
--- a/lib/pyraf/irafpar.py
+++ b/lib/pyraf/irafpar.py
@@ -1,6 +1,6 @@
"""irafpar.py -- parse IRAF .par files and create lists of IrafPar objects
-$Id: irafpar.py 1958 2013-04-08 21:08:11Z sontag $
+$Id: irafpar.py 2080 2013-11-06 19:31:41Z sontag $
R. White, 2000 January 7
"""
@@ -508,6 +508,8 @@ class IrafParList(taskpars.TaskPars):
"""
self.__pars = []
self.__hasPsets = False
+ self.__psets2merge = None # is a list when populated
+ self.__psetLock = False
self.__filename = filename
self.__name = taskname
self.__filecache = ParCache(filename, parlist)
@@ -516,8 +518,9 @@ class IrafParList(taskpars.TaskPars):
def Update(self):
"""Check to make sure this list is in sync with parameter file"""
- self.__pars, self.__pardict, self.__psetlist = \
+ self.__pars, self.__pardict, self.__psets2merge = \
self.__filecache.get()
+ if self.__psets2merge: self.__addPsetParams()
def setFilename(self, filename):
"""Change filename and create ParCache object
@@ -557,19 +560,27 @@ class IrafParList(taskpars.TaskPars):
2013 that this is not happening correctly, and may be an unsafe plan.
Therefore the code was changed to allow clients to access both copies;
see getParObjects() and any related code. """
- # return immediately if they have already been added
- if self.__psetlist is None: return
- # otherwise...
- self.__hasPsets = True
+ # return immediately if they have already been added or
+ # if we are in the midst of a recursive call tree
+ if self.__psetLock or self.__psets2merge is None:
+ return
+ # otherwise, merge in any PSETs
+ if len(self.__psets2merge) > 0:
+ self.__hasPsets = True # never reset
+ self.__psetLock = True # prevent us from coming in recursively
+
# Work from the pset's pardict because then we get
# parameters from nested psets too
- for p in self.__psetlist:
+ for p in self.__psets2merge:
# silently ignore parameters from psets that already are defined
psetdict = p.get().getParDict()
for pname in psetdict.keys():
if not self.__pardict.has_exact_key(pname):
self.__pardict.add(pname, psetdict[pname])
- self.__psetlist = None
+
+ # back to normal state
+ self.__psets2merge = None
+ self.__psetLock = False
def addParam(self, p):
"""Add a parameter to the list"""
@@ -605,13 +616,14 @@ class IrafParList(taskpars.TaskPars):
self.__pardict.add(p.name, p)
if isinstance(p, IrafParPset):
# parameters from this pset will be added too
- if self.__psetlist is None:
+ if self.__psets2merge is None:
# add immediately
- self.__psetlist = [p]
+ self.__psets2merge = [p]
self.__addPsetParams()
else:
# just add to the pset list
- self.__psetlist.append(p)
+ self.__psets2merge.append(p)
+ # can't call __addPsetParams here as we may now be inside a call
def isConsistent(self, other):
"""Compare two IrafParLists for consistency
@@ -693,7 +705,7 @@ class IrafParList(taskpars.TaskPars):
def hasPar(self,param):
"""Test existence of parameter named param"""
- if self.__psetlist: self.__addPsetParams()
+ if self.__psets2merge: self.__addPsetParams()
param = irafutils.untranslateName(param)
return param in self.__pardict
@@ -711,7 +723,7 @@ class IrafParList(taskpars.TaskPars):
return self.__pars
def getParDict(self):
- if self.__psetlist: self.__addPsetParams()
+ if self.__psets2merge: self.__addPsetParams()
return self.__pardict
def getParObject(self,param):
@@ -720,7 +732,7 @@ class IrafParList(taskpars.TaskPars):
any duplicated PSET pars via __addPsetParams), but does not look
down into PSETs. Note the difference between this and getParObjects
in their different return types. """
- if self.__psetlist: self.__addPsetParams()
+ if self.__psets2merge: self.__addPsetParams()
try:
param = irafutils.untranslateName(param)
return self.__pardict[param]
@@ -728,13 +740,13 @@ class IrafParList(taskpars.TaskPars):
raise e.__class__("Error in parameter '" +
param + "' for task " + self.__name + "\n" + str(e))
- def getParObjects(self, param):
+ def getParObjects(self, param, typecheck=True):
"""
- Returns _all_ IrafPar objects matching the string name given (param),
+ Returns all IrafPar objects matching the string name given (param),
in the form of a dict like:
{ scopename : <IrafPar instance>, ... }
- where scope is '' if the par was found as a regular par in this list,
- or, where scope is psetname if the par was found inside a PSET.
+ where scopename is '' if par was found as a regular par in this list,
+ or, where scopename is psetname if the par was found inside a PSET.
It is possible that some dict values will actually be the same object
in memory (see docs for __addPsetParams).
@@ -742,10 +754,28 @@ class IrafParList(taskpars.TaskPars):
found at the "top level" (a regular par inside this par list)
even if it is also in a PSET.
+ typecheck: If multiple par objects are found, and typecheck is set to
+ True, only the first (e.g. top level) will be returned if those
+ par objects have a different value for their .type attribute.
+ Otherwise all par objects found are returned in the dict.
+
Note the difference between this and getParObject in their
different return types.
"""
- if self.__psetlist: self.__addPsetParams()
+ # Notes:
+ # To accomplish the parameter setting (e.g. setParam) this calls up
+ # all possible exact-name-matching pars in this par list, whether
+ # they be on the "top" level with that name (param), or down in some
+ # PSET with that name (param). If we are simply an IRAFish task, then
+ # this is fine as we can assume the task likely does not have a par of
+ # its own and a PSET par, both of which have the same name. Thus any
+ # such case will acquire a copy of the PSET par at the top level. See
+ # discussion of this in __addPsetParams().
+ # BUT, if we are a CL script (e.g. mscombine.cl), we could have local
+ # vars which happen to have the same names as PSET pars. This is an
+ # issue that we need to handle and be aware of (see typecheck arg).
+
+ if self.__psets2merge: self.__addPsetParams()
param = irafutils.untranslateName(param)
retval = {}
@@ -773,9 +803,15 @@ class IrafParList(taskpars.TaskPars):
if len(matching_pars) > 1:
raise RuntimeError('Unexpected multiple matches for par: '+ \
param+', are: '+str([p.name for p in matching_pars]))
- # add it to outgoing dict
+ # found one with that name; add it to outgoing dict
if len(matching_pars) > 0:
- retval[pset.name] = matching_pars[0]
+ addit = True
+ if typecheck and '' in retval:
+ # in this case we already found a top-level and we've been
+ # asked to make sure to return only same-type matches
+ addit = matching_pars[0].type == retval[''].type # attr is a char
+ if addit:
+ retval[pset.name] = matching_pars[0]
return retval
def getAllMatches(self,param):
@@ -810,7 +846,8 @@ class IrafParList(taskpars.TaskPars):
"""Set task parameter 'param' to value (with minimum-matching).
scope, idxHint, and check are included for use as a task object
but they are currently ignored."""
- for par_obj in self.getParObjects(param).values():
+ matches_dict = self.getParObjects(param)
+ for par_obj in matches_dict.values():
par_obj.set(value)
def setParList(self,*args,**kw):
diff --git a/lib/pyraf/version.py b/lib/pyraf/version.py
index 7abe225..271378f 100644
--- a/lib/pyraf/version.py
+++ b/lib/pyraf/version.py
@@ -7,14 +7,14 @@ __all__ = ['__version__', '__vdate__', '__svn_revision__', '__svn_full_info__',
import datetime
-__version__ = '2.1.3'
+__version__ = '2.1.5'
__vdate__ = 'unspecified'
-__svn_revision__ = "2047"
+__svn_revision__ = "2095"
__svn_full_info__ = 'unknown'
-__setup_datetime__ = datetime.datetime(2013, 8, 20, 12, 26, 1, 837603)
+__setup_datetime__ = datetime.datetime(2013, 11, 25, 12, 17, 10, 987591)
# what version of stsci.distutils created this version.py
-stsci_distutils_version = '0.3.5.dev'
+stsci_distutils_version = '0.3.7.dev27596'
if '.dev' in __version__:
def update_svn_info():
@@ -68,7 +68,7 @@ if '.dev' in __version__:
if pipe.wait() == 0:
stdout = pipe.stdout.read().decode('latin1').strip()
if stdout and stdout[0] in string.digits:
- __svn_revision__ = "2047"
+ __svn_revision__ = "2095"
except OSError:
pass
diff --git a/lib/pyraf/version.py.orig1 b/lib/pyraf/version.py.orig1
index 5e3cb1f..37f8de0 100644
--- a/lib/pyraf/version.py.orig1
+++ b/lib/pyraf/version.py.orig1
@@ -7,14 +7,14 @@ __all__ = ['__version__', '__vdate__', '__svn_revision__', '__svn_full_info__',
import datetime
-__version__ = '2.1.3'
+__version__ = '2.1.5'
__vdate__ = 'unspecified'
__svn_revision__ = 'Unable to determine SVN revision'
__svn_full_info__ = 'unknown'
-__setup_datetime__ = datetime.datetime(2013, 8, 20, 12, 25, 53, 933220)
+__setup_datetime__ = datetime.datetime(2013, 11, 25, 12, 17, 2, 831411)
# what version of stsci.distutils created this version.py
-stsci_distutils_version = '0.3.5.dev'
+stsci_distutils_version = '0.3.7.dev27596'
if '.dev' in __version__:
def update_svn_info():
diff --git a/lib/pyraf/version.py.orig2 b/lib/pyraf/version.py.orig2
index 209852e..24451b7 100644
--- a/lib/pyraf/version.py.orig2
+++ b/lib/pyraf/version.py.orig2
@@ -7,14 +7,14 @@ __all__ = ['__version__', '__vdate__', '__svn_revision__', '__svn_full_info__',
import datetime
-__version__ = '2.1.3'
+__version__ = '2.1.5'
__vdate__ = 'unspecified'
__svn_revision__ = 'Unable to determine SVN revision'
__svn_full_info__ = 'unknown'
-__setup_datetime__ = datetime.datetime(2013, 8, 20, 12, 25, 53, 933220)
+__setup_datetime__ = datetime.datetime(2013, 11, 25, 12, 17, 2, 831411)
# what version of stsci.distutils created this version.py
-stsci_distutils_version = '0.3.5.dev'
+stsci_distutils_version = '0.3.7.dev27596'
if '.dev' in __version__:
def update_svn_info():
diff --git a/lib/pyraf/wutil.py b/lib/pyraf/wutil.py
index c967fe9..cbbf3ab 100644
--- a/lib/pyraf/wutil.py
+++ b/lib/pyraf/wutil.py
@@ -4,7 +4,7 @@ These are python stubs that are overloaded by a c version implementations.
If the c versions do not exist, then these routines will do nothing
-$Id: wutil.py 2039 2013-08-05 21:23:13Z sontag $
+$Id: wutil.py 2069 2013-10-09 15:33:36Z sontag $
"""
from __future__ import division # confidence high
@@ -57,8 +57,8 @@ if WUTIL_ON_MAC and not _skipDisplay:
GRAPHICS_ALWAYS_ON_TOP = 'PYRAF_GRAPHICS_ALWAYS_ON_TOP' in os.environ
# attempt to override with xutil or aqua versions
-_hasAqua = 0
-_hasXWin = 0
+_has_aqutil = 0
+_has_xutil = 0
try:
if WUTIL_USING_X and not _skipDisplay:
# set an env var before importing xutil (see PyRAF FAQ on this)
@@ -77,7 +77,7 @@ try:
# Successful intialization. Reset dummy methods with
# those from 'xutil' now.
from pyraf.xutil import *
- _hasXWin = 1 # Flag to mark successful initialization of XWindow
+ _has_xutil = 1 # Flag to mark successful initialization of XWindow
closeGraphics = closeXGraphics
else:
@@ -92,15 +92,16 @@ try:
# override the few Mac-specific functions needed
from aqutil import getFocalWindowID, setFocusTo, getParentID
from aqutil import moveCursorTo, getPointerPosition
- _hasAqua = 1
+ _has_aqutil = 1
except:
- _hasAqua = 0
+ _has_aqutil = 0
print "Could not import aqutil, please see the online PyRAF FAQ"
+ print "http://www.stsci.edu/institute/software_hardware/pyraf/pyraf_faq#5.13"
except ImportError:
- _hasXWin = 0 # Unsuccessful init of XWindow
+ _has_xutil = 0 # Unsuccessful init of XWindow
except EnvironmentError:
- _hasXWin = 0 # Unsuccessful init of XWindow
+ _has_xutil = 0 # Unsuccessful init of XWindow
# Clean up the namespace a bit...
try:
@@ -151,7 +152,7 @@ def getTopID(WindowID):
# a "top ID" makes less sense if we are not using X
if not WUTIL_USING_X:
- if _hasAqua:
+ if _has_aqutil:
return aqutil.getTopIdFor(wid)
else:
return wid # everything is its own top
@@ -175,7 +176,7 @@ def forceFocusToNewWindow():
actually in the front, where focus would be. With X, any new window
comes to the front anyway, so this is a no-op. Currently this is
only necessary under Aqua. """
- if _hasAqua:
+ if _has_aqutil:
aqutil.focusOnGui()
def isViewable(WindowID):
@@ -256,7 +257,7 @@ class TerminalFocusEntity(FocusEntity):
self.windowID = getFocalWindowID()
if self.windowID == -1:
self.windowID = None
- if _hasAqua:
+ if _has_aqutil:
scrnPosDict = aqutil.getPointerGlobalPosition()
self.lastScreenX = scrnPosDict['x']
self.lastScreenY = scrnPosDict['y']
@@ -277,7 +278,7 @@ class TerminalFocusEntity(FocusEntity):
if self.windowID == getFocalWindowID():
# focus is already here
return
- if _hasAqua:
+ if _has_aqutil:
if self.lastScreenX is not None and cursorToo:
moveCursorTo(self.windowID, self.lastScreenX, self.lastScreenY,
0, 0)
@@ -290,7 +291,7 @@ class TerminalFocusEntity(FocusEntity):
def saveCursorPos(self):
if (not self.windowID) or (self.windowID != getFocalWindowID()):
return
- if _hasAqua:
+ if _has_aqutil:
scrnPosDict = aqutil.getPointerGlobalPosition()
self.lastScreenX = scrnPosDict['x']
self.lastScreenY = scrnPosDict['y']
@@ -513,7 +514,18 @@ def dumpspecs(outstream = None, skip_volatiles = False):
out += "\nPyRAF ver = "+pyrver
out += "\nPY3K = "+str(capable.PY3K)
out += "\nc.OF_GRAPHICS = "+str(capable.OF_GRAPHICS)
- if capable.OF_GRAPHICS:
+ if hasattr(capable, 'get_dc_owner'): # rm hasattr at/after v2.2
+ if skip_volatiles:
+ out +="\n/dev/console owner = <skipped>"
+ else:
+ out +="\n/dev/console owner = "+str(capable.get_dc_owner(False, True))
+
+ if not capable.OF_GRAPHICS:
+ if hasattr(capable, 'TKINTER_IMPORT_FAILED'):
+ out += "\nTkinter import failed."
+ else:
+ out += "\nTkinter use unattempted."
+ else:
out += "\nTclVersion = "+str(capable.Tkinter.TclVersion)
out += "\nTkVersion = "+str(capable.Tkinter.TkVersion)
out += "\nWUTIL_ON_MAC = "+str(WUTIL_ON_MAC)
@@ -524,10 +536,10 @@ def dumpspecs(outstream = None, skip_volatiles = False):
out += "\nwhich_darwin_linkage = "+str(capable.which_darwin_linkage())
else:
out += "\nwhich_darwin_linkage = (not darwin)"
- out += "\nskipDisplay = "+str(_skipDisplay)
- out += "\nhasGraphics = "+str(hasGraphics)
- out += "\nhasAqua = "+str(_hasAqua)
- out += "\nhasXWin = "+str(_hasXWin)
+ out += "\nskip display = "+str(_skipDisplay)
+ out += "\nhas graphics = "+str(hasGraphics)
+ out += "\nimported aqutil = "+str(bool(_has_aqutil))
+ out += "\nimported xutil = "+str(bool(_has_xutil))
if 'PYRAFGRAPHICS' in os.environ:
val = os.environ['PYRAFGRAPHICS']
@@ -578,7 +590,7 @@ if _skipDisplay:
if hasattr(capable, 'TKINTER_IMPORT_FAILED'):
print "Tkinter import failed."
else:
- if _hasXWin or _hasAqua:
+ if _has_xutil or _has_aqutil:
hasGraphics = focusController.hasGraphics
elif WUTIL_ON_MAC:
# Handle case where we are on the Mac with no X and no PyObjc. We can
diff --git a/lib/pyraf_setup.py b/lib/pyraf_setup.py
index ca491cc..4d81fe1 100644
--- a/lib/pyraf_setup.py
+++ b/lib/pyraf_setup.py
@@ -25,17 +25,6 @@ def setup_hook(config):
config['files']['scripts'] += '\n' + '\n'.join(additional_scripts)
- # This installs the shortcut-like launcher exe onto the desktop
- if 'USERPROFILE' in os.environ:
- dtop = os.environ['USERPROFILE']+os.sep+'Desktop'
- if os.path.exists(dtop):
- shutil.copy('data'+os.sep+'PyRAF.exe', dtop+os.sep+'PyRAF.exe')
- print('Installing PyRAF.exe to -> '+dtop)
- else:
- print('Error: Desktop not found at: '+dtop)
- else:
- print('Error: Desktop location unknown')
-
def build_ext_hook(command):
"""Adds the correct library directories for X11. I've found that on Linux
diff --git a/lib/pyraf_setup.pyc b/lib/pyraf_setup.pyc
index d343d3d..46bda3a 100644
Binary files a/lib/pyraf_setup.pyc and b/lib/pyraf_setup.pyc differ
diff --git a/required_pkgs/d2to1/.authors b/required_pkgs/d2to1/.authors
index 60f2707..697b7ae 100644
--- a/required_pkgs/d2to1/.authors
+++ b/required_pkgs/d2to1/.authors
@@ -1,3 +1,4 @@
embray = Erik M. Bray <embray at stsci.edu>
sienkiew = Mark Sienkiewicz <sienkiew at stsci.edu>
+sontag = Chris Sontag <sontag at stsci.edu>
iraf = iraf <iraf at stsci.edu>
diff --git a/required_pkgs/d2to1/CHANGES.rst b/required_pkgs/d2to1/CHANGES.rst
index 0c0aa04..977387d 100644
--- a/required_pkgs/d2to1/CHANGES.rst
+++ b/required_pkgs/d2to1/CHANGES.rst
@@ -2,12 +2,24 @@ Changes
=========
-0.2.11 (unreleased)
+0.2.12 (unreleased)
+-------------------
+
+- Nothing changed yet.
+
+
+0.2.11 (2013-08-29)
-------------------
- Replaced ``distribute_setup.py`` with ``ez_setup.py`` in order to bootstrap
with modern setuptools when necessary.
+- Fixed a couple minor Python 3-specific issues. In particular the
+ ``data_files`` option could be passed to ``setup()`` as a ``dict_items``
+ object instead of a ``list`` which is what would normally be expected.
+
+- Added a tox.ini (frankly I thought there already was one).
+
0.2.10 (2013-04-10)
-------------------
diff --git a/required_pkgs/d2to1/d2to1/util.py b/required_pkgs/d2to1/d2to1/util.py
index 8ffd806..88c2623 100644
--- a/required_pkgs/d2to1/d2to1/util.py
+++ b/required_pkgs/d2to1/d2to1/util.py
@@ -311,7 +311,7 @@ def setup_cfg_to_setup_kwargs(config):
if arg == 'data_files':
# the data_files value is a pointlessly different structure
# from the package_data value
- data_files = data_files.items()
+ data_files = list(data_files.items())
in_cfg_value = data_files
elif arg == 'cmdclass':
cmdclass = {}
diff --git a/required_pkgs/d2to1/d2to1/zestreleaser.py b/required_pkgs/d2to1/d2to1/zestreleaser.py
index 326baca..a2b6632 100644
--- a/required_pkgs/d2to1/d2to1/zestreleaser.py
+++ b/required_pkgs/d2to1/d2to1/zestreleaser.py
@@ -18,6 +18,7 @@ is added then support for it should be included here as well.
import logging
import os
+from .extern.six import print_
from .extern.six import moves as m
ConfigParser = m.configparser.ConfigParser
@@ -88,19 +89,20 @@ def releaser_middle(data):
msg = "Tagging %s" % (version,)
cmd = 'git tag -s %s -m "%s"' % (version, msg)
if os.path.isdir('.git/svn'):
- print "\nEXPERIMENTAL support for git-svn tagging!\n"
+ print_("\nEXPERIMENTAL support for git-svn tagging!\n")
cur_branch = open('.git/HEAD').read().strip().split('/')[-1]
- print "You are on branch %s." % (cur_branch,)
+ print_("You are on branch %s." % (cur_branch,))
if cur_branch != 'master':
- print "Only the master branch is supported for git-svn tagging."
- print "Please tag yourself."
- print "'git tag' needs to list tag named %s." % (version,)
+ print_("Only the master branch is supported for git-svn "
+ "tagging.")
+ print_("Please tag yourself.")
+ print_("'git tag' needs to list tag named %s." % (version,))
sys.exit()
cmd = [cmd]
local_head = open('.git/refs/heads/master').read()
trunk = open('.git/refs/remotes/trunk').read()
if local_head != trunk:
- print "Your local master diverges from trunk.\n"
+ print_("Your local master diverges from trunk.\n")
# dcommit before local tagging
cmd.insert(0, 'git svn dcommit')
# create tag in svn
@@ -119,18 +121,18 @@ def releaser_middle(data):
if not isinstance(cmds, list):
cmds = [cmds]
if len(cmds) == 1:
- print "Tag needed to proceed, you can use the following command:"
+ print_("Tag needed to proceed, you can use the following command:")
for cmd in cmds:
- print cmd
+ print_(cmd)
if utils.ask("Run this command"):
- print system(cmd)
+ print_(system(cmd))
else:
# all commands are needed in order to proceed normally
- print "Please create a tag for %s yourself and rerun." % \
- (self.data['version'],)
+ print_("Please create a tag for %s yourself and rerun." % \
+ (self.data['version'],))
sys.exit()
if not self.vcs.tag_exists('v' + self.data['version']):
- print "\nFailed to create tag %s!" % (self.data['version'],)
+ print_("\nFailed to create tag %s!" % (self.data['version'],))
sys.exit()
# Normally all this does is to return '--formats=zip', which is currently
diff --git a/required_pkgs/d2to1/setup.cfg b/required_pkgs/d2to1/setup.cfg
index 4904716..cf52d06 100644
--- a/required_pkgs/d2to1/setup.cfg
+++ b/required_pkgs/d2to1/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = d2to1
-version = 0.2.11.dev
+version = 0.2.12.dev
author = Erik M. Bray
author-email = embray at stsci.edu
summary = Allows using distutils2-like setup.cfg files for a package's metadata with a distribute/setuptools setup.py
diff --git a/required_pkgs/d2to1/tox.ini b/required_pkgs/d2to1/tox.ini
new file mode 100644
index 0000000..d20127b
--- /dev/null
+++ b/required_pkgs/d2to1/tox.ini
@@ -0,0 +1,11 @@
+[tox]
+envlist = py25,py26,py27,py32,py33
+
+[testenv]
+deps =
+ nose
+ numpy
+ setuptools-subversion
+commands =
+ python setup.py test
+sitepackages = True
diff --git a/required_pkgs/stsci.distutils/CHANGES.txt b/required_pkgs/stsci.distutils/CHANGES.txt
index 6c08a5a..3bce7ad 100644
--- a/required_pkgs/stsci.distutils/CHANGES.txt
+++ b/required_pkgs/stsci.distutils/CHANGES.txt
@@ -1,12 +1,28 @@
Changelog
===========
-0.3.5 (unreleased)
+0.3.7 (unreleased)
------------------
- Nothing changed yet.
+0.3.6 (2013-11-21)
+------------------
+
+- Fixed a syntax error in Python 3 that was introduced in 0.3.5. This
+ could occur very early in the setup such that it bailed before even 2to3
+ could run on the rest of the package.
+
+
+0.3.5 (2013-11-18)
+------------------
+
+- Fixed an obscure issue that could occur when trying to install with
+ easy_install on Python 2 systems that have lib2to3 installed but have never
+ used it.
+
+
0.3.4 (2013-07-31)
------------------
diff --git a/required_pkgs/stsci.distutils/setup.cfg b/required_pkgs/stsci.distutils/setup.cfg
index b3b4373..f5240c5 100644
--- a/required_pkgs/stsci.distutils/setup.cfg
+++ b/required_pkgs/stsci.distutils/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = stsci.distutils
-version = 0.3.5.dev
+version = 0.3.7.dev
author = Erik M. Bray
author-email = embray at stsci.edu
home-page = http://www.stsci.edu/resources/software_hardware/stsci_python
diff --git a/required_pkgs/stsci.distutils/stsci/distutils/astutils.py b/required_pkgs/stsci.distutils/stsci/distutils/astutils.py
index 597edce..97dc06d 100644
--- a/required_pkgs/stsci.distutils/stsci/distutils/astutils.py
+++ b/required_pkgs/stsci.distutils/stsci/distutils/astutils.py
@@ -7,7 +7,9 @@ and a different version for 2.5.
import os
+import sys
+from distutils import log
try:
import ast # Python >= 2.6
@@ -22,10 +24,14 @@ try:
try:
tree = ast.parse(open(filename, 'r').read())
except SyntaxError:
+ if sys.version_info[0] < 3:
+ e = sys.exc_info()[1]
+ log.warn('SyntaxError while parsing file %s: %s' %
+ (filename, str(e)))
+ return
# We're probably in Python 3 and looking at a file intended for
# Python 2. Otherwise there's an unintended SyntaxError in the
# file, so there are bigger problems anyways
- # TODO: Maybe issue a warning?
try:
import lib2to3.refactor
@@ -74,27 +80,27 @@ except ImportError:
for name in node.names:
self.importfroms.add((node.modname, name[0], name[1]))
-try:
- import lib2to3.refactor
-
- class StringRefactoringTool(lib2to3.refactor.RefactoringTool):
- """A RefactoringTool that saves refactored files as strings in the
- self.refactored dict rather than outputting to actual files.
- This is used in case we're running in Python 3 and need to refactor a
- file before parsing its syntax tree.
- """
-
- def __init__(self, fixer_names, options=None, explicit=None):
- super(StringRefactoringTool, self).__init__(fixer_names, options,
- explicit)
- self.refactored = {}
+if sys.version_info[0] >= 3:
+ try:
+ import lib2to3.refactor
- def write_file(self, new_text, filename, old_text, encoding=None):
- self.refactored[filename] = new_text
+ class StringRefactoringTool(lib2to3.refactor.RefactoringTool):
+ """A RefactoringTool that saves refactored files as strings in the
+ self.refactored dict rather than outputting to actual files.
-except ImportError:
- pass
+ This is used in case we're running in Python 3 and need to refactor
+ a file before parsing its syntax tree.
+ """
+ def __init__(self, fixer_names, options=None, explicit=None):
+ super(StringRefactoringTool, self).__init__(fixer_names,
+ options,
+ explicit)
+ self.refactored = {}
+ def write_file(self, new_text, filename, old_text, encoding=None):
+ self.refactored[filename] = new_text
+ except ImportError:
+ pass
diff --git a/required_pkgs/stsci.distutils/stsci/distutils/hooks.py b/required_pkgs/stsci.distutils/stsci/distutils/hooks.py
index 9cb8d19..2ab2541 100644
--- a/required_pkgs/stsci.distutils/stsci/distutils/hooks.py
+++ b/required_pkgs/stsci.distutils/stsci/distutils/hooks.py
@@ -412,7 +412,8 @@ def numpy_extension_hook(command_obj):
'Please install Numpy on your system first.\n\n')
sys.exit(1)
- includes = [numpy.get_numarray_include(), numpy.get_include()]
+ includes = [numpy.get_include()]
+ #includes = [numpy.get_numarray_include(), numpy.get_include()]
for extension in command_obj.extensions:
if 'numpy' not in extension.include_dirs:
continue
diff --git a/required_pkgs/stsci.distutils/stsci/distutils/tests/test_hooks.py b/required_pkgs/stsci.distutils/stsci/distutils/tests/test_hooks.py
index 36acda6..b2fc5ed 100644
--- a/required_pkgs/stsci.distutils/stsci/distutils/tests/test_hooks.py
+++ b/required_pkgs/stsci.distutils/stsci/distutils/tests/test_hooks.py
@@ -143,7 +143,8 @@ class TestHooks(StsciDistutilsTestCase):
# compile a c file to an object, so that should include all the
# include paths. This is of course not universally true, but it
# should hold true for this test case
- for path in [numpy.get_include(), numpy.get_numarray_include()]:
+ for path in [numpy.get_include()]:
+ #for path in [numpy.get_include(), numpy.get_numarray_include()]:
assert '-I' + path in args
break
@@ -162,7 +163,8 @@ class TestHooks(StsciDistutilsTestCase):
continue
if args[0] != compiler_cmd:
continue
- for path in [numpy.get_include(), numpy.get_numarray_include()]:
+ for path in [numpy.get_include()]:
+ #for path in [numpy.get_include(), numpy.get_numarray_include()]:
assert '-I' + path not in args
def test_glob_data_files(self):
diff --git a/required_pkgs/stsci.tools/lib/stsci/tools/capable.py b/required_pkgs/stsci.tools/lib/stsci/tools/capable.py
index 2546003..975c90a 100644
--- a/required_pkgs/stsci.tools/lib/stsci/tools/capable.py
+++ b/required_pkgs/stsci.tools/lib/stsci/tools/capable.py
@@ -3,7 +3,7 @@ This is meant to be fast and light, having no complicated dependencies, so
that any module can fearlessly import this without adverse affects or
performance concerns.
-$Id: capable.py 25052 2013-05-29 21:41:03Z sontag $
+$Id: capable.py 26617 2013-09-10 03:54:22Z sontag $
"""
from __future__ import division # confidence high
@@ -55,6 +55,26 @@ def which_darwin_linkage(force_otool_check=False):
return "aqua"
+def get_dc_owner(raises, mask_if_self):
+ """ Convenience function to return owner of /dev/console.
+ If raises is True, this raises an exception on any error.
+ If not, it returns any error string as the owner name.
+ If owner is self, and if mask_if_self, returns "<self>"."""
+ try:
+ from pwd import getpwuid
+ owner_uid = os.stat('/dev/console').st_uid
+ self_uid = os.getuid()
+ if mask_if_self and owner_uid == self_uid:
+ return "<self>"
+ owner_name = getpwuid(owner_uid).pw_name
+ return owner_name
+ except Exception, e:
+ if raises:
+ raise e
+ else:
+ return str(e)
+
+
OF_GRAPHICS = True
if 'PYRAF_NO_DISPLAY' in os.environ or 'PYTOOLS_NO_DISPLAY' in os.environ:
@@ -73,11 +93,16 @@ if OF_GRAPHICS and sys.platform == 'darwin':
# any windows/graphics calls. See "console user" here:
# http://developer.apple.com/library/mac/#technotes/tn2083/_index.html
# If we are the console user, we own /dev/console and can read from it.
+ # When no one is logged in, /dev/console is owned by "root". When user "bob"
+ # is logged in locally/physically, /dev/console is owned by "bob".
+ # However, if "bob" restarts the X server while logged in, /dev/console
+ # may be owned by "sysadmin" - so we check for that.
#
if 'PYRAF_YES_DISPLAY' not in os.environ:
- OF_GRAPHICS = os.access("/dev/console", os.R_OK)
- # the use of PYRAF_YES_DISPLAY is a temporary hack to get a user
- # working while we debug why they have no read-acces to /dev/console
+ # the use of PYRAF_YES_DISPLAY is a temporary override while we
+ # debug why a user might have no read-acces to /dev/console
+ dc_owner = get_dc_owner(False, False)
+ OF_GRAPHICS = dc_owner == 'sysadmin' or os.access("/dev/console", os.R_OK)
# Add a double-check for remote X11 users. We *think* this is a smaller
# set of cases, so we do it last minute here:
@@ -107,5 +132,3 @@ OF_TKFD_IN_EPAR = True
if sys.platform == 'darwin' and OF_GRAPHICS and \
not is_darwin_and_x(): # if framework ver
OF_TKFD_IN_EPAR = 'TEAL_TRY_TKFD' in os.environ
-
-
diff --git a/setup.cfg b/setup.cfg
index 10116ee..1603dc0 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = pyraf
-version = 2.1.3
+version = 2.1.5
author = Rick White, Perry Greenfield
author-email = help at stsci.edu
home-page = http://www.stsci.edu/resources/software_hardware/pyraf
@@ -28,16 +28,21 @@ scripts = scripts/pyraf
[extension=pyraf.sscanfmodule]
sources = src/sscanfmodule.c
+optional = True
+fail_message = If this is Windows, it is ok.
[extension=pyraf.xutilmodule]
sources = src/xutil.c
libraries = X11
+optional = True
+fail_message = If this is Windows, it is ok.
[global]
setup_hooks =
stsci.distutils.hooks.use_packages_root
stsci.distutils.hooks.version_setup_hook
pyraf_setup.setup_hook
+commands = stsci.distutils.command.build_optional_ext.build_optional_ext
[install_data]
pre-hook.glob-data-files = stsci.distutils.hooks.glob_data_files
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/python-pyraf.git
More information about the debian-science-commits
mailing list