omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    pip install gestures, WKWebView, UI animations and more

    Pythonista
    8
    36
    13097
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • bennr01
      bennr01 last edited by

      would appreciate any hints on how to debug this?

      In general, stashconf py_traceback 1, stashconf py_pdb 1 and pip --verbose install pythonista-gestures.

      I just tried and could not replicate the error (it installs successfully).

      Error matches a stash issue.

      I think that one is a different issue. StaSh pip has two installers: one for source install (via setup.py) and one for wheels (.whl). The linked issue was regarding the source install, while this issue is with wheel installations. Also, I think we already fixed the linked issue, but I am not sure...

      1 Reply Last reply Reply Quote 1
      • mikael
        mikael @becktrex last edited by

        @becktrex, if pip will not co-operate, you can just as well open stash and:

        cd site-packages
        wget https://raw.githubusercontent.com/mikaelho/pythonista-gestures/master/gestures.py
        
        1 Reply Last reply Reply Quote 0
        • becktrex
          becktrex last edited by

          StaSh v0.7.2 on python 3.6.1
          pythonista V. 3.4 (330025)
          iphone 6S+
          iOS 13.3.1
          StaSh "selfupdate" returns "Already at latest version"

          I've tried this over the last couple of days. Restarted Pythonista, rebooted iphone, etc. with the same result.

          I tried pip install again with the above "extras", no joy, results below.

          wget from the site-packages directory worked fine.
          time to play with my new ̶t̶o̶y̶s̶ tools

          
          [~/Documents]$ stashconf py_traceback 1
          [~/Documents]$ stashconf py_pdb 1
          [~/Documents]$ pip --verbose install pythonista-gestures
          Querying PyPI ... 
          Using pythonista-gestures==1.0...
          A binary distribution is available and will be used.
          Downloading package ...
          Opening: https://files.pythonhosted.org/packages/e0/76/e1766485ab9b521d9d4c304854f479b87db6df350dc54996aa5c71e4d608/pythonista_gestures-1.0-py2.py3-none-any.whl
          
          Save as: /private/var/mobile/Containers/Data/Application/1596E9F5-6DC7-4159-8555-9611A7AEB2A8/tmp//pythonista_gestures-1.0-py2.py3-none-any.whl (10408 bytes)
               10408 [100.00%]
          Installing wheel: pythonista_gestures-1.0-py2.py3-none-any.whl...
          Extracting wheel..
          Extraction finished, running handlers...
          Running handler 'WHEEL information checker'...
          Wheel generated by: flit 2.2.0
          Running handler 'dependency handler'...
          Cleaning up...
          <class 'UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 1125: ordinal not in range(128)
          Traceback (most recent call last):
            File "/private/var/mobile/Containers/Shared/AppGroup/16663993-01D5-4358-99D0-C11426AFFF9B/Pythonista3/Documents/site-packages/stash/system/shruntime.py", line 547, in exec_py_file
              exec(code, namespace, namespace)
            File "site-packages/stash/bin/pip.py", line 1492, in <module>
              repository.install(pkg_name, ver_spec, dist=dist)
            File "site-packages/stash/bin/pip.py", line 1085, in install
              self._install(pkg_name, pkg_info, archive_filename, dependency_dist=dist)
            File "site-packages/stash/bin/pip.py", line 849, in _install
              files_installed, dependencies = wheel.install(self.site_packages)
            File "/private/var/mobile/Containers/Shared/AppGroup/16663993-01D5-4358-99D0-C11426AFFF9B/Pythonista3/Documents/site-packages/stash/lib/stashutils/wheels.py", line 385, in install
              tfi = handler.handle_install(tp, targetdir)
            File "/private/var/mobile/Containers/Shared/AppGroup/16663993-01D5-4358-99D0-C11426AFFF9B/Pythonista3/Documents/site-packages/stash/lib/stashutils/wheels.py", line 286, in handle_install
              dependencies = self.read_dependencies_from_METADATA(metadatap)
            File "/private/var/mobile/Containers/Shared/AppGroup/16663993-01D5-4358-99D0-C11426AFFF9B/Pythonista3/Documents/site-packages/stash/lib/stashutils/wheels.py", line 310, in read_dependencies_from_METADATA
              for line in fin:
            File "/var/containers/Bundle/Application/FC2E1425-424E-4F22-88E8-DDBC98DBC701/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/encodings/ascii.py", line 27, in decode
              return codecs.ascii_decode(input, self.errors)[0]
          UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1125: ordinal not in range(128)
          > /var/containers/Bundle/Application/FC2E1425-424E-4F22-88E8-DDBC98DBC701/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/encodings/ascii.py(27)decode()
          -> return codecs.ascii_decode(input, self.errors)[0]
          (Pdb)
          1 Reply Last reply Reply Quote 0
          • bennr01
            bennr01 last edited by

            After looking into this issue for a bit, it seems like the same bug as in Issue #364. This should have been fixed 12 months ago, just a month after the latest version bump for master. So it is possible that you have a version installed before that version bump.

            So, since it seems like the master branch became a bit outdated,I just merged 152 commits from dev into master. This should include the fix as well as a version bump, so could you please try another selfupdate?

            mikael 1 Reply Last reply Reply Quote 1
            • becktrex
              becktrex last edited by

              That did the trick.
              selfupdate was successfull.

              "pip install pythonista-gestures" installed the first time.

              1 Reply Last reply Reply Quote 0
              • mikael
                mikael @bennr01 last edited by

                @bennr01, a big thank you! for all you do to keep us stashed & pipped.

                bennr01 1 Reply Last reply Reply Quote 0
                • bennr01
                  bennr01 @mikael last edited by

                  @mikael said:

                  @bennr01, a big thank you! for all you do to keep us stashed & pipped.

                  It's always a pleasure. Though in this case, the fix was made by yjqiang.

                  1 Reply Last reply Reply Quote 0
                  • Drizzel
                    Drizzel last edited by

                    @mikael Just a tiny correction, please correct me if I’m wrong. In the multipeer readme it says one should use <pip install multipeer> to install your module, which doesn’t work. You probably meant <pip install pythonista-multipeer>.

                    mikael 1 Reply Last reply Reply Quote 1
                    • mikael
                      mikael @Drizzel last edited by

                      @Drizzel, thank you, fixed. Multipeer was my first PyPi exercise, and my naming convention was still evolving – meaning, I did not yet know how to give a module a different name in site-packages and PyPi. :-)

                      1 Reply Last reply Reply Quote 0
                      • Anxietier
                        Anxietier last edited by

                        Hi, I tested one demo code in readme of pythonista-wkwebview

                        class MagicWebView(WKWebView):
                          
                          def on_magic(self, message):
                            print('WKWebView magic ' + message)
                            
                        html = '''
                        <body>
                        <button onclick="window.webkit.messageHandlers.magic.postMessage(\'spell\')">
                        Cast a spell
                        </button>
                        </body>
                        '''
                        
                        v = MagicWebView()
                        v.load_html(html)
                        

                        Well it works good, but when I try to load html file, the 'on_magic' doesn't work, here's my code in py file

                        class MagicWebView(WKWebView):
                        	def on_magic(self, message):
                        		print('WKWebView magic ' + message)
                        
                        v = MagicWebView()
                        v.present()
                        # v.load_html(html)
                        v.load_url('test.html', no_cache=False, timeout=5)
                        v.clear_cache()
                        

                        I don't know how to fix it

                        cvp mikael 3 Replies Last reply Reply Quote 0
                        • cvp
                          cvp @Anxietier last edited by cvp

                          @Anxietier try

                          import os
                          
                          w = WKWebView()
                          f = os.path.abspath('test.html')
                          print(f)
                          w.load_url(f)
                          w.present() 
                          
                          Anxietier 1 Reply Last reply Reply Quote 0
                          • mikael
                            mikael @Anxietier last edited by

                            @Anxietier, I see the online documentation covers this poorly. Here’s the method docstring:

                            Loads the contents of the given url asynchronously.

                            If the url starts with file://, loads a local file. If the remaining url starts with /, path starts from Pythonista root.

                            For remote (non-file) requests, there are two additional options:

                            • Set no_cache to True to skip the local cache, default is False
                            • Set timeout to a specific timeout value, default is 10 (seconds)
                            Anxietier 1 Reply Last reply Reply Quote 0
                            • mikael
                              mikael @Anxietier last edited by

                              @Anxietier, you can get this and similar documentation on other methods using the help function, e.g. in Pythonista console:

                              >>> import wkwebview
                              >>> help(wkwebview.WKWebView.load_url)
                              
                              1 Reply Last reply Reply Quote 0
                              • Anxietier
                                Anxietier @cvp last edited by

                                @cvp
                                thanks, but it seems doesn’t work, here’s my test code

                                file_name = 'test.copy(2).html'
                                file_abs_path = os.path.abspath(file_name)
                                url_file_name = 'file://' + file_name
                                url_file_abs_path = 'file://' + file_abs_path
                                
                                with open(file_name, 'r', encoding='utf8') as f:
                                	html = ''.join(f.readlines())
                                
                                v = MagicWebView()
                                v.present()
                                
                                # v.load_html(html) # can load but button doesn't work
                                
                                # v.load_url(file_name, no_cache=False, timeout=5) # can load but button doesn't work
                                
                                # v.load_url(file_abs_path, no_cache=False, timeout=5) # can load but button doesn't work
                                
                                # v.load_url(url_file_name, no_cache=False, timeout=5) # would let ista crash or load faild
                                
                                # v.load_url(url_file_abs_path, no_cache=False, timeout=5) # doesn't load
                                
                                v.clear_cache() 
                                
                                1 Reply Last reply Reply Quote 0
                                • Anxietier
                                  Anxietier @mikael last edited by

                                  @mikael
                                  I’m not sure if I described my issue clearly, and here’s my another test code, perhaps that would be clearly

                                  file_name = 'test.copy(2).html'
                                  file_abs_path = os.path.abspath(file_name)
                                  url_file_name = 'file://' + file_name
                                  url_file_abs_path = 'file://' + file_abs_path
                                  
                                  with open(file_name, 'r', encoding='utf8') as f:
                                  	html = ''.join(f.readlines())
                                  
                                  v = MagicWebView()
                                  v.present()
                                  
                                  # v.load_html(html) # can load but button doesn't work
                                  
                                  # v.load_url(file_name, no_cache=False, timeout=5) # can load but button doesn't work
                                  
                                  # v.load_url(file_abs_path, no_cache=False, timeout=5) # can load but button doesn't work
                                  
                                  # v.load_url(url_file_name, no_cache=False, timeout=5) # would let ista crash or load faild
                                  
                                  # v.load_url(url_file_abs_path, no_cache=False, timeout=5) # doesn't load
                                  
                                  v.clear_cache() 
                                  
                                  mikael 2 Replies Last reply Reply Quote 0
                                  • mikael
                                    mikael @Anxietier last edited by mikael

                                    @Anxietier, I will have to look at this, maybe something has changed in recent iOS versions.

                                    Meanwhile, this:

                                    html = ''.join(f.readlines())

                                    ... looks funny, breaking and joining with no change. Just html = f.read() should work fine.

                                    stephen 1 Reply Last reply Reply Quote 0
                                    • mikael
                                      mikael @Anxietier last edited by mikael

                                      @Anxietier, I placed this script:

                                      import wkwebview
                                      
                                      class MyWebView(wkwebview.WKWebView):
                                          
                                          def on_magic(self, message):
                                              print('WKWebView magic ' + message)
                                      
                                      wv = MyWebView()
                                      wv.present('fullscreen')
                                      
                                      wv.load_url('load_url.html')
                                      

                                      ... and this HTML as the file load_url.html in the same directory:

                                      <body>
                                      <button onclick="window.webkit.messageHandlers.magic.postMessage('spell')">
                                      Cast a spell
                                      </button>
                                      </body>
                                      

                                      And the button works fine. Note that I removed the backlashes in the onclick handler as escaping not necessary in a file.

                                      I suspect you might have some kind of non-printing character issue.

                                      Anxietier 1 Reply Last reply Reply Quote 1
                                      • stephen
                                        stephen @mikael last edited by stephen

                                        @mikael said:

                                        @Anxietier, have to look at this, maybe something has changed in recent iOS versions.

                                        Meanwhile, this:

                                        html = ''.join(f.readlines())

                                        ... looks funny, breaking and joining with no change. Just html = f.read() should work fine.

                                        much cleaner than i would of. lol

                                        
                                        html = ''.join([line for line in f])
                                        
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • Anxietier
                                          Anxietier @mikael last edited by Anxietier

                                          @mikael
                                          oh I see, I usually use r_string in py, so I didn't notice \' in doc_string
                                          now it works fine
                                          thanks for help

                                          1 Reply Last reply Reply Quote 0
                                          • Anxietier
                                            Anxietier last edited by Anxietier

                                            hi, im back again :D
                                            we know that some browser has non-pic mode (i dont know right name,just like that mean), is it possible to add that feature to wkwebview? for some reason, i just need the full html content (dom-tree maybe?)

                                            mikael 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors