[Twisted-web] Python and Cors

Donal McMullan donal.mcmullan at gmail.com
Sun Aug 27 15:01:51 MDT 2017


No worries - glad I could help.

On 27 August 2017 at 21:11, Deve Krehbiel <deve at speedprint.com> wrote:

> WOW! That did it. I am amazed! Thank you so much! My next chore is to
> figure out how to make sliders for this so that I can move the servos in 1
> degree increments. On to that task! I am so appreciative! Thank you Donal!
>
> Deve
>
> On Sun, Aug 27, 2017 at 2:43 PM, Donal McMullan <donal.mcmullan at gmail.com>
> wrote:
>
>> Ah sorry Deve -  I failed to paste the first like of the render_GET
>> method.
>>
>> # Import necessary files
>>
>> import serial
>>
>> from twisted.web.resource import Resource
>>
>> # Setup Arduino at correct speed
>>
>> try:
>>
>>     arduino = serial.Serial('/dev/ttyACM0', 9600)
>>
>> except:
>>
>>     arduino = serial.Serial('/dev/ttyACM1', 9600)
>>
>>
>>
>> class MoveServo(Resource):
>>
>>     isLeaf = True
>>
>>     permitted_origins = ('http://192.168.1.122:9000',)
>>
>>
>>
>>     def render_GET(self,request):
>>         origin = request.getHeader('Origin')
>>
>>         if origin in (self.permitted_origins):
>>
>>             request.setHeader('Access-Control-Allow-Origin', origin)
>>
>>         try:
>>
>>             # Send value over serial to the Arduino
>>
>>             arduino.write(request.args['value'][0])
>>
>>             return 'Success'
>>
>>         except:
>>
>>             return 'Failure'
>>
>>
>>
>> resource = MoveServo()
>>
>> On 27 August 2017 at 19:01, Deve Krehbiel <deve at speedprint.com> wrote:
>>
>>> This is what I get without your code:
>>> index1.html:1 XMLHttpRequest cannot load http://192.168.1.122:81/servos
>>> .rpy?value=70P. No 'Access-Control-Allow-Origin' header is present on
>>> the requested resource. Origin 'http://192.168.1.122:9000' is therefore
>>> not allowed access.
>>> jquery.min.js:4 XHR failed loading: GET "http://192.168.1.122:81/servo
>>> s.rpy?value=70P".
>>>
>>> This is what I get with it:
>>> jquery.min.js:4 GET http://192.168.1.122:81/servos.rpy?value=100P
>>> send @ jquery.min.js:4
>>> ajax @ jquery.min.js:4
>>> r.(anonymous function) @ jquery.min.js:4
>>> move @ index1.html:54
>>> onclick @ index1.html:17
>>> index1.html:1 XMLHttpRequest cannot load http://192.168.1.122:81/servos
>>> .rpy?value=100P. No 'Access-Control-Allow-Origin' header is present on
>>> the requested resource. Origin 'http://192.168.1.122:9000' is therefore
>>> not allowed access. *The response had HTTP status code 500.*
>>> jquery.min.js:4 XHR failed loading: GET "http://192.168.1.122:81/servo
>>> s.rpy?value=100P".
>>>
>>> I appreciate your efforts and if you have any other ideas... Thank You!
>>>
>>> Deve
>>>
>>> On Sun, Aug 27, 2017 at 12:48 PM, Deve Krehbiel <deve at speedprint.com>
>>> wrote:
>>>
>>>> Thank you for the response. In trying that code, it made it so the LAN
>>>> cannot move the buttons either. Here is the error list I got:
>>>>
>>>> *web.Server Traceback (most recent call last):*
>>>> exceptions.NameError: global name 'origin' is not defined
>>>> /usr/lib/python2.7/dist-packages/twisted/web/server.py:189 in process
>>>> 188                    self._encoder = encoder
>>>> 189            self.render(resrc)
>>>> 190        except:
>>>> /usr/lib/python2.7/dist-packages/twisted/web/server.py:238 in render
>>>> 237        try:
>>>> 238            body = resrc.render(self)
>>>> 239        except UnsupportedMethod as e:
>>>> /usr/lib/python2.7/dist-packages/twisted/web/resource.py:250 in render
>>>> 249            raise UnsupportedMethod(allowedMethods)
>>>> 250        return m(request)
>>>> 251
>>>> /usr/local/www/servos.rpy:15 in render_GET
>>>> 14    def render_GET(self,request):
>>>> 15        if origin in (self.permitted_origins):
>>>> 16            request.setHeader('Access-Control-Allow-Origin', origin)
>>>> exceptions.NameError: global name 'origin' is not defined
>>>>
>>>> Deve
>>>>
>>>> On Sun, Aug 27, 2017 at 12:03 PM, Donal McMullan <
>>>> donal.mcmullan at gmail.com> wrote:
>>>>
>>>>> Perhaps you just need to set the 'Access-Control-Allow-Origin' header?
>>>>> Something like this might work:
>>>>>
>>>>>
>>>>> # Import necessary files
>>>>>
>>>>> import serial
>>>>>
>>>>> from twisted.web.resource import Resource
>>>>>
>>>>> # Setup Arduino at correct speed
>>>>>
>>>>> try:
>>>>>
>>>>>     arduino = serial.Serial('/dev/ttyACM0', 9600)
>>>>>
>>>>> except:
>>>>>
>>>>>     arduino = serial.Serial('/dev/ttyACM1', 9600)
>>>>>
>>>>>
>>>>>
>>>>> class MoveServo(Resource):
>>>>>
>>>>>     isLeaf = True
>>>>>
>>>>>     permitted_origins = ('http://192.168.1.122:9000',)
>>>>>
>>>>>
>>>>>
>>>>>     def render_GET(self,request):
>>>>>
>>>>>         if origin in (self.permitted_origins):
>>>>>
>>>>>             request.setHeader('Access-Control-Allow-Origin', origin)
>>>>>
>>>>>         try:
>>>>>
>>>>>             # Send value over serial to the Arduino
>>>>>
>>>>>             arduino.write(request.args['value'][0])
>>>>>
>>>>>             return 'Success'
>>>>>
>>>>>         except:
>>>>>
>>>>>             return 'Failure'
>>>>>
>>>>>
>>>>>
>>>>> resource = MoveServo()
>>>>>
>>>>> On 27 August 2017 at 17:10, Deve Krehbiel <deve at speedprint.com> wrote:
>>>>>
>>>>>> First post so forgive me if I am not explaining this right.
>>>>>>
>>>>>> I am trying to make a baby cam and then heavily document it for
>>>>>> everyone to have access to. I am using a Raspberry Pi with Rasbian. I am
>>>>>> using mjpg-streamer for the streaming with no problems.
>>>>>>
>>>>>> The problem is I am also using two servos for pan and tilt. To
>>>>>> accomplish this I am using an Arduino Uno. This is so I can add IR lighting
>>>>>> for night vision, etc later. I am not a programmer so this is getting
>>>>>> frustrating after a few weeks of failure.
>>>>>>
>>>>>> How is it failing you might ask..well, its working perfectly with
>>>>>> only ONE exception:
>>>>>> Every time I push the button for left/right/up/down I get this:
>>>>>>
>>>>>> XMLHttpRequest cannot load http://192.168.1.122:81/servos
>>>>>> .rpy?value=100P. No 'Access-Control-Allow-Origin' header is present
>>>>>> on the requested resource. Origin 'http://192.168.1.122:9000' is
>>>>>> therefore not allowed access.
>>>>>>
>>>>>> On the local area network, it still works, but taking it to the
>>>>>> internet it does not.
>>>>>>
>>>>>> Here are the two programs that make this happen. One is servos.rpy
>>>>>> and the other is the supporting HTML/Get script;
>>>>>> ****
>>>>>> servos.rpy
>>>>>> -----------------------------------
>>>>>> # Import necessary files
>>>>>> import serial
>>>>>> from twisted.web.resource import Resource
>>>>>> # Setup Arduino at correct speed
>>>>>> try:
>>>>>>         arduino = serial.Serial('/dev/ttyACM0', 9600)
>>>>>> except:
>>>>>>         arduino = serial.Serial('/dev/ttyACM1', 9600)
>>>>>>
>>>>>> class MoveServo(Resource):
>>>>>>         isLeaf = True
>>>>>>         def render_GET(self,request):
>>>>>>                 try:
>>>>>>                 # Send value over serial to the Arduino
>>>>>>                         arduino.write(request.args['value'][0])
>>>>>>                         return 'Success'
>>>>>>                 except:
>>>>>>                         return 'Failure'
>>>>>>
>>>>>> resource = MoveServo()
>>>>>> ***
>>>>>>
>>>>>> Now for the HTML/Get script:
>>>>>>
>>>>>> **
>>>>>> <!doctype html>
>>>>>> <html>
>>>>>> <head>
>>>>>> <title>Make Use Of DIY Security Camera</title>
>>>>>> <style type="text/css">
>>>>>> #container {
>>>>>> /* center the content */
>>>>>> margin: 0 auto;
>>>>>> text-align: center;
>>>>>> }
>>>>>> </style>
>>>>>> </head>
>>>>>> <body>
>>>>>> <div id="container">
>>>>>> <img src="/?action=stream" /><br>
>>>>>> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jque
>>>>>> ry.min.js"></script><br />
>>>>>> <button onclick="servos.move('P', 10)">Left</button>
>>>>>> <button onclick="servos.move('P', -10)">Right</button>
>>>>>> <button onclick="servos.move('T', -10)">Down</button>
>>>>>> <button onclick="servos.move('T', 10)">Up</button>
>>>>>> </div>
>>>>>> </body>
>>>>>> <script>
>>>>>> var servos;
>>>>>> $( document ).ready(function() {
>>>>>> servos = moveServos();
>>>>>> });
>>>>>> function moveServos() {
>>>>>> // Store some settings, adjust to suit
>>>>>> var panPos = 70,
>>>>>> tiltPos = 90,
>>>>>> tiltMax = 170,
>>>>>> tiltMin = 45,
>>>>>> panMax = 170,
>>>>>> panMin = 20;
>>>>>> return {
>>>>>> move:function(servo, adjustment) {
>>>>>> var value;
>>>>>> if(servo == 'P') {
>>>>>> if(!((panPos >= panMax && adjustment > 0) || (panPos <= panMin &&
>>>>>> adjustment < 0))) {
>>>>>> // Still within allowed range, "schedule" the movement
>>>>>> panPos += adjustment;
>>>>>> }
>>>>>> value = panPos + 'P';
>>>>>> }
>>>>>> else if(servo == 'T') {
>>>>>> if(!((tiltPos >= tiltMax && adjustment > 0) || (tiltPos <= tiltMin &&
>>>>>> adjustment < 0))) {
>>>>>> // Still within allowed range, "schedule" the movement
>>>>>> tiltPos += adjustment;
>>>>>> }
>>>>>> value = tiltPos + 'T';
>>>>>> }
>>>>>> // Use AJAX to actually move the servo
>>>>>> $.get('http://192.168.1.122:81/servos.rpy?value=' + value);
>>>>>> },
>>>>>> }
>>>>>> }
>>>>>> </script>
>>>>>> </html>
>>>>>>
>>>>>> *****
>>>>>> Twisted is started:  sudo twistd -n web -p 81 --path /usr/local/www/
>>>>>>
>>>>>> I would be forever grateful if someone could take a serious look at
>>>>>> this and tell me where I am going wrong. Once this is fixed, I can start
>>>>>> documenting the entire system for everyone. Thank you!
>>>>>>
>>>>>> Deve
>>>>>>
>>>>>> _______________________________________________
>>>>>> Twisted-web mailing list
>>>>>> Twisted-web at twistedmatrix.com
>>>>>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Twisted-web mailing list
>>>>> Twisted-web at twistedmatrix.com
>>>>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Twisted-web mailing list
>>> Twisted-web at twistedmatrix.com
>>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>>
>>>
>>
>> _______________________________________________
>> Twisted-web mailing list
>> Twisted-web at twistedmatrix.com
>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>
>>
>
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-web/attachments/20170827/ec392057/attachment-0001.html>


More information about the Twisted-web mailing list