Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
2b88dec6
Kaydet (Commit)
2b88dec6
authored
Ock 28, 2003
tarafından
Jack Jansen
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Converted to not use macfs whenever possible.
üst
60ffc2ba
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
132 additions
and
129 deletions
+132
-129
aepack.py
Lib/plat-mac/aepack.py
+18
-18
macostools.py
Lib/plat-mac/macostools.py
+114
-111
No files found.
Lib/plat-mac/aepack.py
Dosyayı görüntüle @
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
Dosyayı görüntüle @
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