Skip to content

Commit

Permalink
updated docs
Browse files Browse the repository at this point in the history
  • Loading branch information
nesdis committed Aug 20, 2018
1 parent bf249f4 commit 6a97ec1
Show file tree
Hide file tree
Showing 13 changed files with 195 additions and 40 deletions.
5 changes: 4 additions & 1 deletion djongo/models/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,10 @@ def get_db_prep_value(self, value, connection, prepared=False):
return value

if not isinstance(value, list):
raise ValueError('Value must be a list')
raise ValueError(
'Expected value to be type list,'
f'Got type {type(value)} instead'
)

ret = []
for a_mdl in value:
Expand Down
7 changes: 7 additions & 0 deletions docs/docs/using-django-with-mongodb-array-field.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,13 @@ entries = Entry.objects.filter(authors={'name.2': 'Paul'})
```
Note: In MongoDB the first element in the array starts at index 0.

### Creating Array fields

A Model having an Array field can be created as follows:

```python
entry = Entry()
entry.authors = [Author()]
```


1 change: 1 addition & 0 deletions tests/djongo_tests/project/dummy/models/array_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class ArrayEntry(models.Model):
authors = models.ArrayModelField(
model_container=ArrayAuthor
)
_id = models.ObjectIdField()

def __str__(self):
return self.headline
Expand Down
2 changes: 1 addition & 1 deletion tests/djongo_tests/project/dummy/models/basic_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
_id = models.ObjectIdField()
# _id = models.ObjectIdField()

def __str__(self):
return self.name
Expand Down
1 change: 1 addition & 0 deletions tests/djongo_tests/project/dummy/models/embedded_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class EmbeddedEntry(models.Model):
model_container=EmbeddedBlog
)
headline = models.CharField(max_length=255)
_id = models.ObjectIdField()

def __str__(self):
return self.headline
Expand Down
4 changes: 0 additions & 4 deletions tests/djongo_tests/project/dummy/tests/test_basic.py

This file was deleted.

This file was deleted.

47 changes: 40 additions & 7 deletions tests/djongo_tests/project/dummy/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from dummy.models.array_models import ArrayEntry, ArrayAuthor
from dummy.models.basic_models import Blog, Entry, Author
from dummy.models.embedded_models import EmbeddedBlog, EmbeddedEntry
from dummy.models.reference_models import ReferenceEntry, ReferenceAuthor
Expand Down Expand Up @@ -30,7 +31,7 @@ def test_create(self):
self.assertEqual([a1], list(e1.authors.all()))
self.assertEqual([e1], list(a1.referenceentry_set.all()))

e2.authors.add(a1,a2)
e2.authors.add(a1, a2)
self.assertEqual(e2.authors_id, {a1.pk, a2.pk})
self.assertEqual([a1, a2], list(e2.authors.all()))
self.assertEqual([e1, e2], list(a1.referenceentry_set.all()))
Expand All @@ -51,18 +52,54 @@ def test_create(self):
self.assertEqual([a1], list(e2.authors.all()))
self.assertEqual([a1], list(e1.authors.all()))


class TestArray(TestCase):
def test_create1(self):
e = ArrayEntry.objects.create(
headline='h1',
authors=[ArrayAuthor(
name='n1',
email='[email protected]'
)]
)
g = ArrayEntry.objects.get(headline='h1')
self.assertEqual(e, g)
g.authors.append(
ArrayAuthor(
name='n2',
email='[email protected]'
)
)
g.save()
g = ArrayEntry.objects.get(
authors={'1.name': 'n2'}
)
self.assertEqual(e,g)
self.assertNotEqual(e.authors, g.authors)


class TestEmbedded(TestCase):

def test_create(self):
e = EmbeddedEntry.objects.create(
headline='h1',
blog=EmbeddedBlog(name='b1', tagline='t1')
blog=EmbeddedBlog(
name='b1',
tagline='t1'
)
)
g = EmbeddedEntry.objects.get(headline='h1')
self.assertEqual(e, g)

g = EmbeddedEntry.objects.get(blog={'name': 'b1'})
self.assertEqual(e, g)
self.assertEqual(g.blog.tagline, 't1')
g.blog.tagline = 't2'
g.save()
g = EmbeddedEntry.objects.get(blog={'name': 'b1'})
self.assertEqual(e, g)
self.assertEqual(g.blog.tagline, 't2')
self.assertNotEqual(e.blog.tagline, g.blog.tagline)

# def test_join(self):
# eqs = EmbeddedEntry.objects.filter(blog__name='b1').values('id')
Expand Down Expand Up @@ -116,7 +153,7 @@ def test_create(self):
self.assertEqual([a1], list(e1.authors.all()))
self.assertEqual([e1], list(a1.entry_set.all()))

e2.authors.add(a1,a2)
e2.authors.add(a1, a2)
self.assertEqual([a1, a2], list(e2.authors.all()))
self.assertEqual([e1, e2], list(a1.entry_set.all()))
self.assertEqual([e2], list(a2.entry_set.all()))
Expand Down Expand Up @@ -162,7 +199,3 @@ def test_join(self):
bqs = Blog.objects.filter(id__in=eqs).values('name')
self.assertEquals(list(bqs), [{'name': 'b1'}, {'name': 'b2'}])


class TestArray(TestCase):
pass

3 changes: 0 additions & 3 deletions tests/djongo_tests/project/dummy/tests/test_reference.py

This file was deleted.

10 changes: 0 additions & 10 deletions tests/djongo_tests/project/dummy/tests/test_start.py

This file was deleted.

14 changes: 7 additions & 7 deletions tests/djongo_tests/project/project/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@


MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 'django.middleware.security.SecurityMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'django.contrib.messages.middleware.MessageMiddleware',
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'project.urls'
Expand Down
122 changes: 122 additions & 0 deletions tests/djongo_tests/project/project/settings_precheckin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
"""
Django settings for dummy_app project.
Generated by 'django-admin startproject' using Django 1.11.2.
For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '5s(0&1x3(963q!xdyt1=$^(5om4(_=_39ys6=bnp7n-h8%7z+('

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['localhost','127.0.0.1']

DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'djongo-test',
'ENFORCE_SCHEMA': True

},
}
# Application definition

INSTALLED_APPS = [
'dummy.apps.DummyConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions',
]


MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'project.urls'

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

WSGI_APPLICATION = 'project.wsgi.application'



# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]


# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
17 changes: 12 additions & 5 deletions tests/precheckin.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import os
import shutil
import subprocess
import sys
import unittest
from mock_tests import test_sqlparsing
import os

from pymongo import MongoClient

from mock_tests import test_sqlparsing

client = MongoClient()
TEST_DIR = os.path.dirname(os.path.abspath(__file__))

Expand All @@ -20,14 +22,19 @@
dummy_app = os.path.join(app_root, 'dummy')
if 'migrations' in os.listdir(dummy_app):
shutil.rmtree(os.path.join(dummy_app, 'migrations'))
print('Migrations removed')

with client:
client.drop_database('djongo-test')

client.drop_database('djongo-test')
manage_py = os.path.join(app_root, "manage.py")
cmds = [
'makemigrations dummy',
'migrate',
# 'inspectdb',
# 'test'
'test dummy.tests.test_models'
]
settings = '--settings=project.settings_precheckin'
for cmd in cmds:
subprocess.run(f'python {manage_py} {cmd}', check=True)
print(f'python {manage_py} {cmd} {settings}')
subprocess.run(f'python {manage_py} {cmd} {settings}', check=True)

0 comments on commit 6a97ec1

Please sign in to comment.