mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-03 22:55:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			245 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
""" Version information for InvenTree.
 | 
						|
Provides information on the current InvenTree version
 | 
						|
"""
 | 
						|
 | 
						|
import subprocess
 | 
						|
import django
 | 
						|
import re
 | 
						|
 | 
						|
import common.models
 | 
						|
 | 
						|
# InvenTree software version
 | 
						|
INVENTREE_SW_VERSION = "0.7.0 dev"
 | 
						|
 | 
						|
# InvenTree API version
 | 
						|
INVENTREE_API_VERSION = 36
 | 
						|
 | 
						|
"""
 | 
						|
Increment this API version number whenever there is a significant change to the API that any clients need to know about
 | 
						|
 | 
						|
v36 -> 2022-04-03
 | 
						|
    - Adds ability to filter part list endpoint by unallocated_stock argument
 | 
						|
 | 
						|
v35 -> 2022-04-01 : https://github.com/inventree/InvenTree/pull/2797
 | 
						|
    - Adds stock allocation information to the Part API
 | 
						|
    - Adds calculated field for "unallocated_quantity"
 | 
						|
 | 
						|
v34 -> 2022-03-25
 | 
						|
    - Change permissions for "plugin list" API endpoint (now allows any authenticated user)
 | 
						|
 | 
						|
v33 -> 2022-03-24
 | 
						|
    - Adds "plugins_enabled" information to root API endpoint
 | 
						|
 | 
						|
v32 -> 2022-03-19
 | 
						|
    - Adds "parameters" detail to Part API endpoint (use ¶meters=true)
 | 
						|
    - Adds ability to filter PartParameterTemplate API by Part instance
 | 
						|
    - Adds ability to filter PartParameterTemplate API by PartCategory instance
 | 
						|
 | 
						|
v31 -> 2022-03-14
 | 
						|
    - Adds "updated" field to SupplierPriceBreakList and SupplierPriceBreakDetail API endpoints
 | 
						|
 | 
						|
v30 -> 2022-03-09
 | 
						|
    - Adds "exclude_location" field to BuildAutoAllocation API endpoint
 | 
						|
    - Allows BuildItem API endpoint to be filtered by BomItem relation
 | 
						|
 | 
						|
v29 -> 2022-03-08
 | 
						|
    - Adds "scheduling" endpoint for predicted stock scheduling information
 | 
						|
 | 
						|
v28 -> 2022-03-04
 | 
						|
    - Adds an API endpoint for auto allocation of stock items against a build order
 | 
						|
    - Ref: https://github.com/inventree/InvenTree/pull/2713
 | 
						|
 | 
						|
v27 -> 2022-02-28
 | 
						|
    - Adds target_date field to individual line items for purchase orders and sales orders
 | 
						|
 | 
						|
v26 -> 2022-02-17
 | 
						|
    - Adds API endpoint for uploading a BOM file and extracting data
 | 
						|
 | 
						|
v25 -> 2022-02-17
 | 
						|
    - Adds ability to filter "part" list endpoint by "in_bom_for" argument
 | 
						|
 | 
						|
v24 -> 2022-02-10
 | 
						|
    - Adds API endpoint for deleting (cancelling) build order outputs
 | 
						|
 | 
						|
v23 -> 2022-02-02
 | 
						|
    - Adds API endpoints for managing plugin classes
 | 
						|
    - Adds API endpoints for managing plugin settings
 | 
						|
 | 
						|
v22 -> 2021-12-20
 | 
						|
    - Adds API endpoint to "merge" multiple stock items
 | 
						|
 | 
						|
v21 -> 2021-12-04
 | 
						|
    - Adds support for multiple "Shipments" against a SalesOrder
 | 
						|
    - Refactors process for stock allocation against a SalesOrder
 | 
						|
 | 
						|
v20 -> 2021-12-03
 | 
						|
    - Adds ability to filter POLineItem endpoint by "base_part"
 | 
						|
    - Adds optional "order_detail" to POLineItem list endpoint
 | 
						|
 | 
						|
v19 -> 2021-12-02
 | 
						|
    - Adds the ability to filter the StockItem API by "part_tree"
 | 
						|
    - Returns only stock items which match a particular part.tree_id field
 | 
						|
 | 
						|
v18 -> 2021-11-15
 | 
						|
    - Adds the ability to filter BomItem API by "uses" field
 | 
						|
    - This returns a list of all BomItems which "use" the specified part
 | 
						|
    - Includes inherited BomItem objects
 | 
						|
 | 
						|
v17 -> 2021-11-09
 | 
						|
    - Adds API endpoints for GLOBAL and USER settings objects
 | 
						|
    - Ref: https://github.com/inventree/InvenTree/pull/2275
 | 
						|
 | 
						|
v16 -> 2021-10-17
 | 
						|
    - Adds API endpoint for completing build order outputs
 | 
						|
 | 
						|
v15 -> 2021-10-06
 | 
						|
    - Adds detail endpoint for SalesOrderAllocation model
 | 
						|
    - Allows use of the API forms interface for adjusting SalesOrderAllocation objects
 | 
						|
 | 
						|
v14 -> 2021-10-05
 | 
						|
    - Stock adjustment actions API is improved, using native DRF serializer support
 | 
						|
    - However adjustment actions now only support 'pk' as a lookup field
 | 
						|
 | 
						|
v13 -> 2021-10-05
 | 
						|
    - Adds API endpoint to allocate stock items against a BuildOrder
 | 
						|
    - Updates StockItem API with improved filtering against BomItem data
 | 
						|
 | 
						|
v12 -> 2021-09-07
 | 
						|
    - Adds API endpoint to receive stock items against a PurchaseOrder
 | 
						|
 | 
						|
v11 -> 2021-08-26
 | 
						|
    - Adds "units" field to PartBriefSerializer
 | 
						|
    - This allows units to be introspected from the "part_detail" field in the StockItem serializer
 | 
						|
 | 
						|
v10 -> 2021-08-23
 | 
						|
    - Adds "purchase_price_currency" to StockItem serializer
 | 
						|
    - Adds "purchase_price_string" to StockItem serializer
 | 
						|
    - Purchase price is now writable for StockItem serializer
 | 
						|
 | 
						|
v9  -> 2021-08-09
 | 
						|
    - Adds "price_string" to part pricing serializers
 | 
						|
 | 
						|
v8  -> 2021-07-19
 | 
						|
    - Refactors the API interface for SupplierPart and ManufacturerPart models
 | 
						|
    - ManufacturerPart objects can no longer be created via the SupplierPart API endpoint
 | 
						|
 | 
						|
v7  -> 2021-07-03
 | 
						|
    - Introduced the concept of "API forms" in https://github.com/inventree/InvenTree/pull/1716
 | 
						|
    - API OPTIONS endpoints provide comprehensive field metedata
 | 
						|
    - Multiple new API endpoints added for database models
 | 
						|
 | 
						|
v6  -> 2021-06-23
 | 
						|
    - Part and Company images can now be directly uploaded via the REST API
 | 
						|
 | 
						|
v5  -> 2021-06-21
 | 
						|
    - Adds API interface for manufacturer part parameters
 | 
						|
 | 
						|
v4  -> 2021-06-01
 | 
						|
    - BOM items can now accept "variant stock" to be assigned against them
 | 
						|
    - Many slight API tweaks were needed to get this to work properly!
 | 
						|
 | 
						|
v3  -> 2021-05-22:
 | 
						|
    - The updated StockItem "history tracking" now uses a different interface
 | 
						|
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
def inventreeInstanceName():
 | 
						|
    """ Returns the InstanceName settings for the current database """
 | 
						|
    return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "")
 | 
						|
 | 
						|
 | 
						|
def inventreeInstanceTitle():
 | 
						|
    """ Returns the InstanceTitle for the current database """
 | 
						|
    if common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE_TITLE", False):
 | 
						|
        return common.models.InvenTreeSetting.get_setting("INVENTREE_INSTANCE", "")
 | 
						|
    else:
 | 
						|
        return 'InvenTree'
 | 
						|
 | 
						|
 | 
						|
def inventreeVersion():
 | 
						|
    """ Returns the InvenTree version string """
 | 
						|
    return INVENTREE_SW_VERSION.lower().strip()
 | 
						|
 | 
						|
 | 
						|
def inventreeVersionTuple(version=None):
 | 
						|
    """ Return the InvenTree version string as (maj, min, sub) tuple """
 | 
						|
 | 
						|
    if version is None:
 | 
						|
        version = INVENTREE_SW_VERSION
 | 
						|
 | 
						|
    match = re.match(r"^.*(\d+)\.(\d+)\.(\d+).*$", str(version))
 | 
						|
 | 
						|
    return [int(g) for g in match.groups()]
 | 
						|
 | 
						|
 | 
						|
def isInvenTreeDevelopmentVersion():
 | 
						|
    """
 | 
						|
    Return True if current InvenTree version is a "development" version
 | 
						|
    """
 | 
						|
    return inventreeVersion().endswith('dev')
 | 
						|
 | 
						|
 | 
						|
def inventreeDocsVersion():
 | 
						|
    """
 | 
						|
    Return the version string matching the latest documentation.
 | 
						|
 | 
						|
    Development -> "latest"
 | 
						|
    Release -> "major.minor.sub" e.g. "0.5.2"
 | 
						|
 | 
						|
    """
 | 
						|
 | 
						|
    if isInvenTreeDevelopmentVersion():
 | 
						|
        return "latest"
 | 
						|
    else:
 | 
						|
        return INVENTREE_SW_VERSION  # pragma: no cover
 | 
						|
 | 
						|
 | 
						|
def isInvenTreeUpToDate():
 | 
						|
    """
 | 
						|
    Test if the InvenTree instance is "up to date" with the latest version.
 | 
						|
 | 
						|
    A background task periodically queries GitHub for latest version,
 | 
						|
    and stores it to the database as INVENTREE_LATEST_VERSION
 | 
						|
    """
 | 
						|
 | 
						|
    latest = common.models.InvenTreeSetting.get_setting('INVENTREE_LATEST_VERSION', backup_value=None, create=False)
 | 
						|
 | 
						|
    # No record for "latest" version - we must assume we are up to date!
 | 
						|
    if not latest:
 | 
						|
        return True
 | 
						|
 | 
						|
    # Extract "tuple" version (Python can directly compare version tuples)
 | 
						|
    latest_version = inventreeVersionTuple(latest)  # pragma: no cover
 | 
						|
    inventree_version = inventreeVersionTuple()  # pragma: no cover
 | 
						|
 | 
						|
    return inventree_version >= latest_version  # pragma: no cover
 | 
						|
 | 
						|
 | 
						|
def inventreeApiVersion():
 | 
						|
    return INVENTREE_API_VERSION
 | 
						|
 | 
						|
 | 
						|
def inventreeDjangoVersion():
 | 
						|
    """ Return the version of Django library """
 | 
						|
    return django.get_version()
 | 
						|
 | 
						|
 | 
						|
def inventreeCommitHash():
 | 
						|
    """ Returns the git commit hash for the running codebase """
 | 
						|
 | 
						|
    try:
 | 
						|
        return str(subprocess.check_output('git rev-parse --short HEAD'.split()), 'utf-8').strip()
 | 
						|
    except:  # pragma: no cover
 | 
						|
        return None
 | 
						|
 | 
						|
 | 
						|
def inventreeCommitDate():
 | 
						|
    """ Returns the git commit date for the running codebase """
 | 
						|
 | 
						|
    try:
 | 
						|
        d = str(subprocess.check_output('git show -s --format=%ci'.split()), 'utf-8').strip()
 | 
						|
        return d.split(' ')[0]
 | 
						|
    except:  # pragma: no cover
 | 
						|
        return None
 |