[Twisted-web] Python and Cors

Deve Krehbiel deve at speedprint.com
Sun Aug 27 14:11:51 MDT 2017


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-web/attachments/20170827/9de31cbf/attachment-0001.html>


More information about the Twisted-web mailing list