mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			198 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
	
		
			6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""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
 |