Skip to content

Commit

Permalink
Update no-response.yml
Browse files Browse the repository at this point in the history
Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0

Support for Django 3.0
  • Loading branch information
nesdis committed May 14, 2020
1 parent 9574ae3 commit 2d161b6
Show file tree
Hide file tree
Showing 12 changed files with 154 additions and 212 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ dist/
build/
venv/
venv3.8/
venv_py38_dj30/
.idea/
.tox/
*__pycache__*
Expand Down
17 changes: 12 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
language: python

python:
- "3.6"
- 3.6

env:
matrix:
- MONGODB=4.2.6

install:
- wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
- echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
- sudo apt-get update
- sudo apt-get install -y mongodb-org
- sudo apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} --allow-downgrades
- sudo service mongod start
- sudo service mongod status
- pip install tox

services: mongodb

before_script:
- mongo --version
- mongod --version

script:
- tox -e py36-django_stable

after_script:
- pkill mongod
22 changes: 19 additions & 3 deletions djongo/exceptions.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
from dataclasses import dataclass
from typing import Sequence, Any

djongo_access_url = 'https://www.patreon.com/nesdis'
_printed_features = set()


@dataclass(repr=False)
class SQLDecodeError(ValueError):

def __init__(self, err_sql=None):
self.err_sql = err_sql
err_key: Any = None
err_sub_sql: Any = None
err_sql: Any = None
params: Sequence = None
version: str = None

def __repr__(self):
return (f'\n\n\tKeyword: {self.err_key}\n'
f'\tSub SQL: {self.err_sub_sql}\n'
f'\tFAILED SQL: {self.err_sql}\n'
f'\tParams: {self.params}\n'
f'\tVersion: {self.version}')

def __str__(self):
return repr(self)


class NotSupportedError(ValueError):
Expand Down
2 changes: 1 addition & 1 deletion djongo/operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def sql_flush(self, style, tables, sequences, allow_cascade=False):
for table in tables]

def max_name_length(self):
return 50
return 80

def no_limit_value(self):
return None
Expand Down
2 changes: 1 addition & 1 deletion djongo/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):

sql_create_index = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s INDEX (%(columns)s)%(extra)s"
sql_delete_index = "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s INDEX"

sql_create_unique_index = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE (%(columns)s)(%(condition)s)"

def quote_value(self, value):
return value
Expand Down
28 changes: 19 additions & 9 deletions djongo/sql2mongo/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,8 +591,12 @@ def _add(self, statement: SQLStatement):
elif tok.match(tokens.Keyword, 'COLUMN'):
self.execute = self._add_column

elif isinstance(tok, Where):
print_warn('partial indexes')

else:
raise SQLDecodeError
raise SQLDecodeError(err_key=tok.value,
err_sub_sql=statement)

def _add_column(self):
self.db[self.left_table].update(
Expand Down Expand Up @@ -675,7 +679,7 @@ def _create_table(self, statement):
push = {}
update = {}

for col in SQLColumnDef.statement2col_defs(tok):
for col in SQLColumnDef.sql2col_defs(tok.value):
if isinstance(col, SQLColumnConstraint):
print_warn('column CONSTRAINTS')
else:
Expand Down Expand Up @@ -857,19 +861,25 @@ def parse(self):
except OperationFailure as e:
import djongo
exe = SQLDecodeError(
f'FAILED SQL: {self._sql}\n'
f'Params: {self._params}\n'
f'Pymongo error: {e.details}\n'
f'Version: {djongo.__version__}'
err_sql=self._sql,
params=self._params,
version=djongo.__version__
)
raise exe from e

except SQLDecodeError as e:
import djongo
e.err_sql = self._sql,
e.params = self._params,
e.version = djongo.__version__
raise e

except Exception as e:
import djongo
exe = SQLDecodeError(
f'FAILED SQL: {self._sql}\n'
f'Params: {self._params}\n'
f'Version: {djongo.__version__}'
err_sql=self._sql,
params=self._params,
version=djongo.__version__
)
raise exe from e

Expand Down
55 changes: 54 additions & 1 deletion djongo/sql2mongo/sql_tokens.py
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ class SQLColumnDef:
'NOT NULL': not_null,
'NULL': null
}
supported_data_types = None

def __init__(self,
name: str = None,
Expand Down Expand Up @@ -324,7 +325,59 @@ def _get_constraints(others: str):
raise SQLDecodeError(f'Unknown column constraint: {name}')

@staticmethod
def statement2col_defs(token: Token):
def sql2col_defs(sql: str):
sql = sql[1:-1]
while sql:
if sql[0] == '"':
try:
def_str, sql = sql.split(',', 1)
except ValueError:
def_str = sql
sql = None
else:
sql = sql.strip()
yield SQLColumnDef.def_str2col_def(def_str)
elif sql.startswith('CONSTRAINT'):
# Temporary hack
indexes = [None]
i = 0
for i, c in enumerate(sql):
if c == '(':
if indexes[0] is None:
indexes.pop()
indexes.append(i)
elif c == ')':
indexes.pop()
if not indexes:
break
if len(sql[i:]) > 1:
sql = sql[i+3:]
else:
sql = None
yield SQLColumnConstraint()
else:
raise SQLDecodeError(f'Syntax Error: {sql}')

@classmethod
def def_str2col_def(cls, def_str: str):
if not cls.supported_data_types:
from djongo.base import DatabaseWrapper
cls.supported_data_types = set(DatabaseWrapper.data_types.values())

name, other = def_str[1:].split('"', 1)
other = other.strip()

data_type, constraint_sql = other.split(' ', 1)
if data_type not in cls.supported_data_types:
raise NotSupportedError(f'Data of type: {data_type}')

col_constraints = set(SQLColumnDef._get_constraints(constraint_sql))
return SQLColumnDef(name=name,
data_type=data_type,
col_constraints=col_constraints)

@classmethod
def statement2col_defs(cls, token: Token):
from djongo.base import DatabaseWrapper
supported_data_types = set(DatabaseWrapper.data_types.values())

Expand Down
2 changes: 1 addition & 1 deletion no-response.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Number of days of inactivity before an Issue is closed for lack of response
daysUntilClose: 7
# Label requiring a response
responseRequiredLabel: more-information-needed
responseRequiredLabel: more-info-needed
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
closeComment: >
This issue has been automatically closed because there has been no response
Expand Down
Loading

0 comments on commit 2d161b6

Please sign in to comment.