Skip to main content

Lightweight data-centric framework for working with scientific data

Project description

DLite

A lightweight data-centric framework for semantic interoperability

PyPi CI tests Documentation DOI

DLite is a C implementation of the SINTEF Open Framework and Tools (SOFT), which is a set of concepts and tools for using data models (aka Metadata) to efficiently describe and work with scientific data.

DLite overview

The core of DLite is a framework for formalised representation of data described by data models (called Metadata or Entity in DLite). On top of this, DLite has a plugin system for various representations of the data in different formats and storages, as well as bindings to popular languages like Python, mappings to ontological concepts for enhanced semantics and a set of tools.

Documentation

The official documentation for DLite can be found on https://sintef.github.io/dlite/.

Installation

DLite is available on PyPI and can be installed with pip

pip install dlite-python[full]

The bracket [full] is optional, but ensures that you install all optional dependencies together with DLite. Without [full] you get a minimal DLite installation that only depends on NumPy. This would disable most storage plugins, except for the built-in "json", "bson" and "rdf" (when compiled against Redland librdf). For alternative installation methods, see the installation instructions.

Usage

All data in DLite is represented by a instance, which is described by a simple data model (aka Metadata). An Instance is identified by a unique UUID and have a set of named dimensions and properties. The dimensions are used to describe the shape of multi-dimensional properties.

DLite Metadata are identified by an URI and have an (optional) human readable description. Each dimension is given a name and description (optional) and each property is given a name, type, shape (optional), unit (optional) and description (optional). The shape of a property refers to the named dimensions. Foe example, a Metadata for a person serialised in YAML may look like:

uri: http://onto-ns.com/meta/0.1/Person
description: A person.
dimensions:
  nskills: Number of skills.
properties:
  name:
    type: string
    description: Full name.
  age:
    type: float32
    unit: year
    description: Age of person.
  skills:
    type: string
    shape: [nskills]
    description: List of skills.

Assume that you have file Person.yaml with this content. In Python, you can load this Metadata with

import dlite
Person = dlite.Instance.from_location("yaml", "Person.yaml", options="mode=r")

where the first argument is the "driver", i.e. the name of storage plugin to use for loading the Metadata. The options argument is optional. By providing "mode=r" you specify that the storage is opened in read-only mode.

You can verify that Person is a Metadata

>>> isinstance(Person, dlite.Metadata)
True

We can create an instance of Person with

homes = Person(
    dimensions={"nskills": 4},
    properties={
      "name": "Sherlock Homes",
      "skills": ["observing", "chemistry", "violin", "boxing"],
    }
)

The dimensions argument must be supplied when a Metadata is instantiated. It ensures that the shape of all properties are initialised consistently. The properties argument is optional. By specifying it, we initialise the properties to the provided values (otherwise, they will be initialised to zero).

In this case we didn't initialised the age

>>> homes.age
0.0
>>> homes.age = 34  # Assign the age

We can view (a JSON representation of) the instance with

>>> print(homes)
{
  "uuid": "314ac1ad-4a7e-477b-a56c-939121355112",
  "meta": "http://onto-ns.com/meta/0.1/Person",
  "dimensions": {
    "nskills": 4
  },
  "properties": {
    "Sherlock Holmes" {
      "age": 34.0,
      "skills": [
        "observing",
        "chemistry",
        "violin",
        "boxing"
      ]
    }
  }
}

The instance can also be stored using the save() method

homes.save("yaml", "homes.yaml", "mode=w")

which will produce the a YAML file with the following content

8cbd4c09-734d-4532-b35a-1e0dd5c3e8b5:
  meta: http://onto-ns.com/meta/0.1/Person
  dimensions:
    nskills: 4
  properties:
    Sherlock Holmes:
      age: 34.0
      skills:
      - observing
      - chemistry
      - violin
      - boxind

This was just a brief example. There is much more to DLite as will be revealed in the documentation.

License

DLite is licensed under the MIT license. However, it include a few third party source files with other permissive licenses. All of these should allow dynamic and static linking against open and propritary codes. A full list of included licenses can be found in LICENSES.txt.

Acknowledgment

In addition from internal funding from SINTEF and NTNU this work has been supported by several projects, including:

  • AMPERE (2015-2020) funded by Forskningsrådet and Norwegian industry partners.
  • FICAL (2015-2020) funded by Forskningsrådet and Norwegian industry partners.
  • Rational alloy design (ALLDESIGN) (2018-2022) NTNU internally funded project.
  • SFI Manufacturing (2015-2023) funded by Forskningsrådet and Norwegian industry partners.
  • SFI PhysMet (2020-2028) funded by Forskningsrådet and Norwegian industry partners.
  • OntoTrans (2020-2024) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 862136.
  • OpenModel (2021-2025) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 953167.
  • DOME 4.0 (2021-2025) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 953163.
  • VIPCOAT (2021-2025) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 952903.
  • MEDIATE (2022-2025) that receives funding from the RCN, Norway; FNR, Luxenburg; SMWK Germany via the M-era.net programme, project9557,
  • MatCHMaker (2022-2026) that receives funding from the European Union’s Horizon 2020 Research and Innovation Programme, under Grant Agreement n. 101091687.

DLite is developed with the hope that it will be a delight to work with.

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

DLite-Python-0.4.1.tar.gz (17.0 kB view details)

Uploaded Source

Built Distributions

DLite_Python-0.4.1-cp311-cp311-win_amd64.whl (372.5 kB view details)

Uploaded CPython 3.11 Windows x86-64

DLite_Python-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

DLite_Python-0.4.1-cp310-cp310-win_amd64.whl (372.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

DLite_Python-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

DLite_Python-0.4.1-cp39-cp39-win_amd64.whl (372.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

DLite_Python-0.4.1-cp39-cp39-musllinux_1_1_i686.whl (394.8 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

DLite_Python-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

DLite_Python-0.4.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (15.7 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

DLite_Python-0.4.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

DLite_Python-0.4.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (7.0 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

DLite_Python-0.4.1-cp38-cp38-win_amd64.whl (372.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

DLite_Python-0.4.1-cp38-cp38-musllinux_1_1_i686.whl (394.9 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

DLite_Python-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

DLite_Python-0.4.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (15.7 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

DLite_Python-0.4.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

DLite_Python-0.4.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (7.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

DLite_Python-0.4.1-cp37-cp37m-win_amd64.whl (371.2 kB view details)

Uploaded CPython 3.7m Windows x86-64

DLite_Python-0.4.1-cp37-cp37m-musllinux_1_1_i686.whl (395.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

DLite_Python-0.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

DLite_Python-0.4.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (15.7 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

DLite_Python-0.4.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

DLite_Python-0.4.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (7.0 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

File details

Details for the file DLite-Python-0.4.1.tar.gz.

File metadata

  • Download URL: DLite-Python-0.4.1.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.5

File hashes

Hashes for DLite-Python-0.4.1.tar.gz
Algorithm Hash digest
SHA256 c26699d1679087cae698ca0a9e0613dd6cb498d05b784918a377914f9deb478b
MD5 6535772cf3b9b6e702ded8f9a11210c7
BLAKE2b-256 ab8f6d774d22c8a5592deb728939ddea89510750b13bb19f3fa490f6c80e90b6

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 be911a5ad326571c3e1fe062014c118d86299161199f50570e35c0854ed1b0c6
MD5 9e4bcd89ab7088c52b68cb4eeb3698bf
BLAKE2b-256 c461a591dc3f76a249d71b45ab8b40da81650b0969cd8d5d682e49102b02e66f

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9ea09f9b2d2d8cc13b41ee48dbbd7f7ee2232d0643f2f4b5a8cc1b933400379a
MD5 fa9a2ce8b59918fdd22aae36784333fc
BLAKE2b-256 bfc29ea630b0d779af0df0107075adf15e016713dd31cdb5ff2201d044807953

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1dd75cd7b8390275085c48062229133b5a2150306e7c4ad76622f5631ee884cf
MD5 0f7cd18bda35f82e9aa7efa73bac2f03
BLAKE2b-256 ce278fd7410e03b8a4c85832d843d4f99b084e09b4c62de884012b9a3f3eea63

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b4f526b8e45a01c2746385d111588e40c67d95b8fd1947f790f790a0fd21d1df
MD5 7bbbaf31a8d70f866a2096beed7afffc
BLAKE2b-256 d86bf41b73cecfd2daaf2c2e7e0767da36767844a901bbe64d33ddb3c25fd4c8

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 effbb11a9261662eaedfddd40b4fbfe0a6ddd25dd454eb4e76c6fd8fa9e63081
MD5 c67d37032121a9c6094d0439b410c546
BLAKE2b-256 82504c815f4b51507fdb6242764d44e9e98c14e2d3f911079f9280612273f832

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 b00f2d5ccaae77cbdb0cfe10566f4f1deb6fcc8d45ac199b9351208171a5a006
MD5 e3ee449fa7c40d9ebe915ed814047437
BLAKE2b-256 f066fc09654ef5e4e70787b63fd68e334deebf0e9f60e5aadbaf4accbe1ab792

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39c53ad9f4faeff43b364de662b78c780a98e97f5eaafd8db6229bef5151e6b8
MD5 dd5fd74414c338e7ad576816ad7d4dcf
BLAKE2b-256 8ad785ed5d4a23d5e47d3d94eedd556fb4d2d741aa139f0fdfca10aa72d5d16e

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 433b3934984dcca1fd75c9b6d64751ffabebb64680c7cfd66482066a43f69ae0
MD5 dc46b9bee95283bc839958fb3ed03f93
BLAKE2b-256 04a3070e339bf87696684017436bdb849498362bac8c2afacd7c722f408c6d0d

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 17d33c73114d288a66717c5229ebf64014bb8e5bdcde304362f75f83ea222f48
MD5 e82f4b87c3b49b22dcc8021995a14e70
BLAKE2b-256 fbbd0b09ef468b1b6d4fbbb29ad2bef91054c0ebe524716925a6c42548d9f1ae

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 627c405f53cb2c157c58a736080d6a4ce2ff787374fa93b66b3844c322512620
MD5 bf06d39f50a628ea5a615a731b97eb0a
BLAKE2b-256 81464031b070d62b76b86d77e6b40da46f6ddf5b517956c09d491b403d60c4dd

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ab8ac59df6971af4f0e2af081f13918568987775b25fed9887fddff8f5ead234
MD5 74a770487571c6a356a404e088199051
BLAKE2b-256 415100698186af00b34e410d3579209495500881c07d14a9ed261c2681b5c1e8

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 f2aebcd68e755f92e538aff2df09554d6f0e938d8d0d7e2aecb1e0c04479916c
MD5 eef78bba2e108447aab4cc70f546da0c
BLAKE2b-256 2c077cedff0e4eb13f871aa38cb55f50451ad05ed9c73d0fbbd2032220ee2546

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 292f2f7f674c851936031a40dc5f7850d3aee5c8c0d7c596a903093f87618bd9
MD5 16006f4a751f353d3eb9cf52e5f0e996
BLAKE2b-256 2ba19b87b3d76044e1ea3be619daf9971a00c944f9f0a4514717d4062f54c149

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2eb0b47eb9f922f3505883089d561f3e25485cbd6f608aa357b896516c8133f7
MD5 fae04f0ed1ea48f3632d06e19da1fe6c
BLAKE2b-256 ec2b2eb44c8652f2aaf89152e7efa777036c38531699bbfa841204052dcf6328

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9ba479a482ccca2b286085b589aa82cd73bac522fde8dd238e36d220f3743cab
MD5 c975fa53e377c5c06e07845ec04ee8e8
BLAKE2b-256 7dad20ed3267f4a0e91408ffa3191c63d932ccbb8dd72461fc7b03acd39b4a28

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 e320898b9a43738a3c7667fc1d70a8efff70cf17520bb5997850a82675cbfc91
MD5 9d50520c5ab3e60fc1d0a7ebfd6131dc
BLAKE2b-256 4a8a1b1f911f6164ba316c37cf81666d4d1529b06a19beee9106fd4f56e3e663

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 7d495261f2941d9e0a79bde5b998c75b316fbe0e00fb61aa95a63f2c35cbc4e0
MD5 d9d8c6a4610d722ae284c238e1c3f05f
BLAKE2b-256 e63364f56f040c869f89583addd4e2128225cdb9a08c486cacddbf8a7a4adf74

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dd29818f6dfa7807de338a121b2d6816ff3b60acc3d3e3bc4dabc8e61e727d66
MD5 b5056da4893673d469943f6b27e8d859
BLAKE2b-256 56a39b1c6ccf1bf4b828f74a3a1236a62bd8ec938f0de9011d117694362f26a2

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 26acbf3e0f42d38b537fe35502746c61107b8eba6c0322bee396ca8cee245124
MD5 90be102e9417e64208279a9652f93e07
BLAKE2b-256 b7980d31150549acc2ab834613a3be1a0e6bceedfab33446e5d193dafb4020f5

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 69538aa10ec769d6d538eae83fe22ca70122f6028988cea8ce72f4602204cd0a
MD5 1fc27ba5055270092683e33cbfabd08b
BLAKE2b-256 57f3d1fc8e45d5fd740d18fa97759e40c5c4c9543883ebb7e2ee1970744edf1b

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3e69b66e27a18b78a3308af7d75e099b85520314c41de0359d9b13c2b5d8e6f6
MD5 ab64f05176ea601a9dd29a5051d811a8
BLAKE2b-256 94b2688df7589914d1da14d3e5434833568aa2a7ffe6993f7d169e7da57afd00

See more details on using hashes here.

File details

Details for the file DLite_Python-0.4.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for DLite_Python-0.4.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 3b855e67f670d2417263fc8e447c896cd6c54adb8a7e3f6eb2ac61c4edadcfd5
MD5 a4bedbbdd7dcc5e4c6a50d2e1e0a1830
BLAKE2b-256 702c9f65fab70a8905ad10202c71b60c0ae2a1e1c5095fd747551f07f34f8b83

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