fix docstrings 2

This commit is contained in:
Matthias 2022-05-28 02:14:25 +02:00
parent 9b40fddf7c
commit 80510e8ba2
No known key found for this signature in database
GPG Key ID: AB6D0E6C4CB65093
6 changed files with 17 additions and 64 deletions

View File

@ -1897,9 +1897,7 @@ def after_save_stock_item(sender, instance: StockItem, created, **kwargs):
class StockItemAttachment(InvenTreeAttachment): class StockItemAttachment(InvenTreeAttachment):
""" """Model for storing file attachments against a StockItem object."""
Model for storing file attachments against a StockItem object.
"""
@staticmethod @staticmethod
def get_api_url(): def get_api_url():
@ -1980,6 +1978,7 @@ def rename_stock_item_test_result_attachment(instance, filename):
class StockItemTestResult(models.Model): class StockItemTestResult(models.Model):
"""A StockItemTestResult records results of custom tests against individual StockItem objects. """A StockItemTestResult records results of custom tests against individual StockItem objects.
This is useful for tracking unit acceptance tests, and particularly useful when integrated This is useful for tracking unit acceptance tests, and particularly useful when integrated
with automated testing setups. with automated testing setups.

View File

@ -74,10 +74,7 @@ class StockItemSerializer(InvenTree.serializers.InvenTreeModelSerializer):
""" """
def update(self, instance, validated_data): def update(self, instance, validated_data):
""" """Custom update method to pass the user information through to the instance"""
Custom update method to pass the user information through to the instance
"""
instance._user = self.context['user'] instance._user = self.context['user']
return super().update(instance, validated_data) return super().update(instance, validated_data)
@ -276,7 +273,6 @@ class SerializeStockItemSerializer(serializers.Serializer):
def validate_quantity(self, quantity): def validate_quantity(self, quantity):
"""Validate that the quantity value is correct""" """Validate that the quantity value is correct"""
item = self.context['item'] item = self.context['item']
if quantity < 0: if quantity < 0:
@ -313,7 +309,6 @@ class SerializeStockItemSerializer(serializers.Serializer):
def validate(self, data): def validate(self, data):
"""Check that the supplied serial numbers are valid""" """Check that the supplied serial numbers are valid"""
data = super().validate(data) data = super().validate(data)
item = self.context['item'] item = self.context['item']
@ -387,7 +382,6 @@ class InstallStockItemSerializer(serializers.Serializer):
def validate_stock_item(self, stock_item): def validate_stock_item(self, stock_item):
"""Validate the selected stock item""" """Validate the selected stock item"""
if not stock_item.in_stock: if not stock_item.in_stock:
# StockItem must be in stock to be "installed" # StockItem must be in stock to be "installed"
raise ValidationError(_("Stock item is unavailable")) raise ValidationError(_("Stock item is unavailable"))
@ -403,7 +397,6 @@ class InstallStockItemSerializer(serializers.Serializer):
def save(self): def save(self):
"""Install the selected stock item into this one""" """Install the selected stock item into this one"""
data = self.validated_data data = self.validated_data
stock_item = data['stock_item'] stock_item = data['stock_item']
@ -856,7 +849,6 @@ class StockMergeSerializer(serializers.Serializer):
At this point we are confident that the merge can take place At this point we are confident that the merge can take place
""" """
data = self.validated_data data = self.validated_data
base_item = data['base_item'] base_item = data['base_item']

View File

@ -78,7 +78,6 @@ class StockItemListTest(StockAPITestCase):
def get_stock(self, **kwargs): def get_stock(self, **kwargs):
"""Filter stock and return JSON object""" """Filter stock and return JSON object"""
response = self.client.get(self.list_url, format='json', data=kwargs) response = self.client.get(self.list_url, format='json', data=kwargs)
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@ -88,14 +87,12 @@ class StockItemListTest(StockAPITestCase):
def test_get_stock_list(self): def test_get_stock_list(self):
"""List *all* StockItem objects.""" """List *all* StockItem objects."""
response = self.get_stock() response = self.get_stock()
self.assertEqual(len(response), 29) self.assertEqual(len(response), 29)
def test_filter_by_part(self): def test_filter_by_part(self):
"""Filter StockItem by Part reference""" """Filter StockItem by Part reference"""
response = self.get_stock(part=25) response = self.get_stock(part=25)
self.assertEqual(len(response), 17) self.assertEqual(len(response), 17)
@ -106,13 +103,11 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_IPN(self): def test_filter_by_IPN(self):
"""Filter StockItem by IPN reference""" """Filter StockItem by IPN reference"""
response = self.get_stock(IPN="R.CH") response = self.get_stock(IPN="R.CH")
self.assertEqual(len(response), 3) self.assertEqual(len(response), 3)
def test_filter_by_location(self): def test_filter_by_location(self):
"""Filter StockItem by StockLocation reference""" """Filter StockItem by StockLocation reference"""
response = self.get_stock(location=5) response = self.get_stock(location=5)
self.assertEqual(len(response), 1) self.assertEqual(len(response), 1)
@ -127,7 +122,6 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_depleted(self): def test_filter_by_depleted(self):
"""Filter StockItem by depleted status""" """Filter StockItem by depleted status"""
response = self.get_stock(depleted=1) response = self.get_stock(depleted=1)
self.assertEqual(len(response), 1) self.assertEqual(len(response), 1)
@ -136,7 +130,6 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_in_stock(self): def test_filter_by_in_stock(self):
"""Filter StockItem by 'in stock' status""" """Filter StockItem by 'in stock' status"""
response = self.get_stock(in_stock=1) response = self.get_stock(in_stock=1)
self.assertEqual(len(response), 26) self.assertEqual(len(response), 26)
@ -145,7 +138,6 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_status(self): def test_filter_by_status(self):
"""Filter StockItem by 'status' field""" """Filter StockItem by 'status' field"""
codes = { codes = {
StockStatus.OK: 27, StockStatus.OK: 27,
StockStatus.DESTROYED: 1, StockStatus.DESTROYED: 1,
@ -162,13 +154,11 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_batch(self): def test_filter_by_batch(self):
"""Filter StockItem by batch code""" """Filter StockItem by batch code"""
response = self.get_stock(batch='B123') response = self.get_stock(batch='B123')
self.assertEqual(len(response), 1) self.assertEqual(len(response), 1)
def test_filter_by_serialized(self): def test_filter_by_serialized(self):
"""Filter StockItem by serialized status""" """Filter StockItem by serialized status"""
response = self.get_stock(serialized=1) response = self.get_stock(serialized=1)
self.assertEqual(len(response), 12) self.assertEqual(len(response), 12)
@ -183,7 +173,6 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_has_batch(self): def test_filter_by_has_batch(self):
"""Test the 'has_batch' filter, which tests if the stock item has been assigned a batch code""" """Test the 'has_batch' filter, which tests if the stock item has been assigned a batch code"""
with_batch = self.get_stock(has_batch=1) with_batch = self.get_stock(has_batch=1)
without_batch = self.get_stock(has_batch=0) without_batch = self.get_stock(has_batch=0)
@ -200,9 +189,9 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_tracked(self): def test_filter_by_tracked(self):
"""Test the 'tracked' filter. """Test the 'tracked' filter.
This checks if the stock item has either a batch code *or* a serial number This checks if the stock item has either a batch code *or* a serial number
""" """
tracked = self.get_stock(tracked=True) tracked = self.get_stock(tracked=True)
untracked = self.get_stock(tracked=False) untracked = self.get_stock(tracked=False)
@ -220,7 +209,6 @@ class StockItemListTest(StockAPITestCase):
def test_filter_by_expired(self): def test_filter_by_expired(self):
"""Filter StockItem by expiry status""" """Filter StockItem by expiry status"""
# First, we can assume that the 'stock expiry' feature is disabled # First, we can assume that the 'stock expiry' feature is disabled
response = self.get_stock(expired=1) response = self.get_stock(expired=1)
self.assertEqual(len(response), 29) self.assertEqual(len(response), 29)
@ -259,7 +247,6 @@ class StockItemListTest(StockAPITestCase):
def test_paginate(self): def test_paginate(self):
"""Test that we can paginate results correctly""" """Test that we can paginate results correctly"""
for n in [1, 5, 10]: for n in [1, 5, 10]:
response = self.get_stock(limit=n) response = self.get_stock(limit=n)
@ -289,7 +276,6 @@ class StockItemListTest(StockAPITestCase):
def test_export(self): def test_export(self):
"""Test exporting of Stock data via the API""" """Test exporting of Stock data via the API"""
dataset = self.export_data({}) dataset = self.export_data({})
# Check that *all* stock item objects have been exported # Check that *all* stock item objects have been exported
@ -342,7 +328,6 @@ class StockItemTest(StockAPITestCase):
"""Test the default location functionality, """Test the default location functionality,
if a 'location' is not specified in the creation request. if a 'location' is not specified in the creation request.
""" """
# The part 'R_4K7_0603' (pk=4) has a default location specified # The part 'R_4K7_0603' (pk=4) has a default location specified
response = self.client.post( response = self.client.post(
@ -386,7 +371,6 @@ class StockItemTest(StockAPITestCase):
def test_stock_item_create(self): def test_stock_item_create(self):
"""Test creation of a StockItem via the API""" """Test creation of a StockItem via the API"""
# POST with an empty part reference # POST with an empty part reference
response = self.client.post( response = self.client.post(
@ -437,7 +421,6 @@ class StockItemTest(StockAPITestCase):
def test_creation_with_serials(self): def test_creation_with_serials(self):
"""Test that serialized stock items can be created via the API.""" """Test that serialized stock items can be created via the API."""
trackable_part = part.models.Part.objects.create( trackable_part = part.models.Part.objects.create(
name='My part', name='My part',
description='A trackable part', description='A trackable part',
@ -495,8 +478,7 @@ class StockItemTest(StockAPITestCase):
self.assertEqual(trackable_part.get_stock_count(), 10) self.assertEqual(trackable_part.get_stock_count(), 10)
def test_default_expiry(self): def test_default_expiry(self):
""" """Test that the "default_expiry" functionality works via the API.
Test that the "default_expiry" functionality works via the API.
- If an expiry_date is specified, use that - If an expiry_date is specified, use that
- Otherwise, check if the referenced part has a default_expiry defined - Otherwise, check if the referenced part has a default_expiry defined
@ -507,7 +489,6 @@ class StockItemTest(StockAPITestCase):
- Part <25> has a default_expiry of 10 days - Part <25> has a default_expiry of 10 days
""" """
# First test - create a new StockItem without an expiry date # First test - create a new StockItem without an expiry date
data = { data = {
'part': 4, 'part': 4,
@ -546,7 +527,6 @@ class StockItemTest(StockAPITestCase):
def test_purchase_price(self): def test_purchase_price(self):
"""Test that we can correctly read and adjust purchase price information via the API""" """Test that we can correctly read and adjust purchase price information via the API"""
url = reverse('api-stock-detail', kwargs={'pk': 1}) url = reverse('api-stock-detail', kwargs={'pk': 1})
data = self.get(url, expected_code=200).data data = self.get(url, expected_code=200).data
@ -605,7 +585,6 @@ class StockItemTest(StockAPITestCase):
def test_install(self): def test_install(self):
"""Test that stock item can be installed into antoher item, via the API""" """Test that stock item can be installed into antoher item, via the API"""
# Select the "parent" stock item # Select the "parent" stock item
parent_part = part.models.Part.objects.get(pk=100) parent_part = part.models.Part.objects.get(pk=100)
@ -691,7 +670,6 @@ class StocktakeTest(StockAPITestCase):
def test_action(self): def test_action(self):
"""Test each stocktake action endpoint, for validation""" """Test each stocktake action endpoint, for validation"""
for endpoint in ['api-stock-count', 'api-stock-add', 'api-stock-remove']: for endpoint in ['api-stock-count', 'api-stock-add', 'api-stock-remove']:
url = reverse(endpoint) url = reverse(endpoint)
@ -748,7 +726,6 @@ class StocktakeTest(StockAPITestCase):
def test_transfer(self): def test_transfer(self):
"""Test stock transfers""" """Test stock transfers"""
data = { data = {
'items': [ 'items': [
{ {
@ -886,8 +863,7 @@ class StockTestResultTest(StockAPITestCase):
self.assertEqual(test['user'], self.user.pk) self.assertEqual(test['user'], self.user.pk)
def test_post_bitmap(self): def test_post_bitmap(self):
""" """2021-08-25
2021-08-25
For some (unknown) reason, prior to fix https://github.com/inventree/InvenTree/pull/2018 For some (unknown) reason, prior to fix https://github.com/inventree/InvenTree/pull/2018
uploading a bitmap image would result in a failure. uploading a bitmap image would result in a failure.
@ -896,7 +872,6 @@ class StockTestResultTest(StockAPITestCase):
As a bonus this also tests the file-upload component As a bonus this also tests the file-upload component
""" """
here = os.path.dirname(__file__) here = os.path.dirname(__file__)
image_file = os.path.join(here, 'fixtures', 'test_image.bmp') image_file = os.path.join(here, 'fixtures', 'test_image.bmp')
@ -921,9 +896,7 @@ class StockTestResultTest(StockAPITestCase):
class StockAssignTest(StockAPITestCase): class StockAssignTest(StockAPITestCase):
"""Unit tests for the stock assignment API endpoint, """Unit tests for the stock assignment API endpoint, where stock items are manually assigned to a customer"""
where stock items are manually assigned to a customer
"""
URL = reverse('api-stock-assign') URL = reverse('api-stock-assign')
@ -1062,7 +1035,6 @@ class StockMergeTest(StockAPITestCase):
def test_missing_data(self): def test_missing_data(self):
"""Test responses which are missing required data""" """Test responses which are missing required data"""
# Post completely empty # Post completely empty
data = self.post( data = self.post(
@ -1088,7 +1060,6 @@ class StockMergeTest(StockAPITestCase):
def test_invalid_data(self): def test_invalid_data(self):
"""Test responses which have invalid data""" """Test responses which have invalid data"""
# Serialized stock items should be rejected # Serialized stock items should be rejected
data = self.post( data = self.post(
self.URL, self.URL,
@ -1170,7 +1141,6 @@ class StockMergeTest(StockAPITestCase):
def test_valid_merge(self): def test_valid_merge(self):
"""Test valid merging of stock items""" """Test valid merging of stock items"""
# Check initial conditions # Check initial conditions
n = StockItem.objects.filter(part=self.part).count() n = StockItem.objects.filter(part=self.part).count()
self.assertEqual(self.item_1.quantity, 100) self.assertEqual(self.item_1.quantity, 100)

View File

@ -188,7 +188,7 @@ class StockTest(InvenTreeTestCase):
self.assertEqual(s_item.location, self.office) self.assertEqual(s_item.location, self.office)
def test_move(self): def test_move(self):
""" Test stock movement functions """ """Test stock movement functions"""
# Move 4,000 screws to the bathroom # Move 4,000 screws to the bathroom
it = StockItem.objects.get(pk=1) it = StockItem.objects.get(pk=1)
self.assertNotEqual(it.location, self.bathroom) self.assertNotEqual(it.location, self.bathroom)
@ -508,7 +508,6 @@ class StockTest(InvenTreeTestCase):
Ref: https://github.com/inventree/InvenTree/issues/2636 Ref: https://github.com/inventree/InvenTree/issues/2636
Ref: https://github.com/inventree/InvenTree/issues/2733 Ref: https://github.com/inventree/InvenTree/issues/2733
""" """
# First, we will create a stock location structure # First, we will create a stock location structure
A = StockLocation.objects.create( A = StockLocation.objects.create(

View File

@ -72,11 +72,7 @@ class StockItemDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
model = StockItem model = StockItem
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
""" """Add information on the "next" and "previous" StockItem objects, based on the serial numbers."""
Add information on the "next" and "previous" StockItem objects,
based on the serial numbers.
"""
data = super().get_context_data(**kwargs) data = super().get_context_data(**kwargs)
if self.object.serialized: if self.object.serialized:
@ -97,7 +93,6 @@ class StockItemDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
"""Check if item exists else return to stock index""" """Check if item exists else return to stock index"""
stock_pk = kwargs.get('pk', None) stock_pk = kwargs.get('pk', None)
if stock_pk: if stock_pk:
@ -120,7 +115,7 @@ class StockLocationQRCode(QRCodeView):
role_required = ['stock_location.view', 'stock.view'] role_required = ['stock_location.view', 'stock.view']
def get_qr_data(self): def get_qr_data(self):
""" Generate QR code data for the StockLocation """ """Generate QR code data for the StockLocation"""
try: try:
loc = StockLocation.objects.get(id=self.pk) loc = StockLocation.objects.get(id=self.pk)
return loc.format_barcode() return loc.format_barcode()
@ -198,7 +193,7 @@ class StockItemQRCode(QRCodeView):
role_required = 'stock.view' role_required = 'stock.view'
def get_qr_data(self): def get_qr_data(self):
""" Generate QR code data for the StockItem """ """Generate QR code data for the StockItem"""
try: try:
item = StockItem.objects.get(id=self.pk) item = StockItem.objects.get(id=self.pk)
return item.format_barcode() return item.format_barcode()
@ -237,8 +232,8 @@ class StockItemConvert(AjaxUpdateView):
class StockLocationDelete(AjaxDeleteView): class StockLocationDelete(AjaxDeleteView):
""" """View to delete a StockLocation
View to delete a StockLocation
Presents a deletion confirmation form to the user Presents a deletion confirmation form to the user
""" """
@ -250,8 +245,8 @@ class StockLocationDelete(AjaxDeleteView):
class StockItemDelete(AjaxDeleteView): class StockItemDelete(AjaxDeleteView):
""" """View to delete a StockItem
View to delete a StockItem
Presents a deletion confirmation form to the user Presents a deletion confirmation form to the user
""" """
@ -263,8 +258,8 @@ class StockItemDelete(AjaxDeleteView):
class StockItemTrackingDelete(AjaxDeleteView): class StockItemTrackingDelete(AjaxDeleteView):
""" """View to delete a StockItemTracking object
View to delete a StockItemTracking object
Presents a deletion confirmation form to the user Presents a deletion confirmation form to the user
""" """

View File

@ -47,7 +47,6 @@ class RuleSetModelTest(TestCase):
def test_model_names(self): def test_model_names(self):
"""Test that each model defined in the rulesets is valid, based on the database schema!""" """Test that each model defined in the rulesets is valid, based on the database schema!"""
available_models = apps.get_models() available_models = apps.get_models()
available_tables = set() available_tables = set()
@ -104,7 +103,6 @@ class RuleSetModelTest(TestCase):
def test_permission_assign(self): def test_permission_assign(self):
"""Test that the permission assigning works!""" """Test that the permission assigning works!"""
# Create a new group # Create a new group
group = Group.objects.create(name="Test group") group = Group.objects.create(name="Test group")