Skip to main content

Ed-Fi LMS Toolkit Data Store Loader

Project description

lms-ds-loader

The Ed-Fi LMS Data Store Loader is a utility for loading CSV files in the Learning Management System Unified Data Model (LMS-UDM) into a Learning Management System Data Store (LMS-DS) database.

The application processes each file in the input file system by date order, as indicated in the file name. If a record is in a file one day, and missing on the next day, then the system "soft deletes" that record by setting the current timestamp into the deletedat column. Similarly, if a previously soft deleted record reappears later, the record is "un-soft deleted" and updated with any new values.

This functionality requires that a root level directory only contains files for one LMS provider. Thus if an education organization uses multiple LMS providers, then each LMS Extractor needs to write files to a separate, dedicated directory, and the LMS DS Loader must be run once for each extractor's output directory.

Limitations as of April 2021:

  • This tool only supports SQL Server (tested on MSSQL 2019). PostgreSQL support will be added at a future data.

Getting Started

  1. SQL Server support requires the Microsoft ODBC 17 driver, which is newer than the ones that come with most operating systems.

    • Windows: choco install sqlserver-odbcdriver
    • Linux instructions (has not been tested yet)
  2. Requires Python 3.9+ and Poetry.

  3. Install required Python packages:

    poetry install
    
  4. The database account used when running the tool needs to be a member of the following roles in the destination database:

    • db_datareader
    • db_datawriter
    • db_ddladmin

Note that the tool automatically manages deployment of the LMS-DS tables into the destination database, under the lms schema.

Running the Tool

For detailed help, execute poetry run python edfi_lms_ds_loader -h.

Sample call using full integrated security, loading from the sample files directory:

poetry run python edfi_lms_ds_loader --server localhost --dbname lms_toolkit --useintegratedsecurity --csvpath ../../docs/sample-out

Developer Notes

Database-Enabled Integration Tests

This package contains SQL Server-integrated tests, in addition to the standard unit tests. The specialized tests are in the tests_integration_sql directory and they will run automatically if you call pytest with no arguments.

Before running the tests, create an empty SQL Server database named "test_integration_lms_toolkit": sqlcmd -Q "create database test_integration_lms_toolkit". This is required to run the SQL Server integration pytests.

To run only the unit tests: poetry run pytest tests. To run only the integration tests, poetry run pytest tests_integration_sql.

Writing New Tests

Please note and follow the existing pattern for database-enabled integration tests, as this pattern was carefully tuned to support use of database transactions for rolling back changes and thereby leaving behind a clean database.

Dev Operations

  1. Style check: poetry run flake8
  2. Static typing check: poetry run mypy .
  3. Run unit tests: poetry run pytest
  4. Run unit tests with code coverage: poetry run coverage run -m pytest
  5. View code coverage: poetry run coverage report

Also see build.py for use of the build script.

Adding New Migrations

  1. Create SQL Server and PostgreSQL SQL scripts under edfi_lms_ds_loader/scripts/<engine name>, using the same file name for both. Start from the artifact created by MetaEd, and then update the script with these modifications:
    • Remove the Id column and the default constraint for that column.
    • Add a DeletedAt column as a nullable Datetime2.
    • Duplicate the table definition and prefix the duplicate with "stg_".
    • In the staging table, change the xyzIdentifier primary key column name to StagingId, and leave out the DeletedAt column.
  2. Use ; (semi-colon) terminators at the end of each SQL statement for both languages. Do not use GO in the SQL Server files, as the application is not coded to parse it.
  3. Add the new script name to the MIGRATION_SCRIPTS constant at the top of edfi_lms_ds_loader/migrator.py.

Adding New Files Uploads

  1. Create the required table and staging table in a new migration.
  2. Ensure that the file-utils shared library correctly maps the data types for the new file.
  3. Update the edfi_lms_ds_loader/loader_facade.py to pull in the additional file type and upload it.

Legal Information

Copyright (c) 2021 Ed-Fi Alliance, LLC and contributors.

Licensed under the Apache License, Version 2.0 (the "License").

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

See NOTICES for additional copyright and license notifications.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

edfi-lms-ds-loader-1.0.0rc1.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

edfi_lms_ds_loader-1.0.0rc1-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file edfi-lms-ds-loader-1.0.0rc1.tar.gz.

File metadata

  • Download URL: edfi-lms-ds-loader-1.0.0rc1.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.0 importlib_metadata/3.7.3 packaging/20.9 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.4

File hashes

Hashes for edfi-lms-ds-loader-1.0.0rc1.tar.gz
Algorithm Hash digest
SHA256 d095f3612bc5cc231ba751ddcca161611a72ad75a1792a87cabc617e97654d65
MD5 b5668982773cef3a6cf893b733ee9c2c
BLAKE2b-256 9866cfb953c9a85302a4aac4ff5750bd0891a1b123887bfc66cb700092f50b99

See more details on using hashes here.

File details

Details for the file edfi_lms_ds_loader-1.0.0rc1-py3-none-any.whl.

File metadata

  • Download URL: edfi_lms_ds_loader-1.0.0rc1-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.0 importlib_metadata/3.7.3 packaging/20.9 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.4

File hashes

Hashes for edfi_lms_ds_loader-1.0.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 f4a698647d2d54b8a9b88ea207e6312a30c63a8f694d6835b632dde4a33a147f
MD5 0c03b89979d3bab77a31c297ed6b5b20
BLAKE2b-256 f312869b205aff289ddcac92d620d96a4c1ba16660b516c6c6d4e2a1694fe612

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page