Skip to content

Commit

Permalink
Revert pull request gunthercox#1484
Browse files Browse the repository at this point in the history
Tag names should be unique, not primary keys.
  • Loading branch information
gunthercox committed Dec 15, 2018
1 parent e60873e commit 556b3a7
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 45 deletions.
53 changes: 26 additions & 27 deletions chatterbot/ext/django_chatterbot/abstract_models.py
Expand Up @@ -7,6 +7,7 @@

DJANGO_APP_NAME = constants.DEFAULT_DJANGO_APP_NAME
STATEMENT_MODEL = 'Statement'
TAG_MODEL = 'Tag'

if hasattr(settings, 'CHATTERBOT'):
"""
Expand All @@ -23,11 +24,28 @@
)


class AbstractBaseTag(models.Model):
"""
The abstract base tag allows other models to be created
using the attributes that exist on the default models.
"""

name = models.SlugField(
max_length=constants.TAG_NAME_MAX_LENGTH,
unique=True
)

class Meta:
abstract = True

def __str__(self):
return self.name


class AbstractBaseStatement(models.Model, StatementMixin):
"""
The abstract base statement allows other models to
be created using the attributes that exist on the
default models.
The abstract base statement allows other models to be created
using the attributes that exist on the default models.
"""

text = models.CharField(
Expand Down Expand Up @@ -62,6 +80,11 @@ class AbstractBaseStatement(models.Model, StatementMixin):
max_length=constants.PERSONA_MAX_LENGTH
)

tags = models.ManyToManyField(
TAG_MODEL,
related_name='statements'
)

# This is the confidence with which the chat bot believes
# this is an accurate response. This value is set when the
# statement is returned by the chat bot.
Expand Down Expand Up @@ -91,27 +114,3 @@ def add_tags(self, *tags):
"""
for _tag in tags:
self.tags.get_or_create(name=_tag)


class AbstractBaseTag(models.Model):
"""
The abstract base tag allows other models to
be created using the attributes that exist on the
default models.
"""

name = models.SlugField(
primary_key=True,
max_length=constants.TAG_NAME_MAX_LENGTH
)

statements = models.ManyToManyField(
STATEMENT_MODEL,
related_name='tags'
)

class Meta:
abstract = True

def __str__(self):
return self.name
Expand Up @@ -10,16 +10,19 @@ class Migration(migrations.Migration):
operations = [
migrations.RemoveField(
model_name='tag',
name='id',
name='statements',
),
migrations.AlterField(
model_name='tag',
name='name',
field=models.SlugField(primary_key=True, serialize=False),
migrations.AddField(
model_name='statement',
name='tags',
field=models.ManyToManyField(
related_name='statements',
to='django_chatterbot.Tag'
),
),
migrations.AlterField(
model_name='tag',
name='statements',
field=models.ManyToManyField(related_name='tags', to='django_chatterbot.Statement'),
name='name',
field=models.SlugField(unique=True),
),
]
16 changes: 8 additions & 8 deletions chatterbot/ext/sqlalchemy_app/models.py
Expand Up @@ -19,14 +19,20 @@ def __tablename__(cls):
"""
return cls.__name__.lower()

id = Column(
Integer,
primary_key=True,
autoincrement=True
)


Base = declarative_base(cls=ModelBase)


tag_association_table = Table(
'tag_association',
Base.metadata,
Column('tag_name', Integer, ForeignKey('tag.name')),
Column('tag_id', Integer, ForeignKey('tag.id')),
Column('statement_id', Integer, ForeignKey('statement.id'))
)

Expand All @@ -38,7 +44,7 @@ class Tag(Base):

name = Column(
String(constants.TAG_NAME_MAX_LENGTH),
primary_key=True
unique=True
)


Expand All @@ -47,12 +53,6 @@ class Statement(Base, StatementMixin):
A Statement represents a sentence or phrase.
"""

id = Column(
Integer,
primary_key=True,
autoincrement=True
)

text = Column(
String(constants.STATEMENT_TEXT_MAX_LENGTH)
)
Expand Down
6 changes: 3 additions & 3 deletions chatterbot/storage/sql_storage.py
Expand Up @@ -198,7 +198,7 @@ def create(self, **kwargs):
statement = Statement(**kwargs)

for tag_name in tags:
tag = session.query(Tag).get(tag_name)
tag = session.query(Tag).filter_by(name=tag_name).first()

if not tag:
# Create the tag
Expand Down Expand Up @@ -252,7 +252,7 @@ def create_many(self, statements):
if tag_name in create_tags:
tag = create_tags[tag_name]
else:
tag = session.query(Tag).get(tag_name)
tag = session.query(Tag).filter_by(name=tag_name).first()

if not tag:
# Create the tag if it does not exist
Expand Down Expand Up @@ -305,7 +305,7 @@ def update(self, statement):
record.search_in_response_to = self.tagger.get_bigram_pair_string(statement.in_response_to)

for tag_name in statement.tags:
tag = session.query(Tag).get(tag_name)
tag = session.query(Tag).filter_by(name=tag_name).first()

if not tag:
# Create the record
Expand Down

0 comments on commit 556b3a7

Please sign in to comment.