Office365-rest-python-client: рдкрд╛рдпрдерди 3 рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдЬреБрд▓ре░ 2017  ┬╖  24рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vgrem/Office365-REST-Python-Client

рдХреНрдпрд╛ рдкрд╛рдпрдерди 3 рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ vic-by рдПрдХ рд╣рд╛рд▓рд┐рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреА рд╣реИ: https://github.com/vgrem/Office365-REST-Python-Client/commit/90731f
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд╕рдордп, рдЗрд╕ рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреЛ рдЕрднреА рддрдХ pypi рдкрд░ рдкреБрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк pip install Office365-REST-Python-Client рддреЛ рдЖрдкрдХреЛ рд╡рд╣ рдХреЛрдб рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдЧрд┐рдЯ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛: pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git

рд╕рднреА 24 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗ,

рдпрд╣ рдкрд╛рдпрдерди рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: 2 рдФрд░ 3, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рджреЗрдВред рдЖрдкрдХреЛ рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рдп рд╢реАрдШреНрд░ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рд╡рд╣ рдиреАрдЪреЗ рд╣реИ
`------------------------------------------------- --------------------------
рдореЙрдбреНрдпреВрд▓ рдиреЙрдЯрдлрд╛рдЙрдВрдб рдПрд░рд░ рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо)
рдореЗрдВ()
1 рдЖрдпрд╛рдд рдЬреЛрдВрд╕
2
----> 3 рд╕реЗ office365.runtime.auth.authentication_context рдЖрдпрд╛рдд AuthenticationContext
4 Office365 рд╕реЗ.runtime.client_request рдЖрдпрд╛рдд ClientRequest
5 Office365.runtime.utilities.request_options рд╕реЗ RequestOptions рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдореЙрдбреНрдпреВрд▓ рдиреЙрдЯрдлрд╛рдЙрдВрдб рдПрд░рд░: 'рдСрдлрд┐рд╕ 365' рдирд╛рдо рдХрд╛ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ

рдФрд░ рд╣рд╛рдБ, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╛рдЗрдк рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ :)

рдирдорд╕реНрддреЗ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИред рдФрд░ рдореИрдВ FedAuth рдФрд░ rtFa рдХреБрдХреАрдЬрд╝ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рд╕рд╛рдЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдирд┐рд╖рд┐рджреНрдз рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
'рдЖрдпрд╛рдд рдЕрдиреБрд░реЛрдз'

url=" https://login.microsoftonline.com/extSTS.srf "
рд╣реЗрдбрд░ = {'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░': 'рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдЬреЗрд╕рди'}
TopLevelUrl=' https://XXXX.sharepoint.com '
рдкрде='рд╕реА:\PSR\PythonFiles\SharePointOnlineXML.txt'

рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА = рдЦреБрд▓рд╛ (рдкрде, 'рдЖрд░')
SharepointOnlineAuth = filecontent.read ()
SharepointOnlineAuth=SharepointOnlineAuth.format('[email protected]', 'рдкрд╛рд╕рд╡рд░реНрдб', TopLevelUrl)

рдЖрдЗрдП рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВ

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рдЕрдиреБрд░реЛрдзред рдкреЛрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓, рдбреЗрдЯрд╛ = рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯрдСрдирд▓рд╛рдЗрдирдПрде, рд╣реЗрдбрд░ = рд╣реЗрдбрд░)
рдПрд╕ = str (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╕рд╛рдордЧреНрд░реА)
рдкреНрд░рд╛рд░рдВрдн = [рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ (рд▓реЗрди (рдУрдВ)) рдпрджрд┐ рдПрд╕ [рд╕реНрдерд┐рддрд┐:]ред рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ('')] [0]
рд╕рдорд╛рдкреНрдд = [рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ (рд▓реЗрди (рдУрдВ)) рдЕрдЧрд░ рдПрд╕ [рд╕реНрдерд┐рддрд┐:]ред рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ('
')] [0]
рд▓реЙрдЧрд┐рди рд░рд┐рд╕реНрдкрд╛рдВрд╕ = рдПрд╕ [рдкреНрд░рд╛рд░рдВрдн + рекреж: рд╕рдорд╛рдкреНрдд]

рдЕрдм, рдСрдирд▓рд╛рдЗрди SharePoint рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдХреАрдЬрд╝ рд▓рд╛рдиреЗ рджреЗрдВ

url=TopLevelUrl+'/_forms/default.aspx?wa=wsignin1.0'
рд╢реАрд░реНрд╖рд▓реЗрдЦ = {'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░': 'рдЕрдиреБрдкреНрд░рдпреЛрдЧ/x-www-form-urlencoded'}
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рдЕрдиреБрд░реЛрдзред рдкреЛрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓, рдбреЗрдЯрд╛ = рд▓реЙрдЧрд┐рди рд░рд┐рд╕реНрдкреЙрдиреНрд╕, рд╣реЗрдбрд░ = рд╣реЗрдбрд░)

рдЙрдкрд░реЛрдХреНрдд рдХреЙрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреБрдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рдЖрд░рдИрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

url=TopLevelUrl+'/_api/web/siteusers'
рдкреНрд░рд┐рдВрдЯ (рдпреВрдЖрд░рдПрд▓)
_Fedauth='FedAuth={}'.format(response.cookies['FedAuth'])
_rtFa='rtFa={}'.format(response.cookies['rtFa'])
_FinalDict={'рдХреБрдХреА':_Fedauth+','+_rtFa}

рд╣реЗрдбрд░ = {'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░': 'рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдПрдХреНрд╕-www-form-urlencoded',
'рдпреВрдЬрд░-рдПрдЬреЗрдВрдЯ':'рдореЛрдЬрд╝рд┐рд▓рд╛/5.0 (рд╡рд┐рдВрдбреЛрдЬ рдПрдирдЯреА 10.0; рд╡рд┐рди64; x64) рдРрдкреНрдкрд▓рд╡реЗрдмрдХрд┐рдЯ/537.36 (рдХреЗрдПрдЪрдЯреАрдПрдордПрд▓, рдЬреИрд╕реЗ рдЧреЗрдХреЛ) рдХреНрд░реЛрдо/59.0.3071.115 рд╕рдлрд╛рд░реА/537.36'}
рд╣реЗрдбрд░.рдЕрдкрдбреЗрдЯ (_FinalDict)

рдкреНрд░рд┐рдВрдЯ (рд╣реЗрдбрд░)

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рдЕрдиреБрд░реЛрдзред рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдпреВрдЖрд░рдПрд▓, рд╢реАрд░реНрд╖рд▓реЗрдЦ = рд╢реАрд░реНрд╖рд▓реЗрдЦ)
рдкреНрд░рд┐рдВрдЯ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) `

Python3.4 рдкрд░ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ:

_Traceback (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рдлрд╝рд╛рдЗрд▓ "auth_sharepoint_online365.py", рд▓рд╛рдЗрди 2, in
Office365.runtime.auth.authentication_context рд╕реЗ рдЖрдпрд╛рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╕рдВрдЧ
рдлрд╝рд╛рдЗрд▓ "authentication_context.py", рд▓рд╛рдЗрди 2, in
Office365.runtime.auth.saml_token_provider рд╕реЗ SamlTokenProvider рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓ "saml_token_provider.py", рд▓рд╛рдЗрди 2, in
рдЖрдпрд╛рдд urlparse
ImportError: ' urlparse ' _ рдирд╛рдо рдХрд╛ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ

https://docs.python.org/2/library/urlparse.html рдХреЗ рдЕрдиреБрд╕рд╛рд░:

рдкрд╛рдпрдерди 3 рдореЗрдВ urlparse рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ urllib.parse рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕реЗ https://github.com/parthrawal/Python.O365 рдЖрдЬрд╝рдорд╛рдПрдВ рдореИрдВрдиреЗ .py рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреА рд╣реИ рдЬреЛ SharePoint рдСрдирд▓рд╛рдЗрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбрд┐рдХреНрд╢рдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рднреА рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдорджрдж рдЪрд╛рд╣рд┐рдП рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@ vic-by рдПрдХ рд╣рд╛рд▓рд┐рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддреА рд╣реИ: https://github.com/vgrem/Office365-REST-Python-Client/commit/90731f
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд╕рдордп, рдЗрд╕ рдХрдорд┐рдЯрдореЗрдВрдЯ рдХреЛ рдЕрднреА рддрдХ pypi рдкрд░ рдкреБрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк pip install Office365-REST-Python-Client рддреЛ рдЖрдкрдХреЛ рд╡рд╣ рдХреЛрдб рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдЧрд┐рдЯ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛: pip install git+https://github.com/vgrem/Office365-REST-Python-Client.git

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬрдЧрд░ 3 рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдЬрдЧрд░ 3 рдХреЗ рддрд╣рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪрд▓рд╛рддреЗ рд╕рдордп рдореБрдЭреЗ рдПрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред рдпрд╣ рд╕реВрдЪреА рдХрд░рддреЗ рд╕рдордп рд╣реБрдЖред рдЧреБрдг рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд╛рдпреА рд╣реИред

    ctx = ClientContext(url, ctx_auth)
    web = ctx.web
    ctx.load(web)
    ctx.execute_query()
    lists = web.lists
    ctx.load(lists)
    ctx.execute_query()
    lists[0].properties
 in <module>()
---> 16         lists[0].properties

c:\python\python35\lib\encodings\cp850.py in encode(self, input, final)
     17 class IncrementalEncoder(codecs.IncrementalEncoder):
     18     def encode(self, input, final=False):
---> 19         return codecs.charmap_encode(input,self.errors,encoding_map)[0]
     20
     21 class IncrementalDecoder(codecs.IncrementalDecoder):

UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position 11052: character maps to <undefined>

рдореБрдЭреЗ рдкрд╛рдпрдерди 3 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ: "ModuleNotFoundError: 'urlparse' рдирд╛рдо рдХрд╛ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ"
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг SharePointOnline.py: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдлрд▓рддрд╛ -> рджрд░реНрдЬ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрд╛рд╕рд╡рд░реНрдб рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЖрдЬрдорд╛рдпрд╛ рд╣реИ https://github.com/parthrawal/Python.O365 рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрд╕реА рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

рд╣рд╛рдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ:

if __name__ == "__main__":
    UserName = "[email protected]"
    # UserName = "[email protected]"
    Password = "my_password"
    TopLevelUrl = "https://company.sharepoint.com/"
    SPOnlineHeaders(UserName, Password, TopLevelUrl)

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛ рджреА рдЧрдИ рд╣реИ:

....
IndexError: list index out of range

рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ SPOnlineHeaders рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб (рдкреНрд░рд┐рдВрдЯ (s)) рдбрд╛рд▓рд╛ рд╣реИ:

response = requests.post(url, data=SharepointOnlineAuth, headers=headers)
s = str(response.content)
print(s)

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:
... wst:FailedAuthentication... рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрд╛рд╕рд╡рд░реНрдб рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ...

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рд╣реИ

рд╡рд╣ рд╕рд╣реА рд╣реИред рдореИрдВ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣реА рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдЧрд▓рдд рдкрд╛рд╕рд╡рд░реНрдб рдбрд╛рд▓рд╛ рддреЛ рдпрд╣ "рдЗрдВрдбреЗрдХреНрд╕ рдПрд░рд░: рд▓рд┐рд╕реНрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдЖрдЙрдЯ рдСрдл рд░реЗрдВрдЬ" рдПрд░рд░ рдлреЗрдВрдХрддрд╛ рд╣реИред

рд╣рд╛рдВред рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣реА рд╣реИред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рддреЗ рд╕рдордп рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓рд┐рдВрдХ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ: https://company.sharepoint.com/

рдПрдВрдЯрд░ рджрдмрд╛рддреЗ рд╕рдордп рдореИрдВ рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВ: https://login.microsoftonline.com/575...71a/oauth2/authorize?client_id=...&response_mode=form_post&response_type=code%20id_token&resource=...&scope=openid&nonce =....&redirect_uri=https :%2F%2Fcompany.sharepoint.com%2F_forms%2Fdefault.aspx&wsucxt=1&client-request-id=....

рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкрд░ рдУрдХреЗ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рджреЛ рдлрд╛рд╕реНрдЯ рд▓рд┐рдВрдХ рджреЗрдЦреЗ...
рдкрд╣рд▓рд╛: https://sts.company.com/adfs/ls/wia?client-request-id=...&wa=wsignin1.0&wtrealm=urn%3afederation%3aMicrosoftOnline&wctx=LoginOptions%3D3%26estsredirect%3d2%26estsrequest%ред ...&cbcxt=&username=myemail%company.com&mkt=&lc=
... рдФрд░ ...
рджреВрд╕рд░рд╛: https://login.microsoftonline.com/login.srf?client-request-id=...

рдФрд░ рдЕрдВрдд рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреГрд╖реНрда рдкрд░ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ:
https://company.sharepoint.com/

рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ 403 рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рдЕрдиреБрд░реЛрдзред рдкреЛрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓, рдбреЗрдЯрд╛ = рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯрдСрдирд▓рд╛рдЗрдирдПрде, рд╣реЗрдбрд░ = рд╣реЗрдбрд░)
рдПрд╕ = str (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рд╕рд╛рдордЧреНрд░реА)
рдкреНрд░рд┐рдВрдЯ
"рдмреА'403 рдирд┐рд╖рд┐рджреНрдз'"

рдореИрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛

url=" https://login.microsoftonline.com/extSTS.srf "

urlpar

рдореБрдЭреЗ urlparse (рдкрд╛рдпрдерди 3.6.5 :: рдПрдирд╛рдХреЛрдВрдбрд╛, рдЗрдВрдХред) рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрд╕реЗ saml_token_provider.py: from urllib.parse import urlparse [...] url = urlparse(self.url) рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рддрдм рдореБрдЭреЗ рд╡реЗрдм рдпрд╛рдж рдЖ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛: pip install lpthw.web ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ:
from web import Web File "C:\ProgramData\Anaconda3\lib\site-packages\web\__init__.py", line 14, in <module> import utils, db, net, wsgi, http, webapi, httpserver, debugerror ModuleNotFoundError: No module named 'utils'

рдПрдирд╛рдХреЛрдВрдбрд╛ рдореЗрдВ рдмрд░реНрддрди рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

рдПрдирд╛рдХреЛрдВрдбрд╛ рдореЗрдВ рдмрд░реНрддрди рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рджред рдмрд░реНрддрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдбреАрдмреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА ... рдкреИрдХреЗрдЬ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ.txt рдЬрд╛рдБрдЪ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдЕрдм рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ python3 рдХреЗ рд▓рд┐рдП рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ:
print "var", var ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print("var", var)?

рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдкрд░ рдЬрд╛рдПрдВ:
https://docs.python.org/3.0/whatsnew/3.0.html

@viogp рдЕрдкрдиреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ

рдирдорд╕реНрддреЗред рдореБрдЭреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ: AADSTS90023: рдЕрдорд╛рдиреНрдп STS рдЕрдиреБрд░реЛрдзред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдХреАрдЬрд╝ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ
рд╡рд╛рдкрд╕реА 'FedAuth=' + self.FedAuth + '; rtFa=' + self.rtFa
рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рдХреЗрд╡рд▓ str (рдирд╣реАрдВ "noneType") рдХреЛ str . рдореЗрдВ рд╕рдорд╛рдкреНтАНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдХреЛрдИ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЪреВрдВрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдкрд╛рдпрдерди 2 рдФрд░ рдкрд╛рдпрдерди 3 рд░рдирдЯрд╛рдЗрдо рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред

рдирдорд╕реНрддреЗ,

рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ "ModuleNotFoundError: 'office365.sharepoint.client_context' рдирд╛рдордХ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ" рдЬрдм рдореИрдВ рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди pycharm рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдкрд╛рдЗрдерди рд╕рд┐рд╕реНрдЯрдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рддреЛ рдореИрдВ рдкрд╛рдпрдерди 3.6 рдпрд╛ 3.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдХреГрдкрдпрд╛ рд╕рд╣рд╛рдпрддрд╛ рдХреАрдЬрд┐рдП!
рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

haimat picture haimat  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

domdinicola picture domdinicola  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ahulist picture ahulist  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

continda picture continda  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

etiennecelery picture etiennecelery  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ