class CrudService(ServiceBase): @rpc(Mandatory.UnsignedInteger32, _returns=T) def get(ctx, obj_id): return ctx.udc.session.query(T).filter_by(id=obj_id).one() @rpc(T, _returns=UnsignedInteger32) def put(ctx, obj): if obj.id is None: ctx.udc.session.add(obj) ctx.udc.session.flush() else: if ctx.udc.session.query(T).get(obj.id) is None: raise ResourceNotFoundError('%s.id=%d' % (T_name, obj.id)) else: ctx.udc.session.merge(obj) return obj.id @rpc(Mandatory.UnsignedInteger32) def del_(ctx, obj_id): count = ctx.udc.session.query(T).filter_by(id=obj_id).count() if count == 0: raise ResourceNotFoundError(obj_id) ctx.udc.session.query(T).filter_by(id=obj_id).delete() @rpc(_returns=Iterable(T)) def get_all(ctx): return ctx.udc.session.query(T)
class ItemService(ServiceBase): @srpc(_returns=Iterable(Item)) def item_all(): for item in myapp_models.Item.objects.all(): yield Item(name=item.name, value=item.value, updated_at=item.updated_at)
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() @spyne.srpc(Unicode, _returns=Iterable(String)) # @spyne.srpc(Float, Float, _returns=Iterable(Unicode)) def query(words): data.execute(""" SHOW COLUMNS from mydb.""" + words) result = [] for value in data: result.append(value[0]) print len(result) data.execute(""" SELECT * from """ + words) for value in data: temp = '{' for x in range(0, len(result)): temp += '"' + result[x] + '":"' + str(value[x]) + '"' if x == len(result) - 1: temp += '}' else: temp += ',' print temp yield temp temp = ''
class HelloWorldService(Service): @rpc(String, UnsignedInteger, _returns=Iterable(String)) def say_hello(ctx, name, times): def cb(ret): for i in range(times): ret.append('Hello, %s' % name) return Iterable.Push(cb)
class BookEventRequest(ComplexModel): __namespace__ = 'spyne.ticketx.book' user_id = Integer section_list = Iterable(BookEventSection) callback = Unicode callback_type = Unicode
class BookService(ServiceBase): @rpc(_returns=Iterable(Book)) def book_listing(ctx): try: return BookModel.objects.all() except BookModel.DoesNotExist: raise ResourceNotFoundError('Book') @rpc(Unicode, Unicode, _returns=Book) def get_book(ctx, title = None, isbn = None): try: return BookModel.objects.filter(Q(title=title) | Q(isbn=isbn)).first() except BookModel.DoesNotExist: raise ResourceNotFoundError('Book') @rpc(Unicode, Integer, _returns=Book) def update_book_copies(ctx, isbn, copies): try: book = BookModel.objects.filter(isbn=isbn).first() book.copies += copies book.save() except BookModel.DoesNotExist: raise ResourceNotFoundError('Book') @rpc(Book, _returns=Book) def create_book(ctx, book): try: return BookModel.objects.create(**book.as_dict()) except IntegrityError: raise ResourceAlreadyExistsError('Book')
class Order(ComplexModelBase): orderID = ID orderPartnerID = ID orderManagerID = ID orderCreateDateTime = MandatoryDateTime orderServices = Iterable(Service, nillable=False) orderFeedbackURL = Unicode(255)
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __in_protocol__ = Soap11() __out_protocol__ = Soap11() __tns__ = 'http://127.0.0.1/' @spyne.srpc( Array(Person), # 请求类型 _returns=Iterable(Unicode), # 返回类型 _in_variable_names={'data': 'param'}, # 请求节点名,默认为函数定义,修改为param _out_variable_name='return') # 返回节点名 def person(self, data): if not data: yield 'None' for person in data: yield 'name is : %s, age is %s.' % (person.name, person.age) @spyne.srpc(Integer, _returns=Integer, _out_variable_name='return') def block(ctx, seconds): print(1) return '1' __aux__ = ThreadAuxProc(pool_size=1) @spyne.srpc(Integer) def block(ctx, seconds): print(2)
class UTPService(ServiceBase): @srpc(_returns=DateTime) def utc(): return datetime.datetime.utcnow() @srpc(_returns=DateTime) def now(): return datetime.datetime.now() @srpc(_returns=ComplexMandatory(Response, type_name='Response')) def hello(): logger.debug('hello called') return Response(0, 'OK') @srpc(Iterable(City, nillable=False), _returns=ComplexMandatory(Response, type_name='Response')) def updateCities(cities): return Response(0, 'OK') @srpc(Iterable(CarClass, nillable=False), _returns=ComplexMandatory(Response, type_name='Response')) def updateCarClasses(classes): return Response(0, 'OK') @srpc(Iterable(Place, nillable=False), _returns=ComplexMandatory(Response, type_name='Response')) def updatePlaces(places): return Response(0, 'OK') @rpc(Iterable(Order, nillable=False), _returns=ComplexMandatory(Response, type_name='Response')) def addOrUpdateOrders(self, orders): for order in orders: self.app.db.create_or_update_order(order) return Response(0, 'OK') @rpc(DateTime, DateTime, _returns=Iterable(Order)) def getOrders(self, dateFrom, dateTo): orders = self.app.db.get_orders(DatesRange(dateFrom, dateTo)) for order in orders: order['orderCreateDateTime'] = to_datetime( order['orderCreateDateTime']) for service in order['orderServices']: service['serviceMeetDateTime'] = to_datetime( service['serviceMeetDateTime']) return orders
class Service(ComplexModelBase): _order = None serviceID = ID serviceType = ServiceType serviceStatus = Status serviceCarClassID = ID servicePassengers = Iterable(Passenger, nillable=False) servicePassengersCount = Mandatory.UnsignedInteger # число пассажиров может отличаться от списка выше serviceMeetDateTime = MandatoryDateTime serviceMeetPlate = Unicode serviceAddresses = Iterable(Address) serviceBaggage = Unicode serviceBabyChairs = Mandatory.UnsignedInteger() serviceComment = Unicode
class HelloWorldService(ServiceBase): @rpc(_returns=Iterable(Unicode)) def say_hello(ctx): plans = Planes.objects.all() personas = Persona.objects.all() for plan in plans: yield ("Tipo de Plan : " + str(plan.tipoplan) + ", Valor: " + str(plan.valor))
class CCTVService(ServiceBase): @srpc(String, _returns=Iterable(String)) def peopleInCCTV(CCTVName): if CCTVName == 'CCTV1': yield 'Frank' yield 'Oat' elif CCTVName == 'CCTV2': yield 'Frank' elif CCTVName == 'CCTV3': yield 'None' else: None @srpc(_returns=Iterable(String)) def CCTVList(): yield 'CCTV01' yield 'CCTV02' yield 'CCTV03'
class FibonanciService(ServiceBase): @srpc(UnsignedInteger, _returns=Iterable(UnsignedInteger)) def Fibonacci(n): a, b = 0, 1 while True: if a > n: return yield a a, b = b, a + b
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() @spyne.srpc(Unicode, Integer, _returns=Iterable(Unicode)) def echo(str, cnt): for i in range(cnt): yield str
class MedicationPlanService(Service): @rpc(Long, DateTime, _returns=Iterable(MedicationPlanNotObeyed)) def get_not_obeyed_medication_plan(self, patient_id, date_time): date = date_time.date() medication_plans = MedicationPlan.objects.filter(patient_id=patient_id, start_date__lte=date, end_date__gte=date) not_obeyed_medication_plans = [] for medication_plan in medication_plans: intake_interval_period = medication_plan.intake_interval_period all_intake_interval = [ (i * intake_interval_period, (i + 1) * intake_interval_period) for i in range( 0, 24 // medication_plan.intake_interval_period + 1, 2) ] all_intake_interval = [(s, e) for s, e in all_intake_interval if s < 24 and e < 24] taken_medication_plan = MedicationPlanInterval.objects.filter( day=date, medication_plan=medication_plan.id, taken_on_time=True) if len(taken_medication_plan) == len(all_intake_interval): continue saved_intake_intervals = MedicationPlanInterval.objects.filter( day=date, medication_plan=medication_plan.id).order_by( 'intake_interval_start') for mdi in saved_intake_intervals: mdi.taken_on_time = int.from_bytes(mdi.taken_on_time, "big") intake_intervals = [] intake_intervals = intake_intervals + saved_intake_intervals[::1] for s, e in all_intake_interval[len(saved_intake_intervals):]: mpi = MedicationPlanInterval() mpi.medication_plan = medication_plan mpi.day = date mpi.intake_interval_start = s mpi.intake_interval_end = e mpi.hour = s mpi.taken_on_time = False intake_intervals.append(mpi) med_plan = MedicationPlanNotObeyed() med_plan.medication_plan = medication_plan med_plan.intake_intervals = intake_intervals not_obeyed_medication_plans.append(med_plan) return not_obeyed_medication_plans
class ActivityService(Service): @rpc(Long, DateTime, _returns=Iterable(ActivityModel)) def get_activities_by_patient_id(self, patient_id, datetime): date = datetime.date() activities_per_day = Activity.objects.filter(patient_id=patient_id, start_date__contains=date) for activity in activities_per_day: activity.is_normal = bool.from_bytes(activity.is_normal, "big") activity.is_violated = bool.from_bytes(activity.is_violated, "big") return activities_per_day @rpc(Long, Boolean, _returns=ActivityModel) def annotate_activity(self, activity_id, label): try: print(activity_id, label) activity = Activity.objects.get(pk=activity_id) if type(activity.is_violated) == bytes: activity.is_violated = bool.from_bytes(activity.is_violated, "big") activity.is_normal = label activity.save() return activity except Exception as ex: raise ResourceNotFoundError('Activity %s not found' % activity_id) @rpc(Long, Unicode) def add_recommendation(self, activity_id, recommendation): try: activity = Activity.objects.get(pk=activity_id) if type(activity.is_violated) == bytes: activity.is_violated = bool.from_bytes(activity.is_violated, "big") if type(activity.is_normal) == bytes: activity.is_normal = bool.from_bytes(activity.is_normal, "big") if activity.is_normal: raise Exception("Activity is labeled as normal") latest_activity = ActivityRecommendation.objects.latest('id') latest_id = latest_activity.id + 1 activity_recommendation = ActivityRecommendation() activity_recommendation.id = latest_id activity_recommendation.activity_id = activity.id activity_recommendation.recommendation = recommendation activity_recommendation.save(force_insert=True) except ObjectDoesNotExist as ex: raise ResourceNotFoundError('Activity %s not found' % activity_id) except Exception as ex: raise Fault(faultstring=str(ex))
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() @spyne.srpc(Float, Float, _returns=Iterable(Float)) def echo(w, h): h_in_m = h / 100 BMI = w / (h_in_m**2) yield float("{0:.2f}".format(BMI))
class HelloWorldService(ServiceBase): @rpc(Unicode, Integer, _returns=Iterable(Unicode)) def say_hello(ctx, name, times): ''' Docstrings for service methods appear as documentation in the wsdl <b>what fun</b> @param name the name to say hello to @param the number of times to say hello @return the completed array ''' return [u'Hello, %s' % name] * times
class HelloWorldService(ServiceBase): @srpc(String, UnsignedInteger, _returns=Iterable(String)) def say_hello(name, times): """Docstrings for service methods appear as documentation in the wsdl. <b>What fun!</b> @param name: the name to say hello to @param times: the number of times to say hello @return When returning an iterable, you can use any type of python iterable. Here, we chose to use generators. """ for i in range(times): yield u'Hello, %s' % name
class titi(MyClass): player = ('do') def __init__(self): print('toto') self.player = 're' @rpc(Unicode, Integer, _returns=Iterable(Unicode)) def say_hello(ctx, name, times): # @NoSelf for i in range(times): # @UnusedVariable yield 'Hello, %s' % name
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() @spyne.srpc(Unicode, _returns=Iterable(Unicode)) def obtenerMateriaAlumno(legajo): materias = session.query(Materia).filter( Materia.legajo == legajo).all() for materia in materias: yield str(materia.name)
class Fibonacci(ServiceBase): @srpc(Integer,_returns=Iterable(Integer)) def fib(n): final = [] a, b = 0, 1 final.append(a) final.append(b) for i in range(n - 2): a, b = b, a + b final.append(a) return final
class EchoService(Service): srpc_kparams = {'_returns': Iterable(Unicode)} if _in_message_name: srpc_kparams['_in_message_name'] = _in_message_name if _operation_name: srpc_kparams['_operation_name'] = _operation_name @srpc(Unicode, Integer, **srpc_kparams) def echo(string, times): for i in range(times): yield 'Echo, %s' % string
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() @spyne.srpc(Unicode, Integer, _returns=Iterable(Unicode)) def echo(str, cnt): for i in range(cnt): yield str @spyne.srpc(Unicode, _returns=AnswerServiceResponse) def answer(str): return AnswerServiceResponse(dummy_str='answer is', dummy_num=42)
class HelloWorldService(ServiceBase): @srpc(String, Integer, _returns=Iterable(String)) def say_hello(name, times): ''' Docstrings for service methods appear as documentation in the wsdl <b>what fun</b> @param name the name to say hello to @param the number of times to say hello @return the completed array ''' for i in range(times): yield 'Hello, %s' % name
class SomeJsonService(spyne.Service): __service_url_path__ = '/json/anotherservice' __in_protocol__ = HttpRpc(validator='soft') __out_protocol__ = JsonDocument(ignore_wrappers=True) @spyne.srpc(Unicode, Integer, _returns=Iterable(Unicode)) def echo(str, cnt): for i in range(cnt): yield str @spyne.srpc(Unicode, _returns=AnswerServiceResponse) def answer(str): return AnswerServiceResponse(dummy_str='answer is', dummy_num=42)
class MyClass(ServiceBase): ''' classdocs ''' def __new__(self): print('new') def __init__(self): print('init !') super(MyClass, self).__init__() @rpc(Unicode, Integer, _returns=Iterable(Unicode)) def say_hello(ctx, name, times): # @NoSelf pass
class BookLoanService(ServiceBase): @rpc(_returns=Iterable(BookLoan)) def book_loan_listing(ctx): try: return BookModel.objects.all() except BookModel.DoesNotExist: raise ResourceNotFoundError('Book') @rpc(Unicode, Unicode, Integer, _returns=BookLoan) def create_book_loan(ctx, user_email, isbn, days): try: user = UserModel.objects.get(email=user_email) except UserModel.DoesNotExist: raise ResourceNotFoundError('User') try: book = BookModel.objects.filter(isbn=isbn).first() except BookModel.DoesNotExist: raise ResourceNotFoundError('Book') rented = BookLoanModel.objects.filter( user=user, book=book, return_date=None ).last() print(rented) if rented is not None: raise ResourceAlreadyExistsError('BookLoan') return BookLoanModel.objects.create( user=user, book=book, days=days ) @rpc(Unicode, _returns=BookLoan) def devolve_book_loan(ctx, isbn): try: book = BookModel.objects.filter(isbn=isbn).first() except BookModel.DoesNotExist: raise ResourceNotFoundError('Book') book_loan = BookLoanModel.objects.filter( book=book, return_date=None ).last() book_loan.return_date = datetime.datetime.now() book_loan.save() return book_loan
class Tools(spyne.Service): __service_url_path__ = '/service' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() @spyne.srpc(Unicode, _returns=Iterable(AnyDict)) def info(tid): query = "SELECT * FROM tools WHERE id='{}'" try: tools = db.session.execute(query.format(tid)) except Exception as e: tools = [dict(error=e.__str__())] for tool in tools: yield dict(tool)
class SomeSoapService(spyne.Service): __service_url_path__ = '/soap/someservice' __target_namespace__ = 'custom_namespace' __in_protocol__ = Soap11(validator='lxml') __out_protocol__ = Soap11() __wsse_conf__ = { 'username': '******', 'password': '******' # never store passwords directly in sources! } @spyne.srpc(Unicode, Integer, _returns=Iterable(Unicode)) def echo(str, cnt): for i in range(cnt): yield str