Spyne multipart/related post hatası

101 views
Skip to first unread message

Emrah SAKARYA

unread,
Feb 18, 2019, 11:06:19 AM2/18/19
to Python Istanbul
Merhabalar aranıza yeni katıldım GİB efatura entegrasyonu için endpoint oluşturmaya çalışıyorum.

GİB in bize gönderdiğini POST örneği aşağıdaki gibi
Headers:
---------------------------------------------------------------------------------------------------------------------------------------------------
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:4d771b6c-e96e-4412-95da-6d3301495aa1"; start="<root.m...@cxf.apache.org>"; start-info="application/soap+xml"; action="sendDocument"

Body:

--uuid:4d771b6c-e96e-4412-95da-6d3301495aa1
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; action="sendDocument";
Content-Transfer-Encoding: binary
Content-ID: <root.m...@cxf.apache.org>

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns3:documentRequest xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:ns3="http://gib.gov.tr/vedop3/eFatura"><fileName>EA4D064E-25BC-43ED-BCF0-B86D403320DB.zip</fileName><binaryData xmime:contentType="application/octet-stream"><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:04dfbca1-54b8-4631-a5...@cxf.apache.org"/></binaryData><hash>90C8328A9DF360E7E13F2C15AAA91D68</hash></ns3:documentRequest></soap:Body></soap:Envelope>
--uuid:4d771b6c-e96e-4412-95da-6d3301495aa1
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <04dfbca1-54b8-4631-a5...@cxf.apache.org>

PK\x03\x04\x14\x00\x08\x08\x08\x00\xbd^IN\x00\x00\x00\x00\x00\x00\x00\x00\...binarydata
--uuid:4d771b6c-e96e-4412-95da-6d3301495aa1--


Endpoint için spyne kodum
---------------------------------------------------------------------------------------------------------------------------------------------------
#!/usr/bin/env python

import logging
logger = logging.getLogger(__name__)
import os
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)

from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.exceptions import NotFound
from werkzeug.serving import run_simple

from spyne.application import Application
from spyne.decorator import rpc
from spyne.service import ServiceBase
from spyne.model.complex import ComplexModel
from spyne.model.primitive import String
from spyne.error import ResourceNotFoundError
from spyne.error import ValidationError
from spyne.model.binary import ByteArray
from spyne.model.binary import File
from spyne.model.primitive import Unicode
from spyne.model.primitive import Mandatory
from spyne.server.wsgi import WsgiApplication
from spyne.protocol.soap import Soap11
from spyne.protocol.msgpack import MessagePackDocument
from spyne.protocol.msgpack import MessagePackRpc
from spyne.protocol.json import JsonDocument
from spyne.protocol.xml import XmlDocument
from spyne.protocol.http import HttpPattern, HttpRpc

wsdlpath = 'EFatura_Test.wsdl'


class documentResponse(ComplexModel):
msg = String
hash = String


class GIBSoapService(ServiceBase):

@rpc(Unicode, ByteArray(min_occurs=1, nullable=False), Unicode, _returns=documentResponse, _soap_body_style='bare')
def sendDocument(ctx, file_name, file_data, file_hash):


incoming_invoice_dir = '/incoming/'

logger.info("file_name %r" % file_name)
logger.info("file_hash: %r" % file_hash)

path = os.path.join(incoming_invoice_dir, file_name)

f = open(path, 'wb') # if this fails, the client will see an
# internal error.
try:
for data in file_data:
f.write(data)
_logger.info("File written: %r" % file_name)
f.close()
resp = documentResponse()
resp.msg = "BASARIYLA ALINDI"
resp.hash = file_hash
return resp

except:
f.close()
os.remove(path)
_logger.info("File removed: %r" % file_name)
raise # again, the client will see an internal error.


application = Application([GIBSoapService], tns=wsdlpath,
in_protocol=Soap11(),
out_protocol=Soap11())

gib_application = WsgiApplication(application)

from wsgiref.simple_server import make_server

server = make_server('0.0.0.0', 8000, gib_application)
server.serve_forever()

# WSGI application

Aldığım hata
---------------------------------------------------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/opt/virtualenv/lib/python3.5/site-packages/spyne/server/wsgi.py", line 244, in __call__
return self.handle_rpc(req_env, start_response)
File "/opt/virtualenv/lib/python3.5/site-packages/spyne/server/wsgi.py", line 349, in handle_rpc
contexts = self.generate_contexts(initial_ctx, in_string_charset)
File "/opt/virtualenv/lib/python3.5/site-packages/spyne/server/_base.py", line 66, in generate_contexts
self.app.in_protocol.create_in_document(ctx, in_string_charset)
File "/opt/virtualenv/lib/python3.5/site-packages/spyne/protocol/soap/soap11.py", line 193, in create_in_document
collapse_swa(content_type, ctx.in_string)
File "/opt/virtualenv/lib/python3.5/site-packages/spyne/protocol/soap/mime.py", line 150, in collapse_swa
msg = message_from_string('\r\n'.join(msg_string)) # our message
TypeError: sequence item 3: expected str instance, bytes found


Burak Arslan

unread,
Feb 18, 2019, 11:27:44 AM2/18/19
to python-...@googlegroups.com, Emrah SAKARYA

Merhaba,


On 18/02/2019 19:06, Emrah SAKARYA wrote:
Merhabalar aranıza yeni katıldım GİB efatura entegrasyonu için endpoint oluşturmaya çalışıyorum.

GİB in bize gönderdiğini POST örneği aşağıdaki gibi


Bu verinin nasil bir HTTP istegi oldugunu ben anlamadim. ilk satirdaki --uuid: diye baslayan satirdan once bir seyler olmasi gerekli.

benim de deneyebilmem icin curl ile gonderilebilecek bir data uretmek mumkun mu?



Aldığım hata
---------------------------------------------------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "/opt/virtualenv/lib/python3.5/site-packages/spyne/server/wsgi.py", line 244, in __call__
    return self.handle_rpc(req_env, start_response)
  File "/opt/virtualenv/lib/python3.5/site-packages/spyne/server/wsgi.py", line 349, in handle_rpc
    contexts = self.generate_contexts(initial_ctx, in_string_charset)
  File "/opt/virtualenv/lib/python3.5/site-packages/spyne/server/_base.py", line 66, in generate_contexts
    self.app.in_protocol.create_in_document(ctx, in_string_charset)
  File "/opt/virtualenv/lib/python3.5/site-packages/spyne/protocol/soap/soap11.py", line 193, in create_in_document
    collapse_swa(content_type, ctx.in_string)
  File "/opt/virtualenv/lib/python3.5/site-packages/spyne/protocol/soap/mime.py", line 150, in collapse_swa
    msg = message_from_string('\r\n'.join(msg_string))  # our message
TypeError: sequence item 3: expected str instance, bytes found


Buradaki tipik bir Python3 sorunu. "/opt/virtualenv/lib/python3.5/site-packages/spyne/protocol/soap/mime.py", satir 150'deki '\r\n' ifadesini b'\r\n' yapmayi dener misiniz? Ben ustteki sebepten kodu calistiramadigim icin kendim deneyemiyorum.


Kolay gelsin
Burak

Emrah SAKARYA

unread,
Feb 18, 2019, 12:41:39 PM2/18/19
to Python Istanbul
Hocam header kisminda veri tipi yaziyor?
Ben gibden http.route ile post datayi print ettigimde
Bana gelen header ve body kismi aynen oyle yani oncesinde bisey yok. Ben postmanla deniyordum curl ile derleyebilirmiyim sabah bakicam.

Aslinsa ben gelen veriyi saglikli bicimde http.route ile kaydettim ama soap response dönemedigim icin spyne kullanmaya karar verdim

Emrah SAKARYA

unread,
Feb 18, 2019, 12:44:19 PM2/18/19
to Python Istanbul
Dediginiz gibi daha once denedim. Bu seferde byte like object hatasi verdi
Hatanin kaynagi bence ctx.in_strings bolumunde loggerdean baktigimsa soap11.py den hata veren fonksiyona body nin tamami yansiyor cgi parse edemiyor benim fikrime gore

Emrah SAKARYA

unread,
Feb 18, 2019, 2:43:57 PM2/18/19
to Python Istanbul
yok hocam herşeyi denedim hiç bi şekilde o satırı geçmiyor.
başka bi yol araştırayım ben en iyisi spyne ile çözemicem :(

18 Şubat 2019 Pazartesi 19:06:19 UTC+3 tarihinde Emrah SAKARYA yazdı:
Merhabalar aranıza yeni katıldım GİB efatura entegrasyonu için endpoint oluşturmaya çalışıyorum.

GİB in bize gönderdiğini POST örneği aşağıdaki gibi
Headers:
---------------------------------------------------------------------------------------------------------------------------------------------------
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:4d771b6c-e96e-4412-95da-6d3301495aa1"; start="<root.message@cxf.apache.org>"; start-info="application/soap+xml"; action="sendDocument"

Body:

--uuid:4d771b6c-e96e-4412-95da-6d3301495aa1
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; action="sendDocument";
Content-Transfer-Encoding: binary
Content-ID: <root.m...@cxf.apache.org>

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><ns3:documentRequest xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:ns3="http://gib.gov.tr/vedop3/eFatura"><fileName>EA4D064E-25BC-43ED-BCF0-B86D403320DB.zip</fileName><binaryData xmime:contentType="application/octet-stream"><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:04dfbca1-54b8-4631-a556-4addea6716ed-96103@cxf.apache.org"/></binaryData><hash>90C8328A9DF360E7E13F2C15AAA91D68</hash></ns3:documentRequest></soap:Body></soap:Envelope>

--uuid:4d771b6c-e96e-4412-95da-6d3301495aa1
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

Burak Arslan

unread,
Feb 19, 2019, 3:31:20 AM2/19/19
to python-...@googlegroups.com, Emrah SAKARYA
Merhaba,

On 18/02/2019 20:41, Emrah SAKARYA wrote:
> Hocam header kisminda veri tipi yaziyor?
> Ben gibden http.route ile post datayi print ettigimde
> Bana gelen header ve body kismi aynen oyle yani oncesinde bisey yok. Ben postmanla deniyordum curl ile derleyebilirmiyim sabah bakicam.


Ornek bir MTOM istegi:
https://gist.github.com/alexfx/e90b9518a5fb04c1dc82a6bbc08d329a

Dedigim gibi, bana deneyebilecegim bir sey verirseniz bakar spyne'da bir
hata varsa duzeltirim.

kolay gelsin
burak


Emrah SAKARYA

unread,
Feb 19, 2019, 5:40:21 AM2/19/19
to Python Istanbul
Hocam merhaba 3 saatimi aldı doğru curl komutunu bulmak:)

ekte eklediğim binary.txt dosyası ile birlikte çalışıyor, python @http.route yöntemi ile dosyayı başarılı bir şekilde alıp kaydettim

curl -X POST -H 'Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:2e53e161-b47f-444a-b594-eb6b72e76997"; start="<root.m...@cxf.apache.org>"; start-info="application/soap+xml"; action="sendDocument"' --data-binary @binary.txt http://localhost:8000

cevabınızı bekliyorum teşekkürler


19 Şubat 2019 Salı 11:31:20 UTC+3 tarihinde Burak Arslan yazdı:
binary.txt

Emrah SAKARYA

unread,
Feb 19, 2019, 5:44:49 AM2/19/19
to Python Istanbul
Hocam bir diğer husus
soap11.py dosyasının 197 satırında
content_type = cgi.parse_header(content_type)

bi komut var araştırmalarım sonucu boundary objesini bu şekilde parse etmişler
ama bizimki form-data değil related bu kodla biraz çalışma yaptığımda boundary partlarını başarılı bi şekilde parse edebilmiştim.
kolay gelsin

 ctype
, pdict = cgi.parse_header(self.headers['content-type']) pdict['boundary'] = bytes(pdict['boundary'], "utf-8") if ctype == 'multipart/form-data': fields = cgi.parse_multipart(self.rfile, pdict)


19 Şubat 2019 Salı 11:31:20 UTC+3 tarihinde Burak Arslan yazdı:
Merhaba,

Emrah SAKARYA

unread,
Feb 19, 2019, 8:17:58 AM2/19/19
to Python Istanbul
hocam ek olarak şu arkadaşın bildirdiği hata da bizim hataya benziyor ilgisi olabilirmi ?

Umarım sonuca ulaşırız hem benim için hem spyne için, gib endpoint oluşturmak, Pythonculara ciddi manada katkı sağlayacaktır.

19 Şubat 2019 Salı 11:31:20 UTC+3 tarihinde Burak Arslan yazdı:
Merhaba,

Burak Arslan

unread,
Feb 19, 2019, 1:13:28 PM2/19/19
to python-...@googlegroups.com
Merhaba tekrar,

On 19/02/2019 13:40, Emrah SAKARYA wrote:
> Hocam merhaba 3 saatimi aldı doğru curl komutunu bulmak:)
>
> ekte eklediğim binary.txt dosyası ile birlikte çalışıyor, python
> @http.route yöntemi ile dosyayı başarılı bir şekilde alıp kaydettim
>
> curl -X POST -H 'Content-Type: multipart/related;
> type="application/xop+xml";
> boundary="uuid:2e53e161-b47f-444a-b594-eb6b72e76997";
> start="<root.m...@cxf.apache.org>";
> start-info="application/soap+xml"; action="sendDocument"'
> --data-binary @binary.txt http://localhost:8000
>
Bu yeterli oldu, tesekkur ederim.

Bu kodun calismamasinda Spyne'in hatasi oldugu kadar sizin de hataniz
varmis. Hem Spyne'da hem de sizin kodda yapilmasi gereken duzeltmeleri
yaptim.

Sizin kodda oncelikle protokolu duzeltmek gerekti. Gelen istek Soap 1.1
degil, 1.2. Bu yuzden Spyne'daki hatayi duzelttikten sonra bile
attachment bulunamiyordu.

Servis tanimlarinda ise oncelikle targetNamespace, sonra diger field
isimlerinnin de gelen dokumanla alakasi yoktu. Bunlari da duzelttim.

Sizin kod burada:
https://github.com/plq/spyne/blob/50c9d836411ea1152a6d23be275f11065931d910/examples/xml/soap12-mtom/soap12_mtom.py


Sadece bu pull request'teki kodla calisiyor:
https://github.com/arskom/spyne/pull/601

Bu pull request merge olunca 2.13.11-alpha olarak cikacak. Yeni kodu
release edene kadar pip ile direk bu PR'deki kodu kurabilirsiniz. Ornek:
https://stackoverflow.com/questions/20101834/pip-install-from-git-repo-branch

Spyne'in Soap 1.2 destegi yok gibi birsey. Sagi solu patlarsa
yamalarinizi bekliyoruz.

Son olarak bize projenizden biraz bahsederseniz biz de bunca gurultuyu
bosuna kopartmamis oluruz :)

On 19/02/2019 16:17, Emrah SAKARYA wrote:
> Umarım sonuca ulaşırız hem benim için hem spyne için, gib endpoint
> oluşturmak, Pythonculara ciddi manada katkı sağlayacaktır.

Pythoncular az once size ciddi manada katki sagladim hadi yine iyisiniz :))

kolayliklar,
burak

Emrah SAKARYA

unread,
Feb 19, 2019, 1:29:28 PM2/19/19
to Python Istanbul
Burak hocam elinize saglik sabah denicem, fakat gibin dokumanlarinda sendDocument methodunun gonderilecegi yaziyor ve gelen request postta headerde action sendDocument olarak belirleniyor , sorun cikarmaz degilmi?

Emrah SAKARYA

unread,
Feb 19, 2019, 1:38:43 PM2/19/19
to Python Istanbul
Projeye gelirsek
GIB in doguradan ve tamamen ucretsiz efatura dogrudan entegrasyon yöntemi var. ve size gelen efaturalari size iletmek icin soap endpoint yani sunucu istiyor. Ve arada test dokumanlari yolluyor sunucu saglikli calisiyormu diye.

Örnegin bu dokumani aldiktan sonra basariyla alindi yaniti donmek gerekiyor. Daha sonra gerekli kontroller yapildiginda soap olrak dokumanda hata olmadigini ve Kabul ettigimoze dair application response donmemiz bekleniyor.

Bunlari toparlayinca
Python ile usb tokenle xades xml imzalama icin yardimlarinizi isticem:-)

Emrah SAKARYA

unread,
Feb 19, 2019, 2:03:27 PM2/19/19
to Python Istanbul
Burak hocam bir diger husus;
Asagidaki belgeyi incelermisiniz
https://merkeztest.efatura.gov.tr/EFaturaMerkez/services/EFatura?wsdl

GIB e faturayi suds ile client.service.sendDocument(dosya_adi,binary,hash)
Olarak gonderiyorum .
Gib diyorki, size gelen ler ayni yontemle sizin endpointinize yonlendirilir.
Yani kullandigim method yanlis demissiniz, calisiyorsa benim icin mesele yok ama bu soap12 ile alakali bi durum olabilirmi, cunku ana method headerde action olarak tanimli geliyor

Emrah SAKARYA

unread,
Feb 19, 2019, 3:08:56 PM2/19/19
to Python Istanbul
burak hocam şimdi deneme fırsatım oldu bi kaç sorun oluşt;
GİBden direk olarak test ettim. zip dosyasını kaydettiiçeriğinde aynı dosya isminde XML dosyasıda görünüyor ama extract etmeye çalışınca ( sağlama toplama hatası, dosya bozuk) diyor
ikinci olarak
file_hash: b'\x03\x9d\xba\xdb\xdd}\xe3\xb1z\xecQ8\x04Pw\x0b\x9d<\xdf\xb0\xf9\xd0\x1d\xf5'
burda hex olarak gösteriyor envelopedeki hash verisini string olarak almamız ve gelen dosyanın hash i ile karşılaştırmamız gerekiiyor eğer hatalı ise. gibin hata kodunu response etmemiz gerekli

son olarak

bizim döndüğümüz response
'<soap12env:Envelope xmlns:soap12env="http://www.w3.org/2003/05/soap-envelope" xmlns:tns="http://gib.gov.tr/vedop3/eFatura">\n  <soap12env:Body>\n    <tns:documentRequestResponse>\n      <tns:documentRequestResult>\n        <tns:hash>A526291947F67FE4BFB3C50837D50B31</tns:hash>\n        <tns:msg>Document was written successfully</tns:msg>\n      </tns:documentRequestResult>\n    </tns:documentRequestResponse>\n  </soap12env:Body>\n</soap12env:Envelope>\n

bizim gibe döküman gönderdiğinde b ize döndüğü response
_____________________________________________________________________________
HEADERS: Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:e84b1637-9adc-4ffe-abfb-1f54f6a2a494"; start="<root.m...@cxf.apache.org>"; start-info="text/xml"
_____________________________________________________________________________
MESSAGE:
--uuid:e84b1637-9adc-4ffe-abfb-1f54f6a2a494
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml";
Content-Transfer-Encoding: binary
Content-ID: <root.m...@cxf.apache.org>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns3:documentResponse xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:ns3="http://gib.gov.tr/vedop3/eFatura"><msg>BASARIYLA ALINDI</msg><hash>81C0279405CCD65558E3C1C08FD805B7</hash></ns3:documentResponse></soap:Body></soap:Envelope>
--uuid:e84b1637-9adc-4ffe-abfb-1f54f6a2a494--
_______________________________________________________________________________

bu şekilde response dönmemiz mümkünmü ? mümkünse nasıl yaparız ?

Emrah SAKARYA

unread,
Feb 20, 2019, 2:28:20 AM2/20/19
to Python Istanbul
zip hatası ile ilgili test_soap12.py
dosyasında
Satır 174 'wsgi.input': BytesIO(MTOM_REQUEST.replace(b"\n", b"\r\n"))
burası dikkatimi çekti bizim curl isteği ile GİB den gelen datayı karşılaştırdım
CURL /n olarak gönderiyor gibden /r/n olarak geliyor sıkıntı burda olabilirmi ?

Emrah SAKARYA

unread,
Feb 20, 2019, 2:31:20 AM2/20/19
to Python Istanbul
Spyne debug logda
 <binaryData xmime:contentType="application/octet-stream">UEsDBBQACAgIAONRVE4AAAAAAA..
...................
EsFBgAAAAABAAEAVgAAANF3AAAAAA==\n</binaryData>

base64 kodun sonunda \n gözüküyor zip dosya hatası bundan olabilir mi ?

Burak Arslan

unread,
Feb 20, 2019, 4:34:20 AM2/20/19
to python-...@googlegroups.com, Emrah SAKARYA

merhaba,

bu mail grubuna kayitli kac kisi var bilmiyorum ama sizin hata arama calismalarinizin tadinin kacmaya basladigini dusunmeye baslamislardir artik.

  1. soap 1.2 icin mtom spec'i su: https://www.w3.org/TR/soap12-mtom/

    eger spyne'da bu specle celisen bir durum bulursaniz duzeltebilirim, daha once duzelttigim gibi.

    yazdigim test burada:

    https://github.com/plq/spyne/blob/50c9d836411ea1152a6d23be275f11065931d910/spyne/test/protocol/test_soap12.py#L149

    sizin dosyanizi dogru yorumladigini dusunuyorum. bu sebepten hatayi kendi kodunuzda aramaniz gerekli.

  2. turkiye'de acik kaynak e-fatura altyapisi olsun ve basarabilen firmalar bunu ucretsiz olarak kullansin isterim. bunun icin sizin gibi hevesli arkadaslara bir temel olmasi umuduyla UBL spec'ini yorumlayabilecek ozellikleri birkac sene once spyne'a ekledim ve kullanim ornegini de pyubl projesine koydum. ama bu proje ile ilgili benimle iletisime gecen herkes bu ise ticari yaklasiyordu.

    eger bu ise *acik kaynakli bir proje yapma amaciyla* girecekseniz VE spyne'in XML yorumlama ozellikleri eksik kalirsa bu ozellikleri spyne'a ekleyebilirim. Spyne su an Xml Schema 1.0, WSDL 1.1 ve SOAP 1.1 speclerinin onemli bir kismini gercekliyor. Bunlarin sirayla 1.1, 2.0 ve 1.2 versiyonlari cikti, bunlara bakmadim. ama dedigim gibi, gerekirse bakabiliriz.

  3. pyubl projesinin sonraki adimi imza atma / dogrulama. SOAP seviyesine gelmeden once bu islerin gerceklenmesi gerekli.

    Imza isi XML Canonicalization (c14n) isleminden basliyor: https://stackoverflow.com/questions/22959577/python-exclusive-xml-canonicalization-xml-exc-c14n

    imza dogrularken gerekli degil ama atarken gerekli.

    Bundan sonra XMLDSIG (https://www.w3.org/TR/xmldsig-core/) sonra XADES (https://www.w3.org/TR/XAdES/) gerceklemeleri yapildiktan sonra sira UBL (http://docs.oasis-open.org/ubl/os-UBL-2.2/UBL-2.2.html) nesnelerinin islenmesine geliyor. Bu dokumanlar;
    1. gozuktukleri kadar korkunc degiller. sadece inanilmaz detayli dokumanlar.
    2. bastan sona oturup gerceklemek yerine gerekli size gereken kisimlari gerceklemek icin referans olarak kullaniyorsunuz.

  4. Neyse ki bu konu uzerine calisan kocaman bir acik kaynak camiasi var. Orn. daha yeni bir xades gerceklemesi cikti: https://github.com/Silverdoses/python-pgxades/ Denemedim ama gelecek vaadediyor. Sagda solda surekli boyle bir basina projeler cikiyor. Asil is bunlarin ahenkli bir sekilde calismasini saglamada yatiyor.

Hobi olarak bu islerle ugrasmaktan zevk almiyorsunuz diyelim :)) Niye bu ise giriselim diye dusunen arkadaslar icin: Eger siz CV'nize "UBL gerceklemesinde emegim var" yazarsaniz uluslararasi duzeyde aranan adam olup cikma ihtimaliniz yuksek.

umarim bu yazdiklarimin bir faydasi olur.

kolayliklar,
burak

Propars Bilgi Teknolojileri

unread,
Feb 20, 2019, 4:57:21 AM2/20/19
to python-...@googlegroups.com, Emrah SAKARYA
Selam Burak,


biz e-devlet tarafında (e-fatura, e-arşiv, e-defter) bölümümüzü python ile geliştirdik yaparken hayalimiz açık kaynak haline getirmekti. 

Ancak GIB test ortamından projeyi hazırlamak 3 ay çalıştık. Ancak Canlı ortam maalesef doküman ile alakası olmayan bir ortamdı düzenlemeler 1,5 senemize mal oldu. Çok fazla zaman harcadığımız dan bizde açık kaynak hale getirme fikrimizi askıya almak zorunda kaldık. Bu içimiz de hep ukte olarak kaldı


Burada girişimci arkadaşlar çok olduğunu düşünüyorum. 

fatura süreçlerin de E-Fatura / E-Arşiv son derece büyük bir kolaylık bunu projelerin de kullanmak isteyen girişimci arkadaşlarımıza biz projeyi açık kaynak hale getirene kadar ücretsiz kullanım hakkı tanımlayabiliriz. yıllık ta 20.000 e-fatura hakkı tanımlarız sanırım bu yeterli olur.


Kendi uygulamalarınıza kolay adapte edebilmek için Python örnekleri ile dolu restApi servisimiz var https://api.propars.net/api-docs/


isteyen arkadaşlar benimle iletişime geçebilir.


kolay gelsin




'Burak Arslan' via Python Istanbul <python-...@googlegroups.com>, 20 Şub 2019 Çar, 12:34 tarihinde şunu yazdı:
--
Bu iletiyi Google Grupları'ndaki "Python Istanbul" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için python-istanb...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.

Emrah SAKARYA

unread,
Feb 20, 2019, 5:37:42 AM2/20/19
to Python Istanbul
Burak hocam birincisi ben ticari amaçla yaklaşmıyorum ufak bir işletmem var onun için uğraşıyorum,

hata aramayada çalışmıyorum şu an sizin geliştirdiğiniz son haliyle dosyayı alıp kaydediyor. ama extract aşamasında bad zip file hatası dönüyor sadece bunun sebebini sordum, ve sabahtan beri kendi çapımda düzeltmek için denemeler yapıyorum
ayrıca UBL spec yorumlama( şematron kontrolü) bu aşamayı da tamamladım ve Xades kontrollerini gerçekleştirmek için ve python üzeri imza atmak için yüzlerce örnek ekledim sık kullanılanlara, yani hazıra konmuyorum, ben en son aşamada sizden yardım talep ettim. ve şu an xml dosyasını java aracı ile imzalayabiliyorum. imzaladığım dosyayıda gönderebiliyorum o konularda sıkıntım yok.

benim araştırmalrım sonucu dediğiniz gibi soap 1.2 de sistem biraz farklı çalışıyor, ana method headerde belirtiliyor ve envolope de method için beklenen istek belirtiliyor.

eğer spyne için SOAP 1.2 güncellemesi ve GİB için tam bir paket yayınlamayı düşünürseniz UBL oluşturma, fatura imzalama ve gönderilmesi konusundaki çalışmalarımı paylaşabilirim

bu mail grubuna kayitli kac kisi var bilmiyorum ama sizin hata arama calismalarinizin tadinin kacmaya basladigini dusunmeye baslamislardir artik.

bu ayrıca hata varki arıyorum:) ilginiz için gerçekten teşekkür ederim ben kendi başıma halletmeye çalışayım beceremezsem, en fazla projeyi iptal eder entegratör firma ile çalışırım.
ama bu tip hata düzeltmelerimiz olmadan spyne nin gelişeceğini düşünmüyorum.

spyne githubda

bu arkadaşın belirttiği problem 12 eylül 2017 de sorulmuş ve üzerinden 1.5 sene geçmiş şu an bizim karşılaştığımız sorunun temeli ile aynı problem. ve düzeltme şansını bana yardım ederek bulduğunuzu düşünüyorum:)
spyne bu tarz önemli hataları 1.5 senede düzelterek piyasada etkin rol alamayacağını düşünüyorum.

Tekrar yardımlarınız için çok teşekkür ederim iyi çalışmalar


Emrah SAKARYA

unread,
Feb 20, 2019, 5:45:11 AM2/20/19
to Python Istanbul
hocam merhabalar gerçekten çetrefilli iş, sormak istediğim test ortamında herşey yolunda gitse bile canlı ortamda sorun cıkacağınımı söylüyosunuz ?

ikincisi sizin sistem özel entegratör gibimi çalışmakta ?  biraz daha bilgi verirseniz efatura e arşiv kullanıcam sadece. doğrudan entegrasyonda son aşamaya geldim aslında
şu an uç birimde zarfı alıp gibe aldım demek kaldı eğer döküman paylaşabilirseniz incelerim brak hocam sağ olsun uğraştı ama sanırım aksilikler bitmicek :)

testten canlıya BASARIYLA ALINDI yanıtı döndüğümde bile testte endpointe ulaşılamadı hatası veriyor. onunda soap responseden olduğunu düşünüyorum

neyse döküman paylaşırsanız sevinirim.

20 Şubat 2019 Çarşamba 12:57:21 UTC+3 tarihinde Propars Bilgi Teknolojileri yazdı:

Emrah SAKARYA

unread,
Feb 20, 2019, 7:36:50 AM2/20/19
to Python Istanbul
Firmanızı aradım ama entegrasyon bazında çalışmanız olmadınğını söylediler. gurupdan bilgi aldım dedim bilen cıkmadı

20 Şubat 2019 Çarşamba 12:57:21 UTC+3 tarihinde Propars Bilgi Teknolojileri yazdı:
Selam Burak,

Propars Bilgi Teknolojileri

unread,
Feb 20, 2019, 7:45:45 AM2/20/19
to python-...@googlegroups.com
ses kaydını dinledim bizim müşteri temsilcisi ile görüşmüşsünüz ne sorduğunuzu anlamamış.

https://propars.net/ adresinden üye olursanız size test hesabı tanımlayabiliriz.
https://api.propars.net/api-docs/ adresinde dokümanlarımız bulunmakta.

iletişim bilgilerinizi en...@propars.net adresine iletebilirseniz telefonla yardımcı olabilirim.

Engin

Emrah SAKARYA <emrhs...@gmail.com>, 20 Şub 2019 Çar, 15:36 tarihinde şunu yazdı:

Emrah SAKARYA

unread,
Feb 20, 2019, 8:57:40 AM2/20/19
to Python Istanbul
inceleyip dönücem. teşekkürler

20 Şubat 2019 Çarşamba 15:45:45 UTC+3 tarihinde Propars Bilgi Teknolojileri yazdı:
Message has been deleted

Emrah SAKARYA

unread,
Feb 20, 2019, 11:00:50 AM2/20/19
to Python Istanbul
zip hata konusunda şöyle bişey keşfettim. gelen düşük boyutlu dosyalarda sorun yapmıyor (2KB) ama biraz büyük boyutlu dosyalada (39KB)
ubuntu üzeri unzip yapmaya çalıştığımda
4 extra bytes at beginning or within zipfile

hatası veriyor, önerisi olan varmı ?

Burak Arslan

unread,
Feb 20, 2019, 1:57:20 PM2/20/19
to python-...@googlegroups.com, Propars Bilgi Teknolojileri, Emrah SAKARYA

merhaba,

On 20/02/2019 12:57, Propars Bilgi Teknolojileri wrote:
Ancak GIB test ortamından projeyi hazırlamak 3 ay çalıştık. Ancak Canlı ortam maalesef doküman ile alakası olmayan bir ortamdı düzenlemeler 1,5 senemize mal oldu. Çok fazla zaman harcadığımız dan bizde açık kaynak hale getirme fikrimizi askıya almak zorunda kaldık. Bu içimiz de hep ukte olarak kaldı


Turkiye yazilim sektoru ciddi bir hizla gelisiyor. Yazilim firmalarinin is modellerinin de buna bagli olarak gelismesi kacinilmaz.

2 sene kapali kapali kapilar ardinda didinip yaptiginiz projeyi acik kaynak olarak yayimlamak kolay bir karar degil. ama eger ise en bastan acik kaynagi merkezine alan bir is modeliyle girseydiniz bu mumkun olabilirdi. hatta java ve C# dunyasinda gelistirilen ticari cozumlere en azindan en basit surumu "bedava" olan bir secenek olarak sunup belki de turkiye'nin "mevzuat yazilimlari" piyasasinda python'un  bu iki dev platform yaninda bir ucuncu alternatif olarak one cikmasina onayak olurdunuz.

ama sonucta %100 sizin karariniz, acsaniz da acmasaniz da kimse bir sey diyemez. emeginize saglik :)

bu konuda beni en cok sasirtan firma mailgun. adamlarin isi email, sattiklari sey email, buna ragmen flanker'i acik kaynak olarak gelistiriyorlar: https://github.com/mailgun/flanker

ustelik zamansizlik bahanesiyle disardan pek katki da kabul etmiyorlar :)

ha tabi ne oluyor, email ve python'un kesistigi yerde cogunluk flanker kullaniyor, bu da onlarin gelistiriciler nezdinde bilinirligini artiriyor.

konudan bagimsiz olarak buraya anonim yazmaniz biraz garibime gitti. tuzel kisiligin burada ne isi var ki?


On 20/02/2019 13:37, Emrah SAKARYA wrote:
spyne githubda

bu arkadaşın belirttiği problem 12 eylül 2017 de sorulmuş ve üzerinden 1.5 sene geçmiş şu an bizim karşılaştığımız sorunun temeli ile aynı problem. ve düzeltme şansını bana yardım ederek bulduğunuzu düşünüyorum:)
spyne bu tarz önemli hataları 1.5 senede düzelterek piyasada etkin rol alamayacağını düşünüyorum.

yanlis dusunuyorsunuz. aciklayayim:

oncelikle spyne kamuya acik bir proje oldugu icin pazar payi vb. ticari projeler acisindan onemli olan olcumlemelerin konuyla alakasi yok. hatta keske kullananlari mulakatla secebilsem :) boylece hata raporlarina harcadigim zaman %90 oraninda azalirdi.

benim maintainer olarak oncelikli gorevim bu projenin islerligini korumak. bunun icin koda disardan gelen eklemeleri siki bir denetimden gecirmem gerekiyor. bahsettiginiz hata raporu  aslinda rapor mapor degil, "calismiyor, bozuk" tipi klasik bir faydasiz hayiflanma. halbuki bu kisi koda baksa gorecek ki ben bunun 7 senedir farkindayim:

https://github.com/arskom/spyne/blame/bc6dd4e42a56af7f9ac4292af8552594f169d2d6/spyne/protocol/soap/mime.py#L23

Isin 1.5 sene degil 7 senedir cozulmemesinin sebebi 1. hatanin benim umrumda olmamasi 2. **benim belirledigim standartlarda** bir hata raporu gelmemis olmasi.

spyne issue tracker'da 8 senedir acik olan hatalar da var, 10 dk'da kapananlar da. her sey kayitli, girip bakabilirsiniz. sizin hata raporunuz benim standartlarima uygun bir rapordu, ben de hatayi duzelttim, bu kadar. size ozgu bir durum yok yani.

ha simdi diyeceksiniz iyi guzel de benim isim hallolmadi. iste bu konuda benim yapabilecegim bir sey yok cunku sorun spyne'daki bir hata degil sizin biraz bilgisiz olmaniz, biraz tecrubesiz olmaniz, biraz da konuya yanlis metod ile yaklasmaniz. yine de pes etmek yok bana cozersiniz gibi geliyor tirmalayin biraz daha.

On 20/02/2019 13:37, Emrah SAKARYA wrote:
eğer spyne için SOAP 1.2 güncellemesi ve GİB için tam bir paket yayınlamayı düşünürseniz UBL oluşturma, fatura imzalama ve gönderilmesi konusundaki çalışmalarımı paylaşabilirim

yayimlarsaniz bu tarz isleri arastiran kisilerin sizi bulmasinin bir faydasinin olacagini veya alacaginiz hata raporu vb. geri donuslerin sizi gelistirecegini dusunuyorsaniz yayimlayin. yoksa burada kimsenin sizin yaptiginiz ise ihtiyaci yok.

kolayliklar,
burak

Emrah SAKARYA

unread,
Feb 20, 2019, 2:15:13 PM2/20/19
to Python Istanbul
Insallah cozucem spyne tabanli bi hata degil ona kanaat getirdim 2 kb lik application responselerde sorun yok cunku. En basta belirttim bu konuda cok yeniyim. Ornek kodlarla bisey yapmaya calisiyorum bayada yol kateddim ,
Extra bytes hatasida sanirim dosyayi kaydederken olusan bi hata deneme yanilma bi kac gune cozerim diye dusunuyorum. Tekrar emeginize saglik bilginiz bu konuda ust seviyede.

Spyne ye ilerde tam bir soap 1.2 destegi umarim eklersiniz . Iyi calismalar

Propars Bilgi Teknolojileri

unread,
Feb 20, 2019, 4:10:24 PM2/20/19
to python-...@googlegroups.com
@Burak


Biz GIB onaylı E-Fatura entegratörüyüz. Şirket adımız ISM teknoloji.


E-Fatura projesini biz Açık kaynak yapmak çok istiyorduk ancak sürecin aşırı uzun sürmesi ve sonra gelen anlamsız GIB kaynaklı anlamsız güncellemeler bizi çok yordu.


Şuan Git reposuna baktığım da en büyük eksikliğimiz projeyi dökümante etmek olduğunu görüyorum GIB tarafında test / canlı süreçleri gerçekten uzun ve çetrefilli.

Projeyi şuan dökümante etmek bizim en az 1 ayımıza mal olur ve açtıktan sonra gelecek sorular çok olacaktır onu nasıl karşılarız bilmiyorum.


Dediğim gibi Açık kaynak hale getirmek istediğimiz ama hep ertelediğimiz bir çalışma.

Engin











Emrah SAKARYA <emrhs...@gmail.com>, 20 Şub 2019 Çar, 22:15 tarihinde şunu yazdı:
Insallah cozucem spyne tabanli bi hata degil ona kanaat getirdim 2 kb lik application responselerde sorun yok cunku. En basta belirttim bu konuda cok yeniyim. Ornek kodlarla bisey yapmaya calisiyorum bayada yol kateddim ,
Extra bytes hatasida sanirim dosyayi kaydederken olusan bi hata deneme yanilma bi kac gune cozerim diye dusunuyorum. Tekrar emeginize saglik bilginiz bu konuda ust seviyede.

Spyne ye ilerde tam bir soap 1.2 destegi umarim eklersiniz . Iyi calismalar

--
Bu e-postayı Google Grupları'ndaki "Python Istanbul" adlı gruba abone olduğunuz için aldınız.

Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için python-istanb...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için, https://groups.google.com/d/optout adresiniz ziyaret edin.
Reply all
Reply to author
Forward
0 new messages