mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Merge remote-tracking branch 'inventree/master'
This commit is contained in:
commit
e5adf4a89f
1
.gitignore
vendored
1
.gitignore
vendored
@ -48,6 +48,7 @@ docs/_build
|
|||||||
inventree_media
|
inventree_media
|
||||||
inventree_static
|
inventree_static
|
||||||
static_i18n
|
static_i18n
|
||||||
|
inventree-data
|
||||||
|
|
||||||
# Local config file
|
# Local config file
|
||||||
config.yaml
|
config.yaml
|
||||||
|
16
.gitpod.yml
16
.gitpod.yml
@ -10,29 +10,21 @@ tasks:
|
|||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
pip install invoke
|
pip install invoke
|
||||||
inv install
|
|
||||||
mkdir dev
|
mkdir dev
|
||||||
inv update
|
inv test-setup
|
||||||
gp sync-done setup_server
|
gp sync-done start_server
|
||||||
|
|
||||||
- name: Start server
|
- name: Start server
|
||||||
init: gp sync-await setup_server
|
init: gp sync-await start_server
|
||||||
command: |
|
command: |
|
||||||
gp sync-await setup_server
|
gp sync-await start_server
|
||||||
export INVENTREE_DB_ENGINE='sqlite3'
|
export INVENTREE_DB_ENGINE='sqlite3'
|
||||||
export INVENTREE_DB_NAME='/workspace/InvenTree/dev/database.sqlite3'
|
export INVENTREE_DB_NAME='/workspace/InvenTree/dev/database.sqlite3'
|
||||||
export INVENTREE_MEDIA_ROOT='/workspace/InvenTree/inventree-data/media'
|
export INVENTREE_MEDIA_ROOT='/workspace/InvenTree/inventree-data/media'
|
||||||
export INVENTREE_STATIC_ROOT='/workspace/InvenTree/dev/static'
|
export INVENTREE_STATIC_ROOT='/workspace/InvenTree/dev/static'
|
||||||
|
|
||||||
source venv/bin/activate
|
|
||||||
rm /workspace/InvenTree/inventree-data -r
|
|
||||||
git clone https://github.com/inventree/demo-dataset /workspace/InvenTree/inventree-data
|
|
||||||
invoke delete-data -f
|
|
||||||
invoke import-records -f /workspace/InvenTree/inventree-data/inventree_data.json
|
|
||||||
|
|
||||||
inv server
|
inv server
|
||||||
|
|
||||||
# List the ports to expose. Learn more https://www.gitpod.io/docs/config-ports/
|
|
||||||
ports:
|
ports:
|
||||||
- port: 8000
|
- port: 8000
|
||||||
onOpen: open-preview
|
onOpen: open-preview
|
||||||
|
@ -24,7 +24,6 @@ import InvenTree.format
|
|||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
from InvenTree.fields import InvenTreeURLField
|
from InvenTree.fields import InvenTreeURLField
|
||||||
from InvenTree.validators import validate_tree_name
|
|
||||||
|
|
||||||
logger = logging.getLogger('inventree')
|
logger = logging.getLogger('inventree')
|
||||||
|
|
||||||
@ -538,7 +537,6 @@ class InvenTreeTree(MPTTModel):
|
|||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
blank=False,
|
blank=False,
|
||||||
max_length=100,
|
max_length=100,
|
||||||
validators=[validate_tree_name],
|
|
||||||
verbose_name=_("Name"),
|
verbose_name=_("Name"),
|
||||||
help_text=_("Name"),
|
help_text=_("Name"),
|
||||||
)
|
)
|
||||||
|
@ -80,10 +80,7 @@ def validate_sales_order_reference(value):
|
|||||||
|
|
||||||
|
|
||||||
def validate_tree_name(value):
|
def validate_tree_name(value):
|
||||||
"""Prevent illegal characters in tree item names."""
|
"""Placeholder for legacy function used in migrations."""
|
||||||
for c in "!@#$%^&*'\"\\/[]{}<>,|+=~`\"": # noqa: P103
|
|
||||||
if c in str(value):
|
|
||||||
raise ValidationError(_('Illegal character in name ({x})'.format(x=c)))
|
|
||||||
|
|
||||||
|
|
||||||
def validate_overage(value):
|
def validate_overage(value):
|
||||||
|
18
InvenTree/part/migrations/0081_alter_partcategory_name.py
Normal file
18
InvenTree/part/migrations/0081_alter_partcategory_name.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 3.2.14 on 2022-07-20 16:09
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('part', '0080_alter_part_image'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='partcategory',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(help_text='Name', max_length=100, verbose_name='Name'),
|
||||||
|
),
|
||||||
|
]
|
@ -1,6 +1,5 @@
|
|||||||
"""Unit tests for the PartCategory model"""
|
"""Unit tests for the PartCategory model"""
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from .models import Part, PartCategory, PartParameter, PartParameterTemplate
|
from .models import Part, PartCategory, PartParameter, PartParameterTemplate
|
||||||
@ -109,19 +108,6 @@ class CategoryTest(TestCase):
|
|||||||
part_parameter.pop(item)
|
part_parameter.pop(item)
|
||||||
self.assertEqual(len(part_parameter), 1)
|
self.assertEqual(len(part_parameter), 1)
|
||||||
|
|
||||||
def test_invalid_name(self):
|
|
||||||
"""Test that an illegal character is prohibited in a category name"""
|
|
||||||
cat = PartCategory(name='test/with/illegal/chars', description='Test category', parent=None)
|
|
||||||
|
|
||||||
with self.assertRaises(ValidationError) as err:
|
|
||||||
cat.full_clean()
|
|
||||||
cat.save() # pragma: no cover
|
|
||||||
|
|
||||||
self.assertIn('Illegal character in name', str(err.exception.error_dict.get('name')))
|
|
||||||
|
|
||||||
cat.name = 'good name'
|
|
||||||
cat.save()
|
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
"""Test that category deletion moves the children properly."""
|
"""Test that category deletion moves the children properly."""
|
||||||
# Delete the 'IC' category and 'Transceiver' should move to be under 'Electronics'
|
# Delete the 'IC' category and 'Transceiver' should move to be under 'Electronics'
|
||||||
|
18
InvenTree/stock/migrations/0079_alter_stocklocation_name.py
Normal file
18
InvenTree/stock/migrations/0079_alter_stocklocation_name.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 3.2.14 on 2022-07-20 16:09
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('stock', '0078_alter_stockitem_supplier_part'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='stocklocation',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(help_text='Name', max_length=100, verbose_name='Name'),
|
||||||
|
),
|
||||||
|
]
|
13
tasks.py
13
tasks.py
@ -511,6 +511,19 @@ def test(c, database=None):
|
|||||||
manage(c, 'test', pty=True)
|
manage(c, 'test', pty=True)
|
||||||
|
|
||||||
|
|
||||||
|
@task(pre=[update])
|
||||||
|
def setup_test(c):
|
||||||
|
"""Setup a testing enviroment."""
|
||||||
|
# Remove old data directory
|
||||||
|
c.run('rm inventree-data -r')
|
||||||
|
|
||||||
|
# Get test data
|
||||||
|
c.run('git clone https://github.com/inventree/demo-dataset inventree-data')
|
||||||
|
|
||||||
|
# Load data
|
||||||
|
import_records(c, filename='inventree-data/inventree_data.json', clear=True)
|
||||||
|
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def coverage(c):
|
def coverage(c):
|
||||||
"""Run code-coverage of the InvenTree codebase, using the 'coverage' code-analysis tools.
|
"""Run code-coverage of the InvenTree codebase, using the 'coverage' code-analysis tools.
|
||||||
|
Loading…
Reference in New Issue
Block a user