Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-adapt-parser for 
openSUSE:Factory checked in at 2021-11-27 00:51:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-adapt-parser (Old)
 and      /work/SRC/openSUSE:Factory/.python-adapt-parser.new.1895 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-adapt-parser"

Sat Nov 27 00:51:38 2021 rev:6 rq:934030 version:1.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-adapt-parser/python-adapt-parser.changes  
2021-10-16 22:47:48.428700358 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-adapt-parser.new.1895/python-adapt-parser.changes
        2021-11-27 00:52:30.842555610 +0100
@@ -1,0 +2,10 @@
+Tue Nov  2 10:26:21 UTC 2021 - pgaj...@suse.com
+
+- version update to 1.0.0
+  * Safe defaults #147
+  * Updated docstrings
+  * Fix is_prefix() implementation in Trie #148
+  * Python2 is officially supported
+  * Removed requirement of pyee
+
+-------------------------------------------------------------------

Old:
----
  v0.6.1.tar.gz

New:
----
  v1.0.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-adapt-parser.spec ++++++
--- /var/tmp/diff_new_pack.mWzMYK/_old  2021-11-27 00:52:31.266554147 +0100
+++ /var/tmp/diff_new_pack.mWzMYK/_new  2021-11-27 00:52:31.266554147 +0100
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-adapt-parser
-Version:        0.6.1
+Version:        1.0.0
 Release:        0
 Summary:        A text-to-intent parsing framework
 License:        Apache-2.0
@@ -53,7 +53,7 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-%python_exec setup.py test
+%pyunittest test/*.py
 
 %files %{python_files}
 %license LICENSE.md

++++++ v0.6.1.tar.gz -> v1.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/.github/workflows/push.yml 
new/adapt-release-v1.0.0/.github/workflows/push.yml
--- old/adapt-release-v0.6.1/.github/workflows/push.yml 2021-09-13 
16:55:44.000000000 +0200
+++ new/adapt-release-v1.0.0/.github/workflows/push.yml 2021-09-29 
04:25:34.000000000 +0200
@@ -39,9 +39,12 @@
 
   tag-release-if-needed:
     runs-on: ubuntu-latest
+    outputs:
+      version: ${{ steps.tag.outputs.version }}
     steps:
     - uses: actions/checkout@v2
-    - name: Tag release
+    - id: tag
+      name: Tag release
       env:
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         TWINE_USERNAME: __token__
@@ -51,9 +54,63 @@
         VERSION=$(python setup.py --version)
         git tag -f release/v$VERSION || exit 0
         if git push tag_target --tags; then
-          echo "New tag published on github, push to pypi as well."
+          echo "New tag published on github, push to PyPI as well."
           pip install twine wheel
           python setup.py sdist bdist_wheel
           twine check dist/*
           twine upload dist/*
+          echo "Package pushed to PyPI. Prepare for mycroft-core PR."
+          echo "::set-output name=version::$VERSION"
         fi
+
+  publish:
+    runs-on: ubuntu-latest
+    if: contains(github.ref, '/tags/release')
+    needs: build
+    steps:
+    - uses: actions/checkout@v2
+    - name: Push to pypi
+      env:
+        TWINE_USERNAME: __token__
+        TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
+      run: |
+        pip install twine wheel
+        python setup.py sdist bdist_wheel
+        twine check dist/*
+        twine upload dist/*
+
+  update-mycroft-core:
+    runs-on: ubuntu-latest
+    needs: [publish, tag-release-if-needed]
+    steps:
+    - uses: actions/checkout@v2
+      with: 
+        repository: MycroftAI/mycroft-core
+
+    - name: Update mycroft-core
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      run: |
+        VERSION=${{needs.tag-release-if-needed.outputs.version}}
+        if [[ $VERSION != *"."* ]]; then
+          echo "Not a valid version number."
+          exit 1
+        elif [[ $VERSION == *"-"* ]]; then
+          echo "Pre-release suffix detected. Not pushing to mycroft-core."
+        else
+          sed -E 
"s/adapt-parser==[0-9]+\.[0-9]+\.[0-9]+/adapt-parser==$VERSION/" 
requirements/requirements.txt > tmp-requirements.txt
+          mv tmp-requirements.txt requirements/requirements.txt
+          echo "ADAPT_VERSION=$VERSION" >> $GITHUB_ENV
+        fi
+
+    - name: Create Pull Request
+      if: ${{ env.ADAPT_VERSION }}
+      uses: peter-evans/create-pull-request@v3
+      with:
+        token: ${{ secrets.BOT_TOKEN }}
+        push-to-fork: mycroft-adapt-bot/mycroft-core
+        commit-message: Update Adapt to v${{ env.ADAPT_VERSION }}
+        branch: feature/update-adapt
+        delete-branch: true
+        title: Update Adapt to v${{ env.ADAPT_VERSION }}
+        body: Automated update from mycroftai/adapt.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/adapt/context.py 
new/adapt-release-v1.0.0/adapt/context.py
--- old/adapt-release-v0.6.1/adapt/context.py   2021-09-13 16:55:44.000000000 
+0200
+++ new/adapt-release-v1.0.0/adapt/context.py   2021-09-29 04:25:34.000000000 
+0200
@@ -14,11 +14,7 @@
 #
 
 """
-This is to Manage Context of a Conversation
-
-Notes:
-    Comments are subject to evaluation and may not reflect intent.
-    Comments should be updated as code is clearly understood.
+Context Management code for Adapt (where context ~= persistent session state).
 """
 from six.moves import xrange
 
@@ -34,7 +30,7 @@
         entities(list): Entities that belong to ContextManagerFrame
         metadata(object): metadata to describe context belonging to 
ContextManagerFrame
     """
-    def __init__(self, entities=[], metadata={}):
+    def __init__(self, entities=None, metadata=None):
         """
         Initialize ContextManagerFrame
 
@@ -42,17 +38,15 @@
             entities(list): List of Entities...
             metadata(object): metadata to describe context?
         """
-        self.entities = entities
-        self.metadata = metadata
+        self.entities = entities or []
+        self.metadata = metadata or {}
 
-    def metadata_matches(self, query={}):
+    def metadata_matches(self, query=None):
         """
         Returns key matches to metadata
 
-        This will check every key in query for a matching key in metadata
-        returning true if every key is in metadata.  query without keys
-        return false.
-
+        Asserts that the contents of query exist within (logical subset of)
+        metadata in this frame.
         Args:
             query(object): metadata for matching
 
@@ -64,6 +58,7 @@
                     found in self.metadata
 
         """
+        query = query or {}
         result = len(query.keys()) > 0
         for key in query.keys():
             result = result and query[key] == self.metadata.get(key)
@@ -96,8 +91,11 @@
     def __init__(self):
         self.frame_stack = []
 
-    def inject_context(self, entity, metadata={}):
+    def inject_context(self, entity, metadata=None):
         """
+        Add an entity to the current context.
+        If metadata matches the top of the context frame stack, merge.
+        Else, create a new frame and push it on top of the stack.
         Args:
             entity(object):
                 format {'data': 'Entity tag as <str>',
@@ -106,6 +104,7 @@
                          }
             metadata(object): dict, arbitrary metadata about the entity being 
added
         """
+        metadata = metadata or {}
         top_frame = self.frame_stack[0] if len(self.frame_stack) > 0 else None
         if top_frame and top_frame.metadata_matches(metadata):
             top_frame.merge_context(entity, metadata)
@@ -113,9 +112,9 @@
             frame = ContextManagerFrame(entities=[entity], 
metadata=metadata.copy())
             self.frame_stack.insert(0, frame)
 
-    def get_context(self, max_frames=None, missing_entities=[]):
+    def get_context(self, max_frames=None, missing_entities=None):
         """
-        Constructs a list of entities from the context.
+        Returns context, including decaying weights based on depth in stack.
 
         Args:
             max_frames(int): maximum number of frames to look back
@@ -124,6 +123,7 @@
         Returns:
             list: a list of entities
         """
+        missing_entities = missing_entities or []
         if not max_frames or max_frames > len(self.frame_stack):
             max_frames = len(self.frame_stack)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/adapt/engine.py 
new/adapt-release-v1.0.0/adapt/engine.py
--- old/adapt-release-v0.6.1/adapt/engine.py    2021-09-13 16:55:44.000000000 
+0200
+++ new/adapt-release-v1.0.0/adapt/engine.py    2021-09-29 04:25:34.000000000 
+0200
@@ -52,7 +52,8 @@
 
     def __best_intent(self, parse_result, context=[]):
         """
-        Decide the best intent
+        For the specified parse_result, find the intent parser with the
+        highest confidence match.
 
         Args:
             parse_result(list): results used to match the best intent.
@@ -278,11 +279,6 @@
     def __init__(self):
         """
         Initialize DomainIntentDeterminationEngine.
-
-        Args:
-            tokenizer(tokenizer): The tokenizer you wish to use.
-            trie(Trie): the Trie() you wish to use.
-            domain(str): a string representing the domain you wish to add
         """
         self.domains = {}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/adapt/tools/debug/__init__.py 
new/adapt-release-v1.0.0/adapt/tools/debug/__init__.py
--- old/adapt-release-v0.6.1/adapt/tools/debug/__init__.py      2021-09-13 
16:55:44.000000000 +0200
+++ new/adapt-release-v1.0.0/adapt/tools/debug/__init__.py      2021-09-29 
04:25:34.000000000 +0200
@@ -3,6 +3,24 @@
 from adapt.engine import DomainIntentDeterminationEngine, \
     IntentDeterminationEngine
 
+"""
+Pickling is not inherently secure, and the documentation for pickle
+recommends never unpickling data from an untrusted source. This makes
+using it for debug reports a little dicey, but fortunately there are 
+some things we can leverage to make things safer.
+
+First, we expect the deserialized object to be an instance of 
+IntentDeterminationEngine or DomainIntentDeterminationEngine as a basic
+sanity check. We also leverage a custom `pickle.Unpickler` implementation
+that only allows specific imports from the adapt namespace, and displays
+a helpful error message if this assumption is validated.
+
+This is a bit of security theater; folks investigating issues have to know to 
+specifically use this library to hydrate any submissions, otherwise it's all 
+for naught. 
+"""
+
+
 EXPECTED_ENGINES = set([
     IntentDeterminationEngine,
     DomainIntentDeterminationEngine,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/adapt/tools/text/tokenizer.py 
new/adapt-release-v1.0.0/adapt/tools/text/tokenizer.py
--- old/adapt-release-v0.6.1/adapt/tools/text/tokenizer.py      2021-09-13 
16:55:44.000000000 +0200
+++ new/adapt-release-v1.0.0/adapt/tools/text/tokenizer.py      2021-09-29 
04:25:34.000000000 +0200
@@ -36,7 +36,7 @@
         pass
 
     def tokenize(self, string):
-        """Used to parce a string into tokens
+        """Used to parse a string into tokens
 
         This function is to take in a string and return a list of tokens
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/adapt/tools/text/trie.py 
new/adapt-release-v1.0.0/adapt/tools/text/trie.py
--- old/adapt-release-v0.6.1/adapt/tools/text/trie.py   2021-09-13 
16:55:44.000000000 +0200
+++ new/adapt-release-v1.0.0/adapt/tools/text/trie.py   2021-09-29 
04:25:34.000000000 +0200
@@ -121,7 +121,9 @@
             self.children[iterable[index]].insert(iterable, index + 1, data)
 
     def is_prefix(self, iterable, index=0):
-        if iterable[index] in self.children:
+        if index == len(iterable):
+            return True
+        elif iterable[index] in self.children:
             return self.children[iterable[index]].is_prefix(iterable, index + 
1)
         else:
             return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/setup.py 
new/adapt-release-v1.0.0/setup.py
--- old/adapt-release-v0.6.1/setup.py   2021-09-13 16:55:44.000000000 +0200
+++ new/adapt-release-v1.0.0/setup.py   2021-09-29 04:25:34.000000000 +0200
@@ -32,7 +32,7 @@
 
 setup(
     name="adapt-parser",
-    version="0.6.1",
+    version="1.0.0",
     author="Sean Fitzgerald",
     author_email="s...@fitzgeralds.me",
     description=("A text-to-intent parsing framework."),
@@ -43,7 +43,7 @@
     url="https://github.com/MycroftAI/adapt";,
     packages=["adapt", "adapt.tools", "adapt.tools.text", "adapt.tools.debug"],
     classifiers=[
-        'Development Status :: 4 - Beta',
+        'Development Status :: 5 - Production/Stable',
         'Intended Audience :: Developers',
         'Topic :: Text Processing :: Linguistic',
         'License :: OSI Approved :: Apache Software License',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/adapt-release-v0.6.1/test/TrieTest.py 
new/adapt-release-v1.0.0/test/TrieTest.py
--- old/adapt-release-v0.6.1/test/TrieTest.py   2021-09-13 16:55:44.000000000 
+0200
+++ new/adapt-release-v1.0.0/test/TrieTest.py   2021-09-29 04:25:34.000000000 
+0200
@@ -179,5 +179,16 @@
         assert "Gonzo" in muppet_names
         assert "Rowlf" in muppet_names
 
+    def test_is_prefix(self):
+        trie = Trie()
+        trie.insert("play", "PlayVerb")
+        trie.insert("the big bang theory", "Television Show")
+        trie.insert("the big", "Not a Thing")
+        trie.insert("barenaked ladies", "Radio Station")
+
+        assert trie.root.is_prefix("the")
+        assert trie.root.is_prefix("play")
+        assert not trie.root.is_prefix("Kermit")
+
     def tearDown(self):
         pass

Reply via email to