Package: adh-sample-library-preview
AVEVA Data Hub Python Library Sample:loudspeaker:Notice: This library is an AVEVA Data Hub targeted version of the ocs_sample_library_preview. The ocs_sample_library_preview library is being deprecated and this library should be used moving forward.Version:0.10.10_previewThis sample library requires Python 3.7+. You can download Pythonhere.NOTE: The library previously required Python 3.9+ to take advantage of type annotations. To provide compatibility with environments that cannot upgrade Python to 3.9,from __future__ import annotationswas added to each necessary file.This provides backwards compatibility down to Python 3.7.About the libraryThe python ADH library is an introductory language-specific example of programming against Aveva Data Hub (ADH). It is intended as instructional samples only and are not for production use.The samples also work on OSIsoft Cloud Services unless otherwise noted.They can be obtained by running:pip install adh_sample_library_previewThe library is not intended to show every endpoint and every option/parameter for endpoints it has. The library is known to be incomplete.Other language libraries and samples are available onGitHub.TestingThe library is tested using PyTest. To test locally, make sure that PyTest is installed, then navigate to the Tests directory and run the test classes by executingpython -m pytest {testclass}where {testclass} is the name of a test class, for example ./test_baseclient.py.Optionally to run end to end tests, rename the appsettings.placeholder.json file to appsettings.json and populate the fields, (This file is included in the gitignore and will not be pushed to a remote repository), then runpython -m pytest {testclass} --e2e TrueLoggingEvery request made by the library is logged using the standardPython logging library. If the client application using the library creates a logger, then library will log to it at the following levels:LevelUsageErrorany non 200-level response code, along with the error messageInfoall request urls and verbsall response status codesDebugdata payload and all request headers (Authorization header value redacted)response content and all response headersThe process for creating a logger is described in theLogging HOWTO documentation.An example walkthrough is shown here:Logger Creation ExampleTo initiate logging, the client must create a logger, defining a log file, a desired log level, and default formatting:# Step 0 - set up loggerlog_file='logfile.txt'log_level=logging.INFOlogging.basicConfig(filename=log_file,encoding='utf-8',level=log_level,datefmt='%Y-%m-%d%H:%M:%S',format='%(asctime)s%(module)16s,line:%(lineno)4d%(levelname)8s|%(message)s')This creates a logger object that streams any logged messages to the desired output. The libraries called by the client, including thisADH Sample Library Python, that have implemented logging will send their messages to this logger automatically.Thelog levelspecified will result in any log at that levelor higherto be logged. For example,INFOcapturesINFO,WARNING,ERROR, andCRITICAL, but ignoresDEBUG.Logger Usage ExampleTo change the log level after creation, the level can be set using the following commandlogging.getLogger().setLevel(logging.DEBUG)This concept is particularly helpful when debugging a specific call within the application. Logging can be changed before and after a call to the library in order to provide debug logs for that specific call only, without flooding the logs with debug entries for every other call to the library.An example of this can be seen here.# Step 4 - Retrieve the data vieworiginal_level=logging.getLogger().levellogging.getLogger().setLevel(logging.DEBUG)dataview=adh_client.DataViews.getDataView(namespace_id,SAMPLE_DATAVIEW_ID)logging.getLogger().setLevel(original_level)Note that the original level was recorded, logging was set to debug, thegetDataViewcall was performed, then logging was set to its previous level. The logs will contain debug message for only this call, and all other calls before and after will be logged with their original level.Developed using Python 3.10.1AVEVA Samplesare licensed under the Apache 2 license.For the main ADH sample libraries pageReadMeFor the main AVEVA samples pageReadMe