Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
2b88dec6
Commit
2b88dec6
authored
Jan 28, 2003
by
Jack Jansen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Converted to not use macfs whenever possible.
parent
60ffc2ba
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
132 additions
and
129 deletions
+132
-129
Lib/plat-mac/aepack.py
Lib/plat-mac/aepack.py
+18
-18
Lib/plat-mac/macostools.py
Lib/plat-mac/macostools.py
+114
-111
No files found.
Lib/plat-mac/aepack.py
View file @
2b88dec6
...
...
@@ -20,7 +20,7 @@ from types import *
from
Carbon
import
AE
from
Carbon.AppleEvents
import
*
import
MacOS
import
macfs
import
Carbon.File
import
StringIO
import
aetypes
from
aetypes
import
mkenum
,
mktype
...
...
@@ -59,8 +59,9 @@ unpacker_coercions = {
# Some python types we need in the packer:
#
AEDescType
=
AE
.
AEDescType
FSSType
=
macfs
.
FSSpecType
AliasType
=
macfs
.
AliasType
FSSType
=
Carbon
.
File
.
FSSpecType
FSRefType
=
Carbon
.
File
.
FSRefType
AliasType
=
Carbon
.
File
.
AliasType
def
packkey
(
ae
,
key
,
value
):
if
hasattr
(
key
,
'which'
):
...
...
@@ -83,36 +84,35 @@ def pack(x, forcetype = None):
if
x
==
None
:
return
AE
.
AECreateDesc
(
'null'
,
''
)
t
=
type
(
x
)
if
t
==
AEDescType
:
if
isinstance
(
x
,
AEDescType
):
return
x
if
t
==
FSSType
:
if
isinstance
(
x
,
FSSType
)
:
return
AE
.
AECreateDesc
(
'fss '
,
x
.
data
)
if
t
==
AliasType
:
if
isinstance
(
x
,
AliasType
)
:
return
AE
.
AECreateDesc
(
'alis'
,
x
.
data
)
if
t
==
IntType
:
if
isinstance
(
x
,
IntType
)
:
return
AE
.
AECreateDesc
(
'long'
,
struct
.
pack
(
'l'
,
x
))
if
t
==
FloatType
:
if
isinstance
(
x
,
FloatType
)
:
return
AE
.
AECreateDesc
(
'doub'
,
struct
.
pack
(
'd'
,
x
))
if
t
==
StringType
:
if
isinstance
(
x
,
StringType
)
:
return
AE
.
AECreateDesc
(
'TEXT'
,
x
)
if
t
==
UnicodeType
:
if
isinstance
(
x
,
UnicodeType
)
:
data
=
t
.
encode
(
'utf16'
)
if
data
[:
2
]
==
'
\
xfe
\
xff
'
:
data
=
data
[
2
:]
return
AE
.
AECreateDesc
(
'utxt'
,
data
)
if
t
==
ListType
:
if
isinstance
(
x
,
ListType
)
:
list
=
AE
.
AECreateList
(
''
,
0
)
for
item
in
x
:
list
.
AEPutDesc
(
0
,
pack
(
item
))
return
list
if
t
==
DictionaryType
:
if
isinstance
(
x
,
DictionaryType
)
:
record
=
AE
.
AECreateList
(
''
,
1
)
for
key
,
value
in
x
.
items
():
packkey
(
record
,
key
,
value
)
#record.AEPutParamDesc(key, pack(value))
return
record
if
t
==
InstanceType
and
hasattr
(
x
,
'__aepack__'
):
if
hasattr
(
x
,
'__aepack__'
):
return
x
.
__aepack__
()
if
hasattr
(
x
,
'which'
):
return
AE
.
AECreateDesc
(
'TEXT'
,
x
.
which
)
...
...
@@ -144,7 +144,7 @@ def unpack(desc, formodulename=""):
record
=
desc
.
AECoerceDesc
(
'reco'
)
return
mkaetext
(
unpack
(
record
,
formodulename
))
if
t
==
typeAlias
:
return
macfs
.
RawAlias
(
desc
.
data
)
return
Carbon
.
File
.
Alias
(
rawdata
=
desc
.
data
)
# typeAppleEvent returned as unknown
if
t
==
typeBoolean
:
return
struct
.
unpack
(
'b'
,
desc
.
data
)[
0
]
...
...
@@ -165,7 +165,7 @@ def unpack(desc, formodulename=""):
data
=
desc
.
data
return
struct
.
unpack
(
'd'
,
data
)[
0
]
if
t
==
typeFSS
:
return
macfs
.
RawFSSpec
(
desc
.
data
)
return
Carbon
.
File
.
FSSpec
(
rawdata
=
desc
.
data
)
if
t
==
typeInsertionLoc
:
record
=
desc
.
AECoerceDesc
(
'reco'
)
return
mkinsertionloc
(
unpack
(
record
,
formodulename
))
...
...
@@ -353,8 +353,8 @@ def _test():
None
,
[
'a'
,
'list'
,
'of'
,
'strings'
],
{
'key1'
:
'value1'
,
'key2'
:
'value2'
},
macfs
.
FSSpec
(
':'
),
macfs
.
FSSpec
(
':'
).
NewAliasMinimal
(),
Carbon
.
File
.
FSSpec
(
os
.
curdir
),
Carbon
.
File
.
FSSpec
(
os
.
curdir
).
NewAliasMinimal
(),
aetypes
.
Enum
(
'enum'
),
aetypes
.
Type
(
'type'
),
aetypes
.
Keyword
(
'kwrd'
),
...
...
Lib/plat-mac/macostools.py
View file @
2b88dec6
...
...
@@ -4,134 +4,137 @@ mkalias(src, dst) - Create a finder alias 'dst' pointing to 'src'
copy(src, dst) - Full copy of 'src' to 'dst'
"""
import
macfs
from
Carbon
import
Res
from
Carbon
import
File
,
Files
import
os
from
MACFS
import
*
import
sys
import
MacOS
import
time
try
:
openrf
=
MacOS
.
openrf
openrf
=
MacOS
.
openrf
except
AttributeError
:
# Backward compatability
openrf
=
open
# Backward compatability
openrf
=
open
Error
=
'macostools.Error'
BUFSIZ
=
0x80000
# Copy in 0.5Mb chunks
BUFSIZ
=
0x80000
# Copy in 0.5Mb chunks
COPY_FLAGS
=
(
Files
.
kIsStationary
|
Files
.
kNameLocked
|
Files
.
kHasBundle
|
Files
.
kIsInvisible
|
Files
.
kIsAlias
)
#
# Not guaranteed to be correct or stay correct (Apple doesn't tell you
# how to do this), but it seems to work.
#
def
mkalias
(
src
,
dst
,
relative
=
None
):
"""Create a finder alias"""
srcfss
=
macfs
.
FSSpec
(
src
)
# The next line will fail under unix-Python if the destination
# doesn't exist yet. We should change this code to be fsref-based.
dstfss
=
macfs
.
FSSpec
(
dst
)
if
relative
:
relativefss
=
macfs
.
FSSpec
(
relative
)
# ik mag er geen None in stoppen :-(
alias
=
srcfss
.
NewAlias
(
relativefss
)
else
:
alias
=
srcfss
.
NewAlias
()
if
os
.
path
.
isdir
(
src
):
cr
,
tp
=
'MACS'
,
'fdrp'
else
:
cr
,
tp
=
srcfss
.
GetCreatorType
()
Res
.
FSpCreateResFile
(
dstfss
,
cr
,
tp
,
-
1
)
h
=
Res
.
FSpOpenResFile
(
dstfss
,
3
)
resource
=
Res
.
Resource
(
alias
.
data
)
resource
.
AddResource
(
'alis'
,
0
,
''
)
Res
.
CloseResFile
(
h
)
dstfinfo
=
dstfss
.
GetFInfo
()
dstfinfo
.
Flags
=
dstfinfo
.
Flags
|
0x8000
# Alias flag
dstfss
.
SetFInfo
(
dstfinfo
)
"""Create a finder alias"""
srcfsr
=
File
.
FSRef
(
src
)
# The next line will fail under unix-Python if the destination
# doesn't exist yet. We should change this code to be fsref-based.
dstdir
,
dstname
=
os
.
path
.
split
(
dst
)
if
not
dstdir
:
dstdir
=
os
.
curdir
dstdirfsr
=
File
.
FSRef
(
dstdir
)
if
relative
:
relativefsr
=
File
.
FSRef
(
relative
)
# ik mag er geen None in stoppen :-(
alias
=
File
.
FSNewAlias
(
relativefsr
,
srcfsr
)
else
:
alias
=
srcfsr
.
FSNewAliasMinimal
()
dstfsr
,
dstfss
=
Res
.
FSCreateResourceFile
(
dstdirfsr
,
unicode
(
dstname
),
File
.
FSGetResourceForkName
())
h
=
Res
.
FSOpenResourceFile
(
dstfsr
,
File
.
FSGetResourceForkName
(),
3
)
resource
=
Res
.
Resource
(
alias
.
data
)
resource
.
AddResource
(
'alis'
,
0
,
''
)
Res
.
CloseResFile
(
h
)
dstfinfo
=
dstfss
.
FSpGetFInfo
()
dstfinfo
.
Flags
=
dstfinfo
.
Flags
|
0x8000
# Alias flag
dstfss
.
FSpSetFInfo
(
dstfinfo
)
def
mkdirs
(
dst
):
"""Make directories leading to 'dst' if they don't exist yet"""
if
dst
==
''
or
os
.
path
.
exists
(
dst
):
return
head
,
tail
=
os
.
path
.
split
(
dst
)
if
os
.
sep
==
':'
and
not
':'
in
head
:
head
=
head
+
':'
mkdirs
(
head
)
os
.
mkdir
(
dst
,
0777
)
"""Make directories leading to 'dst' if they don't exist yet"""
if
dst
==
''
or
os
.
path
.
exists
(
dst
):
return
head
,
tail
=
os
.
path
.
split
(
dst
)
if
os
.
sep
==
':'
and
not
':'
in
head
:
head
=
head
+
':'
mkdirs
(
head
)
os
.
mkdir
(
dst
,
0777
)
def
touched
(
dst
):
"""Tell the finder a file has changed"""
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
"""Tell the finder a file has changed. No-op on MacOSX."""
if
sys
.
platform
!=
'mac'
:
return
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
def
touched_ae
(
dst
):
"""Tell the finder a file has changed"""
import
Finder
f
=
Finder
.
Finder
()
file_fss
=
macfs
.
FSSpec
(
dst
)
vRefNum
,
dirID
,
name
=
file_fss
.
as_tuple
()
dir_fss
=
macfs
.
FSSpec
((
vRefNum
,
dirID
,
''
)
)
f
.
update
(
dir_fss
)
"""Tell the finder a file has changed"""
pardir
=
os
.
path
.
split
(
dst
)[
0
]
if
not
pardir
:
pardir
=
os
.
curdir
import
Finder
f
=
Finder
.
Finder
(
)
f
.
update
(
File
.
FSRef
(
pardir
)
)
def
copy
(
src
,
dst
,
createpath
=
0
,
copydates
=
1
,
forcetype
=
None
):
"""Copy a file, including finder info, resource fork, etc"""
if
hasattr
(
src
,
'as_pathname'
):
src
=
src
.
as_pathname
(
)
if
hasattr
(
dst
,
'as_pathname'
)
:
dst
=
dst
.
as_pathname
(
)
if
createpath
:
mkdirs
(
os
.
path
.
split
(
dst
)[
0
]
)
ifp
=
open
(
src
,
'rb'
)
ofp
=
open
(
dst
,
'wb'
)
d
=
ifp
.
read
(
BUFSIZ
)
while
d
:
ofp
.
write
(
d
)
d
=
ifp
.
read
(
BUFSIZ
)
ifp
.
close
()
ofp
.
close
(
)
ifp
=
openrf
(
src
,
'*rb'
)
ofp
=
openrf
(
dst
,
'*wb'
)
d
=
ifp
.
read
(
BUFSIZ
)
while
d
:
ofp
.
write
(
d
)
d
=
ifp
.
read
(
BUFSIZ
)
ifp
.
close
()
ofp
.
close
(
)
srcfss
=
macfs
.
FSSpec
(
src
)
dstfss
=
macfs
.
FSSpec
(
dst
)
sf
=
srcfss
.
GetFInfo
()
df
=
dstfss
.
GetFInfo
()
df
.
Creator
,
df
.
Type
=
sf
.
Creator
,
sf
.
T
ype
if
forcetype
!=
None
:
df
.
Type
=
forcetype
df
.
Flags
=
(
sf
.
Flags
&
(
kIsStationary
|
kNameLocked
|
kHasBundle
|
kIsInvisible
|
kIsAlias
))
dstfss
.
SetFInfo
(
df
)
if
copydates
:
crdate
,
mddate
,
bkdate
=
srcfss
.
GetDates
(
)
dstfss
.
SetDates
(
crdate
,
mddate
,
bkdate
)
touched
(
dstfss
)
"""Copy a file, including finder info, resource fork, etc"""
src
=
File
.
pathname
(
src
)
dst
=
File
.
pathname
(
dst
)
if
createpath
:
mkdirs
(
os
.
path
.
split
(
dst
)[
0
]
)
ifp
=
open
(
src
,
'rb'
)
ofp
=
open
(
dst
,
'wb'
)
d
=
ifp
.
read
(
BUFSIZ
)
while
d
:
ofp
.
write
(
d
)
d
=
ifp
.
read
(
BUFSIZ
)
ifp
.
close
(
)
ofp
.
close
(
)
ifp
=
openrf
(
src
,
'*rb'
)
ofp
=
openrf
(
dst
,
'*wb'
)
d
=
ifp
.
read
(
BUFSIZ
)
while
d
:
ofp
.
write
(
d
)
d
=
ifp
.
read
(
BUFSIZ
)
ifp
.
close
(
)
ofp
.
close
(
)
srcfss
=
File
.
FSSpec
(
src
)
dstfss
=
File
.
FSSpec
(
dst
)
sf
=
srcfss
.
FSpGetFInfo
(
)
df
=
dstfss
.
FSpGetFInfo
(
)
df
.
Creator
,
df
.
Type
=
sf
.
Creator
,
sf
.
Type
if
forcetype
!=
None
:
df
.
Type
=
forcet
ype
df
.
Flags
=
(
sf
.
Flags
&
COPY_FLAGS
)
dstfss
.
FSpSetFInfo
(
df
)
if
copydates
:
srcfsr
=
File
.
FSRef
(
src
)
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"""
if
os
.
path
.
isdir
(
src
):
mkdirs
(
dst
)
files
=
os
.
listdir
(
src
)
for
f
in
files
:
copytree
(
os
.
path
.
join
(
src
,
f
),
os
.
path
.
join
(
dst
,
f
),
copydates
)
else
:
copy
(
src
,
dst
,
1
,
copydates
)
"""Copy a complete file tree to a new destination"""
if
os
.
path
.
isdir
(
src
):
mkdirs
(
dst
)
files
=
os
.
listdir
(
src
)
for
f
in
files
:
copytree
(
os
.
path
.
join
(
src
,
f
),
os
.
path
.
join
(
dst
,
f
),
copydates
)
else
:
copy
(
src
,
dst
,
1
,
copydates
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment