#!/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
Merhaba,
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
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 gibiHeaders:---------------------------------------------------------------------------------------------------------------------------------------------------
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
Content-ID: <04dfbca1-54b8-4631-a556-4addea671...@cxf.apache.org>
content_type = cgi.parse_header(content_type)
bi komut var araştırmalarım sonucu boundary objesini bu şekilde parse etmişlerama 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)
Merhaba,
Merhaba,
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
merhaba,
bu mail grubuna kayitli kac kisi var bilmiyorum ama sizin hata arama calismalarinizin tadinin kacmaya basladigini dusunmeye baslamislardir artik.
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
--
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.
Selam Burak,
merhaba,
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.
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:
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.
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
Spyne ye ilerde tam bir soap 1.2 destegi umarim eklersiniz . Iyi calismalar
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.