From 5e2635103c34ca1d4226f64c84c6bdf54d528d75 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Sun, 20 May 2007 23:17:38 +0000 Subject: [PATCH] Remove the macfs module. This led to the deprecation of macostools.touched(); it completely relied on macfs and is a no-op on OS X according to code comments. --- Doc/mac/libmacfs.tex | 241 ------------------------------------ Doc/mac/libmacostools.tex | 1 + Lib/binhex.py | 9 +- Lib/plat-mac/macfs.py | 198 ----------------------------- Lib/plat-mac/macostools.py | 17 +-- Lib/test/regrtest.py | 6 +- Lib/test/test_macfs.py | 78 ------------ Lib/test/test_macostools.py | 6 +- Misc/NEWS | 4 + 9 files changed, 14 insertions(+), 546 deletions(-) delete mode 100644 Doc/mac/libmacfs.tex delete mode 100644 Lib/plat-mac/macfs.py delete mode 100644 Lib/test/test_macfs.py diff --git a/Doc/mac/libmacfs.tex b/Doc/mac/libmacfs.tex deleted file mode 100644 index 12a7cc34b18..00000000000 --- a/Doc/mac/libmacfs.tex +++ /dev/null @@ -1,241 +0,0 @@ -\section{\module{macfs} --- - Various file system services} - -\declaremodule{standard}{macfs} - \platform{Mac} -\modulesynopsis{Support for FSSpec, the Alias Manager, - \program{finder} aliases, and the Standard File package.} - -\deprecated{2.3}{The macfs module should be considered obsolete. For -\class{FSSpec}, \class{FSRef} and \class{Alias} handling use the -\module{Carbon.File} or \refmodule{Carbon.Folder} module. For file -dialogs use the \refmodule{EasyDialogs} module. Also, this module is -known to not work correctly with UFS partitions.} - -This module provides access to Macintosh \class{FSSpec} handling, the -Alias Manager, \program{finder} aliases and the Standard File package. -\index{Macintosh Alias Manager} -\index{Alias Manager, Macintosh} -\index{Standard File} - -Whenever a function or method expects a \var{file} argument, this -argument can be one of three things:\ (1) a full or partial Macintosh -pathname, (2) an \class{FSSpec} object or (3) a 3-tuple -\code{(\var{wdRefNum}, \var{parID}, \var{name})} as described in -\citetitle{Inside Macintosh:\ Files}. An \class{FSSpec} can point to -a non-existing file, as long as the folder containing the file exists. -Under MacPython the same is true for a pathname, but not under \UNIX-Python -because of the way pathnames and FSRefs works. See Apple's documentation -for details. - -A description of aliases and the -Standard File package can also be found there. - -\begin{funcdesc}{FSSpec}{file} -Create an \class{FSSpec} object for the specified file. -\end{funcdesc} - -\begin{funcdesc}{RawFSSpec}{data} -Create an \class{FSSpec} object given the raw data for the \C{} -structure for the \class{FSSpec} as a string. This is mainly useful -if you have obtained an \class{FSSpec} structure over a network. -\end{funcdesc} - -\begin{funcdesc}{RawAlias}{data} -Create an \class{Alias} object given the raw data for the \C{} -structure for the alias as a string. This is mainly useful if you -have obtained an \class{FSSpec} structure over a network. -\end{funcdesc} - -\begin{funcdesc}{FInfo}{} -Create a zero-filled \class{FInfo} object. -\end{funcdesc} - -\begin{funcdesc}{ResolveAliasFile}{file} -Resolve an alias file. Returns a 3-tuple \code{(\var{fsspec}, -\var{isfolder}, \var{aliased})} where \var{fsspec} is the resulting -\class{FSSpec} object, \var{isfolder} is true if \var{fsspec} points -to a folder and \var{aliased} is true if the file was an alias in the -first place (otherwise the \class{FSSpec} object for the file itself -is returned). -\end{funcdesc} - -\begin{funcdesc}{StandardGetFile}{\optional{type, \moreargs}} -Present the user with a standard ``open input file'' -dialog. Optionally, you can pass up to four 4-character file types to limit -the files the user can choose from. The function returns an \class{FSSpec} -object and a flag indicating that the user completed the dialog -without cancelling. -\end{funcdesc} - -\begin{funcdesc}{PromptGetFile}{prompt\optional{, type, \moreargs}} -Similar to \function{StandardGetFile()} but allows you to specify a -prompt which will be displayed at the top of the dialog. -\end{funcdesc} - -\begin{funcdesc}{StandardPutFile}{prompt\optional{, default}} -Present the user with a standard ``open output file'' -dialog. \var{prompt} is the prompt string, and the optional -\var{default} argument initializes the output file name. The function -returns an \class{FSSpec} object and a flag indicating that the user -completed the dialog without cancelling. -\end{funcdesc} - -\begin{funcdesc}{GetDirectory}{\optional{prompt}} -Present the user with a non-standard ``select a directory'' dialog. You -have to first open the directory before clicking on the ``select current -directory'' button. \var{prompt} is the prompt string which will be -displayed at the top of the dialog. Return an \class{FSSpec} object and -a success-indicator. -\end{funcdesc} - -\begin{funcdesc}{SetFolder}{\optional{fsspec}} -Set the folder that is initially presented to the user when one of -the file selection dialogs is presented. \var{fsspec} should point to -a file in the folder, not the folder itself (the file need not exist, -though). If no argument is passed the folder will be set to the -current directory, i.e. what \function{os.getcwd()} returns. - -Note that starting with System 7.5 the user can change Standard File -behaviour with the ``general controls'' control panel, thereby making -this call inoperative. -\end{funcdesc} - -\begin{funcdesc}{FindFolder}{where, which, create} -Locates one of the ``special'' folders that Mac OS knows about, such as -the trash or the Preferences folder. \var{where} is the disk to -search, \var{which} is the 4-character string specifying which folder to -locate. Setting \var{create} causes the folder to be created if it -does not exist. Returns a \code{(\var{vrefnum}, \var{dirid})} tuple. - -The constants for \var{where} and \var{which} can be obtained from the -standard module \var{Carbon.Folders}. -\end{funcdesc} - -\begin{funcdesc}{NewAliasMinimalFromFullPath}{pathname} -Return a minimal \class{alias} object that points to the given file, which -must be specified as a full pathname. This is the only way to create an -\class{Alias} pointing to a non-existing file. - -\end{funcdesc} - -\begin{funcdesc}{FindApplication}{creator} -Locate the application with 4-character creator code \var{creator}. The -function returns an \class{FSSpec} object pointing to the application. -\end{funcdesc} - - -\subsection{FSSpec Objects \label{fsspec-objects}} - -\begin{memberdesc}[FSSpec]{data} -The raw data from the FSSpec object, suitable for passing -to other applications, for instance. -\end{memberdesc} - -\begin{methoddesc}[FSSpec]{as_pathname}{} -Return the full pathname of the file described by the \class{FSSpec} -object. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{as_tuple}{} -Return the \code{(\var{wdRefNum}, \var{parID}, \var{name})} tuple of -the file described by the \class{FSSpec} object. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{NewAlias}{\optional{file}} -Create an Alias object pointing to the file described by this -FSSpec. If the optional \var{file} parameter is present the alias -will be relative to that file, otherwise it will be absolute. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{NewAliasMinimal}{} -Create a minimal alias pointing to this file. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{GetCreatorType}{} -Return the 4-character creator and type of the file. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{SetCreatorType}{creator, type} -Set the 4-character creator and type of the file. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{GetFInfo}{} -Return a \class{FInfo} object describing the finder info for the file. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{SetFInfo}{finfo} -Set the finder info for the file to the values given as \var{finfo} -(an \class{FInfo} object). -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{GetDates}{} -Return a tuple with three floating point values representing the -creation date, modification date and backup date of the file. -\end{methoddesc} - -\begin{methoddesc}[FSSpec]{SetDates}{crdate, moddate, backupdate} -Set the creation, modification and backup date of the file. The values -are in the standard floating point format used for times throughout -Python. -\end{methoddesc} - - -\subsection{Alias Objects \label{alias-objects}} - -\begin{memberdesc}[Alias]{data} -The raw data for the Alias record, suitable for storing in a resource -or transmitting to other programs. -\end{memberdesc} - -\begin{methoddesc}[Alias]{Resolve}{\optional{file}} -Resolve the alias. If the alias was created as a relative alias you -should pass the file relative to which it is. Return the FSSpec for -the file pointed to and a flag indicating whether the \class{Alias} object -itself was modified during the search process. If the file does -not exist but the path leading up to it does exist a valid fsspec -is returned. -\end{methoddesc} - -\begin{methoddesc}[Alias]{GetInfo}{num} -An interface to the \C{} routine \cfunction{GetAliasInfo()}. -\end{methoddesc} - -\begin{methoddesc}[Alias]{Update}{file\optional{, file2}} -Update the alias to point to the \var{file} given. If \var{file2} is -present a relative alias will be created. -\end{methoddesc} - -Note that it is currently not possible to directly manipulate a -resource as an \class{Alias} object. Hence, after calling -\method{Update()} or after \method{Resolve()} indicates that the alias -has changed the Python program is responsible for getting the -\member{data} value from the \class{Alias} object and modifying the -resource. - - -\subsection{FInfo Objects \label{finfo-objects}} - -See \citetitle{Inside Macintosh: Files} for a complete description of what -the various fields mean. - -\begin{memberdesc}[FInfo]{Creator} -The 4-character creator code of the file. -\end{memberdesc} - -\begin{memberdesc}[FInfo]{Type} -The 4-character type code of the file. -\end{memberdesc} - -\begin{memberdesc}[FInfo]{Flags} -The finder flags for the file as 16-bit integer. The bit values in -\var{Flags} are defined in standard module \module{MACFS}. -\end{memberdesc} - -\begin{memberdesc}[FInfo]{Location} -A Point giving the position of the file's icon in its folder. -\end{memberdesc} - -\begin{memberdesc}[FInfo]{Fldr} -The folder the file is in (as an integer). -\end{memberdesc} diff --git a/Doc/mac/libmacostools.tex b/Doc/mac/libmacostools.tex index 556e46f15e6..2754811030c 100644 --- a/Doc/mac/libmacostools.tex +++ b/Doc/mac/libmacostools.tex @@ -39,6 +39,7 @@ Tell the finder that some bits of finder-information such as creator or type for file \var{dst} has changed. The file can be specified by pathname or fsspec. This call should tell the finder to redraw the files icon. +\deprecated{2.6}{The function is a no-op on OS X.} \end{funcdesc} \begin{datadesc}{BUFSIZ} diff --git a/Lib/binhex.py b/Lib/binhex.py index 0f3e3c47d36..9059880e24e 100644 --- a/Lib/binhex.py +++ b/Lib/binhex.py @@ -510,14 +510,7 @@ def hexbin(inp, out): ifp.close() def _test(): - if os.name == 'mac': - import macfs - fss, ok = macfs.PromptGetFile('File to convert:') - if not ok: - sys.exit(0) - fname = fss.as_pathname() - else: - fname = sys.argv[1] + fname = sys.argv[1] binhex(fname, fname+'.hqx') hexbin(fname+'.hqx', fname+'.viahqx') #hexbin(fname, fname+'.unpacked') diff --git a/Lib/plat-mac/macfs.py b/Lib/plat-mac/macfs.py deleted file mode 100644 index 73815aeb3fa..00000000000 --- a/Lib/plat-mac/macfs.py +++ /dev/null @@ -1,198 +0,0 @@ -"""macfs - Pure Python module designed to be backward compatible with -macfs and MACFS. -""" -import sys -import struct -import Carbon.Res -import Carbon.File -import warnings - -warnings.warn("macfs is deprecated, use Carbon.File, Carbon.Folder or EasyDialogs", - DeprecationWarning, stacklevel=2) - -# First step: ensure we also emulate the MACFS module, which contained -# all the constants - -sys.modules['MACFS'] = sys.modules[__name__] - -# Import all those constants -from Carbon.Files import * -from Carbon.Folders import * - -# For some obscure historical reason these are here too: -READ = 1 -WRITE = 2 -smAllScripts = -3 - -# -# Find the epoch conversion for file dates in a way that works on OS9 and OSX -import time -if time.gmtime(0)[0] == 1970: - _EPOCHCONVERT = -((1970-1904)*365 + 17) * (24*60*60) + 0x100000000L - def _utc2time(utc): - t = utc[1] + _EPOCHCONVERT - return int(t) - def _time2utc(t): - t = int(t) - _EPOCHCONVERT - if t < -0x7fffffff: - t = t + 0x10000000L - return (0, int(t), 0) -else: - def _utc2time(utc): - t = utc[1] - if t < 0: - t = t + 0x100000000L - return t - def _time2utc(t): - if t > 0x7fffffff: - t = t - 0x100000000L - return (0, int(t), 0) - -# The old name of the error object: -error = Carbon.File.Error - -# -# The various objects macfs used to export. We override them here, because some -# of the method names are subtly different. -# -class FSSpec(Carbon.File.FSSpec): - def as_fsref(self): - return FSRef(self) - - def NewAlias(self, src=None): - return Alias(Carbon.File.NewAlias(src, self)) - - def GetCreatorType(self): - finfo = self.FSpGetFInfo() - return finfo.Creator, finfo.Type - - def SetCreatorType(self, ctor, tp): - finfo = self.FSpGetFInfo() - finfo.Creator = ctor - finfo.Type = tp - self.FSpSetFInfo(finfo) - - def GetFInfo(self): - return self.FSpGetFInfo() - - def SetFInfo(self, info): - return self.FSpSetFInfo(info) - - def GetDates(self): - catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate - catinfo, d1, d2, d3 = FSRef(self).FSGetCatalogInfo(catInfoFlags) - cdate = catinfo.createDate - mdate = catinfo.contentModDate - bdate = catinfo.backupDate - return _utc2time(cdate), _utc2time(mdate), _utc2time(bdate) - - def SetDates(self, cdate, mdate, bdate): - catInfoFlags = kFSCatInfoCreateDate|kFSCatInfoContentMod|kFSCatInfoBackupDate - catinfo = Carbon.File.FSCatalogInfo( - createDate = _time2utc(cdate), - contentModDate = _time2utc(mdate), - backupDate = _time2utc(bdate)) - FSRef(self).FSSetCatalogInfo(catInfoFlags, catinfo) - -class FSRef(Carbon.File.FSRef): - def as_fsspec(self): - return FSSpec(self) - -class Alias(Carbon.File.Alias): - - def GetInfo(self, index): - return self.GetAliasInfo(index) - - def Update(self, *args): - pass # print "Alias.Update not yet implemented" - - def Resolve(self, src=None): - fss, changed = self.ResolveAlias(src) - return FSSpec(fss), changed - -from Carbon.File import FInfo - -# Backward-compatible type names: -FSSpecType = FSSpec -FSRefType = FSRef -AliasType = Alias -FInfoType = FInfo - -# Global functions: -def ResolveAliasFile(fss, chain=1): - fss, isdir, isalias = Carbon.File.ResolveAliasFile(fss, chain) - return FSSpec(fss), isdir, isalias - -def RawFSSpec(data): - return FSSpec(rawdata=data) - -def RawAlias(data): - return Alias(rawdata=data) - -def FindApplication(*args): - raise NotImplementedError, "FindApplication no longer implemented" - -def NewAliasMinimalFromFullPath(path): - return Alias(Carbon.File.NewAliasMinimalFromFullPath(path, '', '')) - -# Another global function: -from Carbon.Folder import FindFolder - -# -# Finally the old Standard File routine emulators. -# - -_curfolder = None - -def StandardGetFile(*typelist): - """Ask for an input file, optionally specifying 4-char file types that are - allowable""" - return PromptGetFile('', *typelist) - -def PromptGetFile(prompt, *typelist): - """Ask for an input file giving the user a prompt message. Optionally you can - specifying 4-char file types that are allowable""" - import EasyDialogs - warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", - DeprecationWarning, stacklevel=2) - if not typelist: - typelist = None - fss = EasyDialogs.AskFileForOpen(message=prompt, wanted=FSSpec, - typeList=typelist, defaultLocation=_handleSetFolder()) - return fss, not fss is None - -def StandardPutFile(prompt, default=None): - """Ask the user for an output file, with a prompt. Optionally you cn supply a - default output filename""" - import EasyDialogs - warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", - DeprecationWarning, stacklevel=2) - fss = EasyDialogs.AskFileForSave(wanted=FSSpec, message=prompt, - savedFileName=default, defaultLocation=_handleSetFolder()) - return fss, not fss is None - -def SetFolder(folder): - global _curfolder - warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", - DeprecationWarning, stacklevel=2) - if _curfolder: - rv = FSSpec(_curfolder) - else: - rv = None - _curfolder = folder - return rv - -def _handleSetFolder(): - global _curfolder - rv = _curfolder - _curfolder = None - return rv - -def GetDirectory(prompt=None): - """Ask the user to select a folder. Optionally you can give a prompt.""" - import EasyDialogs - warnings.warn("macfs.StandardGetFile and friends are deprecated, use EasyDialogs.AskFileForOpen", - DeprecationWarning, stacklevel=2) - fss = EasyDialogs.AskFolder(message=prompt, wanted=FSSpec, - defaultLocation=_handleSetFolder()) - return fss, not fss is None diff --git a/Lib/plat-mac/macostools.py b/Lib/plat-mac/macostools.py index f7ce468263f..fc4861e691b 100644 --- a/Lib/plat-mac/macostools.py +++ b/Lib/plat-mac/macostools.py @@ -65,21 +65,9 @@ def mkdirs(dst): def touched(dst): """Tell the finder a file has changed. No-op on MacOSX.""" - if sys.platform != 'mac': return import warnings - warnings.filterwarnings("ignore", "macfs.*", DeprecationWarning, __name__) - import macfs - file_fss = macfs.FSSpec(dst) - vRefNum, dirID, name = file_fss.as_tuple() - dir_fss = macfs.FSSpec((vRefNum, dirID, '')) - crdate, moddate, bkdate = dir_fss.GetDates() - now = time.time() - if now == moddate: - now = now + 1 - try: - dir_fss.SetDates(crdate, now, bkdate) - except macfs.error: - pass + warnings.warn("macostools.touched() has been deprecated", + DeprecationWarning, 2) def touched_ae(dst): """Tell the finder a file has changed""" @@ -129,7 +117,6 @@ def copy(src, dst, createpath=0, copydates=1, forcetype=None): dstfsr = File.FSRef(dst) catinfo, _, _, _ = srcfsr.FSGetCatalogInfo(Files.kFSCatInfoAllDates) dstfsr.FSSetCatalogInfo(Files.kFSCatInfoAllDates, catinfo) - touched(dstfss) def copytree(src, dst, copydates=1): """Copy a complete file tree to a new destination""" diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index cba70ed16e4..01484be752c 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -1198,7 +1198,6 @@ _expectations = { test_imgfile test_linuxaudiodev test_locale - test_macfs test_macostools test_nis test_ossaudiodev @@ -1235,7 +1234,6 @@ _expectations = { test_gzip test_imgfile test_linuxaudiodev - test_macfs test_macostools test_nis test_ossaudiodev @@ -1264,7 +1262,6 @@ _expectations = { test_imgfile test_linuxaudiodev test_locale - test_macfs test_macostools test_nis test_normalization @@ -1298,7 +1295,6 @@ _expectations = { test_imgfile test_linuxaudiodev test_locale - test_macfs test_macostools test_nis test_ossaudiodev @@ -1340,7 +1336,7 @@ class _ExpectedSkips: self.expected.add('test_imageop') if not sys.platform in ("mac", "darwin"): - MAC_ONLY = ["test_macostools", "test_macfs", "test_aepack", + MAC_ONLY = ["test_macostools", "test_aepack", "test_plistlib", "test_scriptpackages"] for skip in MAC_ONLY: self.expected.add(skip) diff --git a/Lib/test/test_macfs.py b/Lib/test/test_macfs.py deleted file mode 100644 index 9c0e3a1a7c1..00000000000 --- a/Lib/test/test_macfs.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright (C) 2003 Python Software Foundation - -import unittest -import warnings -warnings.filterwarnings("ignore", "macfs.*", DeprecationWarning, __name__) -import macfs -import os -import sys -import tempfile -from test import test_support - -class TestMacfs(unittest.TestCase): - - def setUp(self): - fp = open(test_support.TESTFN, 'w') - fp.write('hello world\n') - fp.close() - - def tearDown(self): - try: - os.unlink(test_support.TESTFN) - except: - pass - - def test_fsspec(self): - fss = macfs.FSSpec(test_support.TESTFN) - self.assertEqual(os.path.realpath(test_support.TESTFN), fss.as_pathname()) - - def test_fsref(self): - fsr = macfs.FSRef(test_support.TESTFN) - self.assertEqual(os.path.realpath(test_support.TESTFN), fsr.as_pathname()) - - def test_fsref_unicode(self): - if sys.getfilesystemencoding(): - testfn_unicode = unicode(test_support.TESTFN) - fsr = macfs.FSRef(testfn_unicode) - self.assertEqual(os.path.realpath(test_support.TESTFN), fsr.as_pathname()) - - def test_coercion(self): - fss = macfs.FSSpec(test_support.TESTFN) - fsr = macfs.FSRef(test_support.TESTFN) - fss2 = fsr.as_fsspec() - fsr2 = fss.as_fsref() - self.assertEqual(fss.as_pathname(), fss2.as_pathname()) - self.assertEqual(fsr.as_pathname(), fsr2.as_pathname()) - - def test_dates(self): - import time - fss = macfs.FSSpec(test_support.TESTFN) - now = int(time.time()) - fss.SetDates(now, now+1, now+2) - dates = fss.GetDates() - self.assertEqual(dates, (now, now+1, now+2)) - - def test_ctor_type(self): - fss = macfs.FSSpec(test_support.TESTFN) - fss.SetCreatorType('Pyth', 'TEXT') - filecr, filetp = fss.GetCreatorType() - self.assertEqual((filecr, filetp), ('Pyth', 'TEXT')) - - def test_alias(self): - fss = macfs.FSSpec(test_support.TESTFN) - alias = fss.NewAlias() - fss2, changed = alias.Resolve() - self.assertEqual(changed, 0) - self.assertEqual(fss.as_pathname(), fss2.as_pathname()) - - - def test_fss_alias(self): - fss = macfs.FSSpec(test_support.TESTFN) - - -def test_main(): - test_support.run_unittest(TestMacfs) - - -if __name__ == '__main__': - test_main() diff --git a/Lib/test/test_macostools.py b/Lib/test/test_macostools.py index f3292ced329..40b690a1f6a 100644 --- a/Lib/test/test_macostools.py +++ b/Lib/test/test_macostools.py @@ -51,7 +51,11 @@ class TestMacostools(unittest.TestCase): def test_touched(self): # This really only tests that nothing unforeseen happens. - macostools.touched(test_support.TESTFN) + import warnings + with test_support.guard_warnings_filter(): + warnings.filterwarnings('ignore', 'macostools.touched*', + DeprecationWarning) + macostools.touched(test_support.TESTFN) def test_copy(self): try: diff --git a/Misc/NEWS b/Misc/NEWS index 5b979386401..10564faf618 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -883,6 +883,10 @@ Windows Mac --- +- Removed the macfs module. It had been deprecated since Python 2.5. This + lead to the deprecation of macostools.touched() as it relied solely on macfs + and was a no-op under OS X. + What's New in Python 2.5 release candidate 1? =============================================