
suds 0.4의 클론 + suds-0.4-CVE-2013-2217.patch
개요
"Suds" 웹 서비스 클라이언트는 LGPL로 라이선스된 python용 경량 soap 기반 클라이언트입니다.
자세한 내용은 다음을 참조하십시오:
버전 0.3.6 (04-31-09):
버전 0.3.5 (04-16-09):
버전 0.3.4 (02-24-09):
버전 0.3.3 (11-31-08):
버전 0.3.2 (11-7-08):
버전 0.3.1 (10-1-08):
버전 0.3 (9-30-08):
0.2.9에서 도입된 멀티포트 서비스 지원을 확장. 이 추가 기능은 여러 서비스가 동일한 메서드를 정의할 수 있게 하며 suds가 이를 올바르게 처리합니다. 'SERVICES WITH MULTIPLE PORTS:' 섹션을 참조하십시오.
멀티도큐먼트 document/literal soap 바인딩 스타일 지원 추가. 'MULTI-DOCUMENT Docuemnt/Literal:' 섹션을 참조하십시오.
(xs:group, xs:attributeGroup) 태그 지원 추가.
Client.last_sent() 및 Client.last_received() 추가.
버전 0.2.9 (9-09-08):
버전 0.2.8 (8-28-08):
가 참조하는 문서 루트를 항상 전송하도록 document/literal 바인딩 업데이트. 공간과 사용자 입력을 다시 검토한 결과, 참조된 요소는 항상 문서 루트인 것으로 보입니다.
'binding' schemaLocation을 namespace-uri에 바인딩하는 지원 추가.
이는 schemaLocation을 지정하지 않으면서도 스키마가 다운로드되기를 기대하는
import를 위한 것입니다. 예: Axis는 schemaLocation 없이
'http://schemas.xmlsoap.org/soap/encoding/'을 참조합니다. 따라서 다음과 같이 수행하면:
from suds.xsd.sxbasic import Import. Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
스키마가 schemaLocation에 바인딩되어 다운로드됩니다.
기본 unmarshaller는 /schema/가 필요하지 않음. 리팩토링 중 제거되었어야 했지만 누락되었습니다.
kwargs를 send()에 전달하고 wsdl의 서비스 위치를 재정의하는 /location/ kwarg를 추가하도록 client 업데이트.
요소 및/또는 속성을 나타내면서 *선택적(optional)*이고 값이 None인 객체 속성에 대해 XML을 생성하지 않도록 marshaller 업데이트. * 모든 속성을 포함하도록 factory (builder) 업데이트. * SchemaObject에 optional() 메서드 추가.
지정된 경우 작업의 네임스페이스를 재정의하도록 wsdl 업데이트.
스키마 로딩 문제 수정 - import를 처리하기 전에 모든 스키마를 빌드.
fedora 제출 준비를 위해 패키징 업데이트.
버전 0.2.7 (8-11-08):
버전 0.2.6 (8-5-08):
버전 0.2.5 (8-01-08):
(XSD) 패키지 개편. 이 새로운 (병합) 방식은 더 단순하고 더 안정적이며 유지보수하기 쉬울 것입니다. 또한 병합된 스키마가 딕셔너리 조회를 통해 조회를 수행하므로 더 나은 성능을 제공할 것입니다.
이 개편으로 현재의 TypeNotFound 및 xs:extension/ 문제가 해결되기를 바랍니다 :-).
dateTime 출력 버그 수정.
자신을 포함하는 xsd 타입에 대한 builder.Builder의 무한 재귀 방지 추가.
버전 0.2.4 (7-28-08):
버전 0.2.3 (7-23-08):
버전 0.2.2 (7-8-08):
티켓 #14의 제안대로 Exception.init()을 사용하여 Exception.message를 설정함으로써 예외를 더 /표준/ python 방식으로 업데이트; (p)를 전달하여 WebFault를 발생시키도록 bindings 업데이트
bindings에 반환 값의 여러 루트 노드를 처리하는 기능 추가; 리스트가 반환되는 경우와 달리 복합(composite) 객체로 반환
soapAction이 따옴표로 묶이도록 수정
xs:all/ 지원 추가
SchemaObject의 unbounded() 메서드 수정
스키마를 새 (xsd) 패키지로 리팩토링. 파일이 너무 커지고 있었습니다. Query에 execute()를 추가하고 Schema.find()를 직접 사용하는 대신 execute() 쿼리를 사용하도록 suds를 개조. 또한 스키마에서 임시방편(hokey) start() 메서드와 쿼리 증가 로직을 제거.
나가는(outbound) soap 메시지 및/또는 들어오는(inbound) 응답 메시지를 주입하는 데 사용되는 inject 키워드 추가. SoapClient 리팩토링:
네임스페이스 동작을 더 잘 관리하기 위해 sax에 Namespace 클래스 추가; suds가 Namespace를 import하여 사용하도록 개조
참조된 타입(@base="",@type="" 속성 보유)을 해석하는 데 사용되는 기본 네임스페이스를 변경하여 접두어가 지정되지 않은 경우 targetNamespace 대신 XML (노드) 네임스페이스를 사용하도록 변경.
티켓 #13에서 [email protected]가 정의한 수정 사항 적용
서비스 정의 출력이 전통적인 메서드 시그니처에 더 가까운 ' my_method(arg0{xs:int}, arg1{Person}) ' 대신 ' my_method(xs:int arg0, Person arg1) ' 형태로 서비스 메서드를 표시하도록 업데이트
unmarshaller에 xsd/python 타입 변환 추가 (XBoolean만 해당); unmarshaller가 Content 클래스를 사용하도록 리팩토링하여 API를 더 깔끔하게 만들고 marshaller와 unmarshaller 간에 대칭성을 추가하며, 스키마 속성 기반 타입 변환을 위한 좋은 메커니즘 제공
Appenders로 marshaller 리팩토링; bindings의 returned_type() 및 returnes_collection() 수정을 지원하기 위해 resolve()에 nobuiltin 플래그 추가.
(202,204) http 코드 지원 추가
XBoolean 및 매핑 추가; 타입 변환 준비를 위해 TreeResolver에 findattr() 추가
스키마 및 스키마 속성 로딩 업데이트 (깊은 재귀 중지); 가져온 스키마를 더 이상 복사하지 않도록 Imported 스키마 변경. 대신 import 프록시가 find 요청을 대신 처리; 더 나은 서비스 검사를 제공하는 ServiceDefinition 클래스 추가. 네임스페이스 매핑 및 타입 표시도 제공; 스키마 속성 API 단순화; xs:any 및 xs:anyType 지원 추가; 일부 스키마 조회 문제 수정; Binding 클래스 약간 리팩토링; 디버그 로깅 대량 추가 (일부 인자는 비용이 크므로 성능상 일부를 주석 처리해야 할 수 있음).
sudsobject.Property 추가. property는 (value) 속성을 포함하는 특수 Object로, 및 과 같은 자식이 없는 스키마 타입에 대해 Builder (factory)가 반환합니다. Builder, Marshallers 및 Resolvers가 Properties를 처리하도록 업데이트; Resolver, Schema도 속성 조회를 처리하도록 업데이트 (누락되어 있었음)
사용자 정의 soap 헤더를 위한 기반 작업 추가.
티켓 #7에 따라 elementFormDefault 수정
bindings에서 사용하지 않는 kwargs 제거; wsdl에 bindings 캐시; 레거시 ServiceProxy가 {new} Client API에 위임하도록 개조; 스키마 내 의 'nillable' 속성에 의한 자연스러운 처리를 위해 keyword nil_supported 제거
버전 0.2.1 (5-8-08):
스키마가 3단계로 로드되도록 schema.py SchemaProperty 로딩 순서 업데이트:
1) 원시 트리 빌드.
2) @ref 및 @base와 같은 의존성 해석.
3) 트리를 평탄화(비정규화)하기 위해 필요에 따라 손자 노드 승격.
wsdl도 스키마를 한 번만 로드하고 저장하도록 변경되었습니다. 스키마 컬렉션은 2단계로 스키마를 로드하도록 변경되었습니다: 1) 모든 원시 스키마 객체 생성. 2) 스키마 로드.
이로써 순서가 바뀐 상태에서 참조되는 로컬 된 스키마를 찾을 수 있습니다.
sax.py Element 인터페이스가 변경되었습니다: attribute()가 get() 및 set()으로 대체되었습니다.
또한 getitem 및 __setitem__을 사용하여 속성 값에 접근할 수 있습니다.
sax.py에 대한 Epydocs 업데이트. 그리고 ... 마지막으로 가 이제 올바르게 지원됩니다.
로깅 수정: suds.init.logger()에서 info로 설정하지 않음; 루트 로거에만 핸들러 설정; logger (log)를 클래스에서 모듈로 이동하고 로거 이름에 name 사용. 참고: 이는 soap 메시지 로깅을 활성화하려면 다음을 의미합니다: > > logger('suds.serviceproxy').setLevel(logging.DEBUG) > -- 대신 -- > > logger('serviceproxy').setLevel(logging.DEBUG) >
(xsd) 스키마 노드 지원 추가 - 주로 Builder가 반환하는 객체에 영향을 줌
serviceproxy.py:set_proxies()가 INFO 대신 DEBUG를 기록하도록 업데이트.
원시 xml과 모델을 모두 표시하도록 schema str 개선 (주로 디버깅용).
버전 0.2 (04-28-08):
rpc/encoded soap 스타일에 대한 첫 시도를 포함.
Property 클래스를 suds.sudsobject.Object로 대체. Property 클래스는 오래 전에 약간 다른 목적으로 개발되었습니다. suds Object는 더 단순한(보다 직관적인) 접근 방식으로 더 적은 코드가 필요하고 디버거에서 더 잘 작동합니다.
Binding(및 encoding)은 wsdl과 더 일관되게 메서드 단위로 선택됩니다. <= 0.1.7에서는 ServiceProxy가 생성될 때 binding이 선택되어 모든 서비스 메서드에 사용되었습니다. binding은 self.binding으로 저장되었습니다. WSDL이 각 작업에 대해 별도의 binding 스타일과 encoding을 제공하므로 Suds도 동일한 방식으로 작동하도록 변경해야 했습니다.* (nil_supported) 및 (faults) 플래그는 **kwargs를 사용하여 서비스 프록시로 전달됩니다. 이러한 플래그 외에도 (http_proxy) 플래그가 추가되어 urllib2.Request 객체로 전달됩니다. 지원되는 인수는 다음과 같습니다:
HTTP 프록시를 지원합니다(위 참조).
ServiceProxy는 SoapClient에 위임하도록 리팩터링되었습니다. 서비스 프록시는 getattr()을 통해 웹 서비스를 노출하므로 ServiceProxy 클래스가 제공하는 모든 속성(메서드 포함)은 wsdl에 정의된 WS 연산을 숨깁니다. 따라서 모든 것을 SoapClient로 옮김으로써 서비스 프록시에서 속성과 메서드에 hoky 이름을 사용하지 않아도 wsdl 연산이 더 이상 숨겨지지 않습니다. 대신 서비스 프록시에는 __client__와 factory 속성이 있습니다 (이름 충돌 위험이 실제로 낮아야 합니다). 현재는 get_instance() 및 get_enum() 메서드가 이전 버전과의 호환성을 유지하기 위해 이동되지 않았습니다. 다만 선호되는 API 변경은 다음을 대체하는 것입니다:
service = ServiceProxy('myurl') person = service.get_instance('person')
... 대략 다음과 같은 형태로 ...
service = ServiceProxy('myurl') person = service.factory.get_instance('person')
사용자가 새 API로 전환할 시간을 주기 위해 몇 번의 릴리스 후에 get_instance() 및 get_enum() 메서드는 큰 글씨의 공지와 함께 제거될 수 있습니다.
wsdl에 섹션이 정의되지 않아 Suds가 http://www.w3.org/2001/XMLSchema 네임스페이스의 접두사를 확인하여 (xs:string)과 같은 내장 유형을 감지할 수 없는 문제를 수정했습니다.
version-0.1.7 (04-08-08):
프로퍼티 값(out) = None 및 빈 태그(in)가 처리되는 방식을 제어하는 Binding.nil_supported가 추가되었습니다.
sax 파서가 텍스트를 "청크"로 나눌 때 여러 character() 콜백을 처리하도록 Sax 핸들러가 업데이트되었습니다. node.text가 None이면 node.text가 해당 문자들로 설정됩니다. 그렇지 않으면 문자가 추가됩니다. 감사합니다 - [email protected]
"text"라는 자연스러운 요소를 허용하기 위해 특수 (text) 속성을 __text__로 대체했습니다.
다음과 같이 유니코드 지원을 추가했습니다:
XML 출력은 HTTP 헤더와 일치하고 유니코드를 지원하는 UTF-8로 인코딩됩니다.
SchemaCollection이 builtin() 및 custom() 메서드를 제공하도록 변경되었습니다. 이를 지원하기 위해 sax.py의 Element에 findPrefixes()가 추가되었습니다. 어차피 wsdl과 스키마에는 http://www.w3.org/2001/XMLSchema에 대한 접두사가 많을 수 있으므로 이 방법이 더 나은 방법입니다. doc/lit 및 rpc/lit 바인딩 모두에서 테스트되었습니다.
bindings 패키지를 document & rpc에서 literal & encoded로 리팩터링했습니다.
다음과 같은 완전한 네임스페이스 지원의 완성을 포함합니다:
Property는 추가된 순서대로 속성 이름(키)을 유지합니다. 이는 또한 get_item()과 get_names()가 순서가 지정된 값을 반환함을 의미합니다. (하지만 순서는 실제로 wsdl/schema에 지정된 순서를 사용하여 마샬러에서 수행되어야 한다고 생각합니다.)
schema.py의 대규모 리팩터링. 주요 목표는 네임스페이스로 완전히 정규화된 유형 조회를 준비하는 것입니다. 완료되면 속성 값의 접두사는 더 이상 제거(소거)되지 않습니다. 변경 요약: 1) SchemaProperty 오버레이 클래스가 요청 시가 아닌 __init__에서 생성됩니다. 2) 스키마 가져오기는 Schema가 아닌 새로운 Import 클래스에 의해 수행됩니다. 3) Schema는 팩토리를 사용하여 최상위 속성을 로드합니다. 4) 모든 SchemaProperty /children/ 목록은 SchemaProperty 파생 클래스에서 __cmp__로 정렬됩니다. 이렇게 하면 동일한 이름의 유형이 다음 순서(Import, Complex, Simple, Element)로 해결됩니다. 5) 모든 /children/ SchemaProperty 목록은 요청 시가 아닌 __init__에서 구성됩니다. 6) SchemaGroup이 생성되고 WSDL 클래스가 업데이트되었습니다. 이는 wsdl이 노드를 집계하여 네임스페이스 접두사 매핑이 있는 wsdl 부모 요소에 대한 연결이 끊어지는 것보다 더 잘 작동합니다. 7) 요소는 가져온 스키마의 targetNamespace 및 관련 접두사 매핑에 대한 네임스페이스 재매핑과 접두사 재매핑이 모두 수행되도록 올바르게 처리합니다. 예: SCHMEA-A에는 xmlns:tns=http://nsA로 매핑된 접두사 (tns)가 있고 targetNamespace=http://nsA입니다. SCHEMA-B는 스키마 A를 가져오며 xmlns:abc=http://nsABC로 매핑된 접두사 (abc)가 있습니다. SCHEMA-B는 A를 <import namespace=http://nsB xxx schemaLocation=http://nsA/schema-a.xsd>로 가져옵니다. 따라서 SCHEMA-B가 abc:something과 같은 접두사 (abc)를 사용하여 SCHEMA-A의 요소를 참조하므로 SCHEMA-A의 targetNamespace는 http://nsABC로 업데이트되어야 하며 type=tns:something인 모든 요소는 type=abc:something으로 업데이트되어야 해결될 수 있습니다.
바인딩이 리팩터링될 때 도입된, 노드가 (text, value)로 속성에 추가되는 언마샬링 문제를 수정했습니다.
다양한 Property print 문제를 수정했습니다.
참고:
rpc/literal 바인딩의 대부분을 제공해 주고 #suds에서 많은 협업을 해 준 Coniuro의 Jesper Noehr에게 감사드립니다.
version-0.1.6 (03-06-08):
version-0.1.5( 02-21-08 ):
version-0.1.4 (12-21-07):
version-0.1.3 (12-19-07):
version-0.1.2 (12-18-07):
이 릴리스에는 property 추가에 대한 업데이트가 포함되어 있습니다: * metadata 지원 * 오버라이드: getitem, setitem, contans * XML 문서의 네임스페이스를 처리하기 위해 property(reader|writer)가 property.metadata를 사용하도록 변경 * setup.py requires 수정.
version-0.1.1 (12-17-07):
이 릴리스는 fedora 호스팅에서의 첫 릴리스입니다.
속성 플래그 (nillable 및 form) 지원 추가
Proxy (2세대 API) 클래스 추가
사용자가 x 속성에 접근할 필요가 없도록 접근자/변환 함수 추가. 또한 딕셔너리로 쉽게 변환하고 반복할 수 있도록 todict() 및 get_items() 추가
더 깊이 찾기 전에 최상위 요소에서 @ref 검색
SchemaObject에 derived() 추가. 이는 이전 suds 릴리스에서 모든 사용자 정의 타입에 xsi:type을 지정했던 것과 달리 모든 파생 타입(wsdl 클래스)이 xsi:type으로 한정되도록 하는 데 필요합니다. 타입을 지정해야 할 때만 xsi:type을 추가하도록 literal marshaller 업데이트.
상위 요소에 접두어가 있을 때 네임스페이스가 상위로 승격되지 않도록 sax의 ns 승격 변경.
binding returned_type()이 (unresolved) Element를 반환하도록 변경
새 기능을 지원하고 보고된 버그를 수정하기 위해, Suds에서 입출력 변환을 제공하는 컴포넌트를 리팩토링하고 발전시키는 작업을 진행 중입니다:
이러한 발전은 이 컴포넌트들 간에 더 나은 대칭성을 제공할 것입니다:
Builder와 Unmarshaller는 다음을 가진 python (sudsobject.Object의 하위 클래스) 객체를 생성합니다:
그리고
Marshaller(들)는 Builder 또는 Unmarshaller가 생성한 python 객체를 소비하면서 이 표준 정보를 활용하여 적절한 출력( XML/SOAP )을 생성합니다.
0.2.1 코드는 대체로 이렇게 동작하지만 ... 완전히 그렇지는 않습니다. 또한 구현에 일부 중복이 있습니다.
이 작업을 수행하면서 Builder, Marshallers 및 Unmarshaller 클래스에서 사용하는 공통 스키마 타입 "lookup" 기능을 "Resolver" 클래스 계층으로 분리하는 것이 합리적이었습니다. 이는 Builder, Marshallers 및 Unmarshaller 클래스의 복잡성과 중복을 줄이고 더 나은 모듈성을 제공합니다. 이 리팩토링이 완료되자 literal/encoded Marshaller 간의 차이는 매우 작아졌습니다. bindings.literal 및 bindings.encoded 패키지의 코드 양이 적고(계속 줄어들고) Suds 코드베이스를 컴팩트하게 유지하기 위해 모든 마샬링 클래스를 bindings.marshaller 모듈로 옮겼습니다. 모든 bindings.XX 하위 패키지는 제거될 것입니다.
최종 효과:
Suds의 모든 주요 컴포넌트:
이제 다음이 개선되었습니다:
... 그리고 다음 기능/버그 수정을 더 잘 지원합니다:
builder와 unmarshaller는 스키마 타입을 해석하기 위해 schema.Schema.find()를 사용했습니다. 적절한 컨텍스트에서 타입을 해석하기 위해 "person.name.first"와 같은 경로를 구성했습니다. Schema.find()는 상태가 없었기 때문에 호출할 때마다 중간 경로 요소를 해석했습니다. 새로운 resolver 클래스는 상태를 가지며 자식 타입을 훨씬 더 효율적으로 해석합니다.
items() 메서드와 같은 sudsobject.Object의 이름 충돌 방지. 모든 메서드(클래스 메서드 포함)를 Object 클래스에 클래스 속성( factory )으로 포함된 Factory 클래스로 옮겼습니다. 이제 모든 속성이 python 내장 명명 규칙을 가지므로 더 이상 이름 충돌이 없어야 합니다. 물론 이는 어떤 wsdl/schema 엔티티 이름도 python 내장 명명 규칙을 가진 이름을 갖지 않는다고 가정하지만 어딘가에서 선을 그어야 합니다 :-)