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
237284d0
Commit
237284d0
authored
Sep 29, 2013
by
Benjamin Peterson
Browse files
Options
Browse Files
Download
Plain Diff
merge heads
parents
164697bc
b6053138
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
27 additions
and
912 deletions
+27
-912
Doc/library/ssl.rst
Doc/library/ssl.rst
+5
-1
Lib/test/test_ssl.py
Lib/test/test_ssl.py
+7
-1
Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py
Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py
+0
-110
Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py
Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py
+0
-49
Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py
Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py
+0
-32
Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py
Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py
+0
-343
Mac/Tools/Doc/HelpIndexingTool/__init__.py
Mac/Tools/Doc/HelpIndexingTool/__init__.py
+0
-78
Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py
Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py
+0
-49
Mac/Tools/Doc/README
Mac/Tools/Doc/README
+0
-35
Mac/Tools/Doc/setup.py
Mac/Tools/Doc/setup.py
+0
-213
Misc/NEWS
Misc/NEWS
+5
-0
Modules/_ssl.c
Modules/_ssl.c
+10
-1
No files found.
Doc/library/ssl.rst
View file @
237284d0
...
...
@@ -659,7 +659,8 @@ SSL sockets also have the following additional methods and attributes:
.. method:: SSLSocket.getpeercert(binary_form=False)
If there is no certificate for the peer on the other end of the connection,
returns ``None``.
return ``None``. If the SSL handshake hasn't been done yet, raise
:exc:`ValueError`.
If the ``binary_form`` parameter is :const:`False`, and a certificate was
received from the peer, this method returns a :class:`dict` instance. If the
...
...
@@ -716,6 +717,9 @@ SSL sockets also have the following additional methods and attributes:
The returned dictionary includes additional items such as ``issuer``
and ``notBefore``.
.. versionchanged:: 3.4
:exc:`ValueError` is raised when the handshake isn't done.
.. method:: SSLSocket.cipher()
Returns a three-value tuple containing the name of the cipher being used, the
...
...
Lib/test/test_ssl.py
View file @
237284d0
...
...
@@ -1588,8 +1588,14 @@ else:
context
.
load_cert_chain
(
CERTFILE
)
server
=
ThreadedEchoServer
(
context
=
context
,
chatty
=
False
)
with
server
:
s
=
context
.
wrap_socket
(
socket
.
socket
())
s
=
context
.
wrap_socket
(
socket
.
socket
(),
do_handshake_on_connect
=
False
)
s
.
connect
((
HOST
,
server
.
port
))
# getpeercert() raise ValueError while the handshake isn't
# done.
with
self
.
assertRaises
(
ValueError
):
s
.
getpeercert
()
s
.
do_handshake
()
cert
=
s
.
getpeercert
()
self
.
assertTrue
(
cert
,
"Can't get peer certificate."
)
cipher
=
s
.
cipher
()
...
...
Mac/Tools/Doc/HelpIndexingTool/Help_Indexing_Tool_Suite.py
deleted
100644 → 0
View file @
164697bc
"""Suite Help Indexing Tool Suite: Special events that just the Help Indexing Tool supports.
Level 0, version 0
Generated from /Developer/Applications/Apple Help Indexing Tool.app
AETE/AEUT resource version 1/1, language 0, script 0
"""
import
aetools
import
MacOS
_code
=
'HIT '
class
Help_Indexing_Tool_Suite_Events
:
def
turn_anchor_indexing
(
self
,
_object
,
_attributes
=
{},
**
_arguments
):
"""turn anchor indexing: Turns anchor indexing on or off.
Required argument:
\
xd2
on
\
xd3
or
\
xd2
off
\
xd3
, to turn anchor indexing on or off
Keyword argument _attributes: AppleEvent attribute dictionary
"""
_code
=
'HIT '
_subcode
=
'tAnc'
if
_arguments
:
raise
TypeError
(
'No optional args expected'
)
_arguments
[
'----'
]
=
_object
_reply
,
_arguments
,
_attributes
=
self
.
send
(
_code
,
_subcode
,
_arguments
,
_attributes
)
if
_arguments
.
get
(
'errn'
,
0
):
raise
aetools
.
Error
(
aetools
.
decodeerror
(
_arguments
))
# XXXX Optionally decode result
if
_arguments
.
has_key
(
'----'
):
return
_arguments
[
'----'
]
_argmap_turn_remote_root
=
{
'with_root_url'
:
'rURL'
,
}
def
turn_remote_root
(
self
,
_object
,
_attributes
=
{},
**
_arguments
):
"""turn remote root: Turn usage of remote root for content on the web on or off. If turning
\
xd2
on
\
xd3
, supply a string as second parameter.
Required argument:
\
xd2
on
\
xd3
or
\
xd2
off
\
xd3
, to turn remote root on or off
Keyword argument with_root_url: The remote root to use, in the form of
\
xd2
http://www.apple.com/help/
\
xd3
.
Keyword argument _attributes: AppleEvent attribute dictionary
"""
_code
=
'HIT '
_subcode
=
'tRem'
aetools
.
keysubst
(
_arguments
,
self
.
_argmap_turn_remote_root
)
_arguments
[
'----'
]
=
_object
_reply
,
_arguments
,
_attributes
=
self
.
send
(
_code
,
_subcode
,
_arguments
,
_attributes
)
if
_arguments
.
get
(
'errn'
,
0
):
raise
aetools
.
Error
(
aetools
.
decodeerror
(
_arguments
))
# XXXX Optionally decode result
if
_arguments
.
has_key
(
'----'
):
return
_arguments
[
'----'
]
def
use_tokenizer
(
self
,
_object
,
_attributes
=
{},
**
_arguments
):
"""use tokenizer: Tells the indexing tool which tokenizer to use.
Required argument: Specify
\
xd2
English
\
xd3
,
\
xd2
European
\
xd3
,
\
xd2
Japanese
\
xd3
,
\
xd2
Korean
\
xd3
, or
\
xd2
Simple
\
xd3
.
Keyword argument _attributes: AppleEvent attribute dictionary
"""
_code
=
'HIT '
_subcode
=
'uTok'
if
_arguments
:
raise
TypeError
(
'No optional args expected'
)
_arguments
[
'----'
]
=
_object
_reply
,
_arguments
,
_attributes
=
self
.
send
(
_code
,
_subcode
,
_arguments
,
_attributes
)
if
_arguments
.
get
(
'errn'
,
0
):
raise
aetools
.
Error
(
aetools
.
decodeerror
(
_arguments
))
# XXXX Optionally decode result
if
_arguments
.
has_key
(
'----'
):
return
_arguments
[
'----'
]
class
application
(
aetools
.
ComponentItem
):
"""application - Application class """
want
=
'capp'
class
_Prop_idleStatus
(
aetools
.
NProperty
):
"""idleStatus - """
which
=
'sIdl'
want
=
'bool'
application
.
_superclassnames
=
[]
application
.
_privpropdict
=
{
'idleStatus'
:
_Prop_idleStatus
,
}
application
.
_privelemdict
=
{
}
#
# Indices of types declared in this module
#
_classdeclarations
=
{
'capp'
:
application
,
}
_propdeclarations
=
{
'sIdl'
:
_Prop_idleStatus
,
}
_compdeclarations
=
{
}
_enumdeclarations
=
{
}
Mac/Tools/Doc/HelpIndexingTool/Miscellaneous_Standards.py
deleted
100644 → 0
View file @
164697bc
"""Suite Miscellaneous Standards: Useful events that aren
\
xd5
t in any other suite
Level 0, version 0
Generated from /Developer/Applications/Apple Help Indexing Tool.app
AETE/AEUT resource version 1/1, language 0, script 0
"""
import
aetools
import
MacOS
_code
=
'misc'
class
Miscellaneous_Standards_Events
:
def
revert
(
self
,
_object
,
_attributes
=
{},
**
_arguments
):
"""revert: Revert an object to the most recently saved version
Required argument: object to revert
Keyword argument _attributes: AppleEvent attribute dictionary
"""
_code
=
'misc'
_subcode
=
'rvrt'
if
_arguments
:
raise
TypeError
(
'No optional args expected'
)
_arguments
[
'----'
]
=
_object
_reply
,
_arguments
,
_attributes
=
self
.
send
(
_code
,
_subcode
,
_arguments
,
_attributes
)
if
_arguments
.
get
(
'errn'
,
0
):
raise
aetools
.
Error
(
aetools
.
decodeerror
(
_arguments
))
# XXXX Optionally decode result
if
_arguments
.
has_key
(
'----'
):
return
_arguments
[
'----'
]
#
# Indices of types declared in this module
#
_classdeclarations
=
{
}
_propdeclarations
=
{
}
_compdeclarations
=
{
}
_enumdeclarations
=
{
}
Mac/Tools/Doc/HelpIndexingTool/Required_Suite.py
deleted
100644 → 0
View file @
164697bc
"""Suite Required Suite: Terms that every application should support
Level 1, version 1
Generated from /Developer/Applications/Apple Help Indexing Tool.app
AETE/AEUT resource version 1/1, language 0, script 0
"""
import
aetools
import
MacOS
_code
=
'reqd'
from
StdSuites.Required_Suite
import
*
class
Required_Suite_Events
(
Required_Suite_Events
):
pass
#
# Indices of types declared in this module
#
_classdeclarations
=
{
}
_propdeclarations
=
{
}
_compdeclarations
=
{
}
_enumdeclarations
=
{
}
Mac/Tools/Doc/HelpIndexingTool/Standard_Suite.py
deleted
100644 → 0
View file @
164697bc
This diff is collapsed.
Click to expand it.
Mac/Tools/Doc/HelpIndexingTool/__init__.py
deleted
100644 → 0
View file @
164697bc
"""
Package generated from /Developer/Applications/Apple Help Indexing Tool.app
"""
import
aetools
Error
=
aetools
.
Error
import
Standard_Suite
import
Help_Indexing_Tool_Suite
import
odds_and_ends
import
Miscellaneous_Standards
import
Required_Suite
_code_to_module
=
{
'CoRe'
:
Standard_Suite
,
'HIT '
:
Help_Indexing_Tool_Suite
,
'Odds'
:
odds_and_ends
,
'misc'
:
Miscellaneous_Standards
,
'reqd'
:
Required_Suite
,
}
_code_to_fullname
=
{
'CoRe'
:
(
'HelpIndexingTool.Standard_Suite'
,
'Standard_Suite'
),
'HIT '
:
(
'HelpIndexingTool.Help_Indexing_Tool_Suite'
,
'Help_Indexing_Tool_Suite'
),
'Odds'
:
(
'HelpIndexingTool.odds_and_ends'
,
'odds_and_ends'
),
'misc'
:
(
'HelpIndexingTool.Miscellaneous_Standards'
,
'Miscellaneous_Standards'
),
'reqd'
:
(
'HelpIndexingTool.Required_Suite'
,
'Required_Suite'
),
}
from
Standard_Suite
import
*
from
Help_Indexing_Tool_Suite
import
*
from
odds_and_ends
import
*
from
Miscellaneous_Standards
import
*
from
Required_Suite
import
*
def
getbaseclasses
(
v
):
if
not
getattr
(
v
,
'_propdict'
,
None
):
v
.
_propdict
=
{}
v
.
_elemdict
=
{}
for
superclassname
in
getattr
(
v
,
'_superclassnames'
,
[]):
superclass
=
eval
(
superclassname
)
getbaseclasses
(
superclass
)
v
.
_propdict
.
update
(
getattr
(
superclass
,
'_propdict'
,
{}))
v
.
_elemdict
.
update
(
getattr
(
superclass
,
'_elemdict'
,
{}))
v
.
_propdict
.
update
(
getattr
(
v
,
'_privpropdict'
,
{}))
v
.
_elemdict
.
update
(
getattr
(
v
,
'_privelemdict'
,
{}))
import
StdSuites
#
# Set property and element dictionaries now that all classes have been defined
#
getbaseclasses
(
window
)
getbaseclasses
(
application
)
getbaseclasses
(
document
)
getbaseclasses
(
application
)
#
# Indices of types declared in this module
#
_classdeclarations
=
{
'cwin'
:
window
,
'capp'
:
application
,
'docu'
:
document
,
'capp'
:
application
,
}
class
HelpIndexingTool
(
Standard_Suite_Events
,
Help_Indexing_Tool_Suite_Events
,
odds_and_ends_Events
,
Miscellaneous_Standards_Events
,
Required_Suite_Events
,
aetools
.
TalkTo
):
_signature
=
'hiti'
_moduleName
=
'HelpIndexingTool'
Mac/Tools/Doc/HelpIndexingTool/odds_and_ends.py
deleted
100644 → 0
View file @
164697bc
"""Suite odds and ends: Things that should be in some standard suite, but aren
\
xd5
t
Level 1, version 1
Generated from /Developer/Applications/Apple Help Indexing Tool.app
AETE/AEUT resource version 1/1, language 0, script 0
"""
import
aetools
import
MacOS
_code
=
'Odds'
class
odds_and_ends_Events
:
def
select
(
self
,
_object
=
None
,
_attributes
=
{},
**
_arguments
):
"""select: Select the specified object
Required argument: the object to select
Keyword argument _attributes: AppleEvent attribute dictionary
"""
_code
=
'misc'
_subcode
=
'slct'
if
_arguments
:
raise
TypeError
(
'No optional args expected'
)
_arguments
[
'----'
]
=
_object
_reply
,
_arguments
,
_attributes
=
self
.
send
(
_code
,
_subcode
,
_arguments
,
_attributes
)
if
_arguments
.
get
(
'errn'
,
0
):
raise
aetools
.
Error
(
aetools
.
decodeerror
(
_arguments
))
# XXXX Optionally decode result
if
_arguments
.
has_key
(
'----'
):
return
_arguments
[
'----'
]
#
# Indices of types declared in this module
#
_classdeclarations
=
{
}
_propdeclarations
=
{
}
_compdeclarations
=
{
}
_enumdeclarations
=
{
}
Mac/Tools/Doc/README
deleted
100644 → 0
View file @
164697bc
In this directory you can build the Python documentation in a form that
is suitable for access with Apple Help Viewer. This will enable the
"Python Documentation" menu entries in the MacPython IDE Help menu.
Unfortunately the procedure to build the docs is not very streamlined.
First, edit setup.py. At the top, edit MAJOR_VERSION and MINOR_VERSION,
and check that DESTDIR makes sense. The documentation will be installed
inside PythonIDE.app.
In DocBuild.initialize_options, set self.download to True if you want to
download the docs. Set it to False if you want to build the docs from
the source tree, but this requires LaTex and lots of other stuff.
Doable, but not easy.
Second, if you want to download the docs you may need to do a couple
more edits. The way the docs are packaged will often change between
major releases. Fiddle DocBuild.downloadDocs to make it do the right
thing (download the docs from python.org, unpack them, rename the
directory to "build/html").
After these edits you should be ready to roll. "pythonw setup.py build"
should download and unpack (or build) the docs. Next, it will do some
magic to make the docs indexable. Finally, it will run the Apple Help
Indexing Tool. (This last step is the reason you must use "pythonw" as
opposed to "python"). Usually it will time out while waiting for AHIT to
do its work. Wait until AHIT is done.
Now you're ready to install with "python setup.py install".
After this is done test your work. Fire up PythonIDE, and check that
Help->Python Documentation brings up the documentation in the Help Viewer.
Also open an IDE edit window, type something like "import sys", select
"import", and use Help->Lookup in Python Documentation to check that the
index has been generated correctly.
Mac/Tools/Doc/setup.py
deleted
100644 → 0
View file @
164697bc
# Build and install an Apple Help Viewer compatible version of the Python
# documentation into the framework.
# Code by Bill Fancher, with some modifications by Jack Jansen.
#
# You must run this as a two-step process
# 1. python setupDocs.py build
# 2. Wait for Apple Help Indexing Tool to finish
# 3. python setupDocs.py install
#
# To do:
# - test whether the docs are available locally before downloading
# - fix buildDocsFromSource
# - Get documentation version from sys.version, fallback to 2.2.1
# - See if we can somehow detect that Apple Help Indexing Tool is finished
# - data_files to setup() doesn't seem the right way to pass the arguments
#
import
sys
,
os
,
re
from
distutils.cmd
import
Command
from
distutils.command.build
import
build
from
distutils.core
import
setup
from
distutils.file_util
import
copy_file
from
distutils.dir_util
import
copy_tree
from
distutils.log
import
log
from
distutils.spawn
import
spawn
from
distutils
import
sysconfig
,
dep_util
from
distutils.util
import
change_root
import
HelpIndexingTool
import
Carbon.File
import
time
MAJOR_VERSION
=
'2.4'
MINOR_VERSION
=
'2.4.1'
DESTDIR
=
'/Applications/MacPython-%s/PythonIDE.app/Contents/Resources/English.lproj/PythonDocumentation'
%
MAJOR_VERSION
class
DocBuild
(
build
):
def
initialize_options
(
self
):
build
.
initialize_options
(
self
)
self
.
build_html
=
None
self
.
build_dest
=
None
self
.
download
=
1
self
.
doc_version
=
MINOR_VERSION
# Only needed if download is true
def
finalize_options
(
self
):
build
.
finalize_options
(
self
)
if
self
.
build_html
is
None
:
self
.
build_html
=
os
.
path
.
join
(
self
.
build_base
,
'html'
)
if
self
.
build_dest
is
None
:
self
.
build_dest
=
os
.
path
.
join
(
self
.
build_base
,
'PythonDocumentation'
)
def
spawn
(
self
,
*
args
):
spawn
(
args
,
1
,
self
.
verbose
,
self
.
dry_run
)
def
downloadDocs
(
self
):
workdir
=
os
.
getcwd
()
# XXX Note: the next strings may change from version to version
url
=
'http://www.python.org/ftp/python/doc/%s/html-%s.tar.bz2'
%
\
(
self
.
doc_version
,
self
.
doc_version
)
tarfile
=
'html-%s.tar.bz2'
%
self
.
doc_version
dirname
=
'Python-Docs-%s'
%
self
.
doc_version
if
os
.
path
.
exists
(
self
.
build_html
):
raise
RuntimeError
(
'%s: already exists, please remove and try again'
%
self
.
build_html
)
os
.
chdir
(
self
.
build_base
)
self
.
spawn
(
'curl'
,
'-O'
,
url
)
self
.
spawn
(
'tar'
,
'-xjf'
,
tarfile
)
os
.
rename
(
dirname
,
'html'
)
os
.
chdir
(
workdir
)
## print "** Please unpack %s" % os.path.join(self.build_base, tarfile)
## print "** Unpack the files into %s" % self.build_html
## raise RuntimeError, "You need to unpack the docs manually"
def
buildDocsFromSource
(
self
):
srcdir
=
'../../..'
docdir
=
os
.
path
.
join
(
srcdir
,
'Doc'
)
htmldir
=
os
.
path
.
join
(
docdir
,
'html'
)
spawn
((
'make'
,
'--directory'
,
docdir
,
'html'
),
1
,
self
.
verbose
,
self
.
dry_run
)
self
.
mkpath
(
self
.
build_html
)
copy_tree
(
htmldir
,
self
.
build_html
)
def
ensureHtml
(
self
):
if
not
os
.
path
.
exists
(
self
.
build_html
):
if
self
.
download
:
self
.
downloadDocs
()
else
:
self
.
buildDocsFromSource
()
def
hackIndex
(
self
):
ind_html
=
'index.html'
#print 'self.build_dest =', self.build_dest
hackedIndex
=
file
(
os
.
path
.
join
(
self
.
build_dest
,
ind_html
),
'w'
)
origIndex
=
file
(
os
.
path
.
join
(
self
.
build_html
,
ind_html
))
r
=
re
.
compile
(
'<style type="text/css">.*</style>'
,
re
.
DOTALL
)
hackedIndex
.
write
(
r
.
sub
(
'<META NAME="AppleTitle" CONTENT="Python Documentation">'
,
origIndex
.
read
()))
def
hackFile
(
self
,
d
,
f
):
origPath
=
os
.
path
.
join
(
d
,
f
)
assert
(
origPath
[:
len
(
self
.
build_html
)]
==
self
.
build_html
)
outPath
=
os
.
path
.
join
(
self
.
build_dest
,
d
[
len
(
self
.
build_html
)
+
1
:],
f
)
(
name
,
ext
)
=
os
.
path
.
splitext
(
f
)
if
os
.
path
.
isdir
(
origPath
):
self
.
mkpath
(
outPath
)
elif
ext
==
'.html'
:
if
self
.
verbose
:
print
(
'hacking %s to %s'
%
(
origPath
,
outPath
))
hackedFile
=
file
(
outPath
,
'w'
)
origFile
=
file
(
origPath
,
'r'
)
hackedFile
.
write
(
self
.
r
.
sub
(
'<dl><dt><dd>'
,
origFile
.
read
()))
else
:
copy_file
(
origPath
,
outPath
)
def
hackHtml
(
self
):
self
.
r
=
re
.
compile
(
'<dl><dd>'
)
os
.
walk
(
self
.
build_html
,
self
.
visit
,
None
)
def
visit
(
self
,
dummy
,
dirname
,
filenames
):
for
f
in
filenames
:
self
.
hackFile
(
dirname
,
f
)
def
makeHelpIndex
(
self
):
app
=
'/Developer/Applications/Apple Help Indexing Tool.app'
self
.
spawn
(
'open'
,
'-a'
,
app
,
self
.
build_dest
)
print
(
"Please wait until Apple Help Indexing Tool finishes before installing"
)
def
makeHelpIndex
(
self
):
app
=
HelpIndexingTool
.
HelpIndexingTool
(
start
=
1
)
app
.
open
(
Carbon
.
File
.
FSSpec
(
self
.
build_dest
))
sys
.
stderr
.
write
(
"Waiting for Help Indexing Tool to start..."
)
while
1
:
# This is bad design in the suite generation code!
idle
=
app
.
_get
(
HelpIndexingTool
.
Help_Indexing_Tool_Suite
.
_Prop_idleStatus
())
time
.
sleep
(
10
)
if
not
idle
:
break
sys
.
stderr
.
write
(
"."
)
sys
.
stderr
.
write
(
"
\
n
"
)
sys
.
stderr
.
write
(
"Waiting for Help Indexing Tool to finish..."
)
while
1
:
# This is bad design in the suite generation code!
idle
=
app
.
_get
(
HelpIndexingTool
.
Help_Indexing_Tool_Suite
.
_Prop_idleStatus
())
time
.
sleep
(
10
)
if
idle
:
break
sys
.
stderr
.
write
(
"."
)
sys
.
stderr
.
write
(
"
\
n
"
)
def
run
(
self
):
self
.
ensure_finalized
()
self
.
mkpath
(
self
.
build_base
)
self
.
ensureHtml
()
if
not
os
.
path
.
isdir
(
self
.
build_html
):
raise
RuntimeError
(
"Can't find source folder for documentation."
)
self
.
mkpath
(
self
.
build_dest
)
if
dep_util
.
newer
(
os
.
path
.
join
(
self
.
build_html
,
'index.html'
),
os
.
path
.
join
(
self
.
build_dest
,
'index.html'
)):
self
.
mkpath
(
self
.
build_dest
)
self
.
hackHtml
()
self
.
hackIndex
()
self
.
makeHelpIndex
()
class
AHVDocInstall
(
Command
):
description
=
"install Apple Help Viewer html files"
user_options
=
[(
'install-doc='
,
'd'
,
'directory to install HTML tree'
),
(
'root='
,
None
,
"install everything relative to this alternate root directory"
),
]
def
initialize_options
(
self
):
self
.
build_dest
=
None
self
.
install_doc
=
None
self
.
prefix
=
None
self
.
root
=
None
def
finalize_options
(
self
):
self
.
set_undefined_options
(
'install'
,
(
'prefix'
,
'prefix'
),
(
'root'
,
'root'
))
# import pdb ; pdb.set_trace()
build_cmd
=
self
.
get_finalized_command
(
'build'
)
if
self
.
build_dest
is
None
:
build_cmd
=
self
.
get_finalized_command
(
'build'
)
self
.
build_dest
=
build_cmd
.
build_dest
if
self
.
install_doc
is
None
:
self
.
install_doc
=
os
.
path
.
join
(
self
.
prefix
,
DESTDIR
)
print
(
'INSTALL'
,
self
.
build_dest
,
'->'
,
self
.
install_doc
)
def
run
(
self
):
self
.
finalize_options
()
self
.
ensure_finalized
()
print
(
"Running Installer"
)
instloc
=
self
.
install_doc
if
self
.
root
:
instloc
=
change_root
(
self
.
root
,
instloc
)
self
.
mkpath
(
instloc
)
copy_tree
(
self
.
build_dest
,
instloc
)
print
(
"Installation complete"
)
def
mungeVersion
(
infile
,
outfile
):
i
=
file
(
infile
,
'r'
)
o
=
file
(
outfile
,
'w'
)
o
.
write
(
re
.
sub
(
'
\
$
\
(VERSION
\
)
'
,sysconfig.get_config_var('
VERSION
'),i.read()))
i.close()
o.close()
def main():
# turn off warnings when deprecated modules are imported
## import warnings
## warnings.filterwarnings("ignore",category=DeprecationWarning)
setup(name = '
Documentation
',
version = '
%
d
.
%
d
' % sys.version_info[:2],
cmdclass = {'
install_data
':AHVDocInstall, '
build
':DocBuild},
data_files = ['
dummy
'],
)
if __name__ == '
__main__
':
main()
Misc/NEWS
View file @
237284d0
...
...
@@ -15,6 +15,11 @@ Core and Builtins
Library
-------
-
Properly
initialize
all
fields
of
a
SSL
object
after
allocation
.
-
Issue
#
19095
:
SSLSocket
.
getpeercert
()
now
raises
ValueError
when
the
SSL
handshake
hasn
't been done.
- Issue #4366: Fix building extensions on all platforms when --enable-shared
is used.
...
...
Modules/_ssl.c
View file @
237284d0
...
...
@@ -220,7 +220,8 @@ typedef struct {
SSL
*
ssl
;
PySSLContext
*
ctx
;
/* weakref to SSL context */
X509
*
peer_cert
;
int
shutdown_seen_zero
;
char
shutdown_seen_zero
;
char
handshake_done
;
enum
py_ssl_server_or_client
socket_type
;
}
PySSLSocket
;
...
...
@@ -485,6 +486,8 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock,
self
->
ssl
=
NULL
;
self
->
Socket
=
NULL
;
self
->
ctx
=
sslctx
;
self
->
shutdown_seen_zero
=
0
;
self
->
handshake_done
=
0
;
Py_INCREF
(
sslctx
);
/* Make sure the SSL error state is initialized */
...
...
@@ -590,6 +593,7 @@ static PyObject *PySSL_SSLdo_handshake(PySSLSocket *self)
PySSL_BEGIN_ALLOW_THREADS
self
->
peer_cert
=
SSL_get_peer_certificate
(
self
->
ssl
);
PySSL_END_ALLOW_THREADS
self
->
handshake_done
=
1
;
Py_INCREF
(
Py_None
);
return
Py_None
;
...
...
@@ -1153,6 +1157,11 @@ PySSL_peercert(PySSLSocket *self, PyObject *args)
if
(
!
PyArg_ParseTuple
(
args
,
"|p:peer_certificate"
,
&
binary_mode
))
return
NULL
;
if
(
!
self
->
handshake_done
)
{
PyErr_SetString
(
PyExc_ValueError
,
"handshake not done yet"
);
return
NULL
;
}
if
(
!
self
->
peer_cert
)
Py_RETURN_NONE
;
...
...
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