Skip to main content

pyfastx is a python module for fast random access to sequences from plain and gzipped FASTA file

Project description

Travis CI Appveyor CI Readthedocs Codecov Coveralls PyPI Version Python Version Wheel

a robust python module for fast random access to sequences from plain and gzipped FASTA file

About

The pyfastx is a lightweight Python C extension that enables users to randomly access to sequences from plain and gzipped FASTA files. This module aims to provide simple APIs for users to extract seqeunce from FASTA by identifier and index number. The pyfastx will build indexes stored in a sqlite3 database file for random access to avoid consuming excessive amount of memory. In addition, the pyfastx can parse standard (sequence spread into multiple lines with same length) and nonstandard (lines with different length) FASTA format. This module used kseq.h written by @attractivechaos in klib project to parse plain FASTA file and zran.c written by @pauldmccarthy in project indexed_gzip to index gzipped file for random access.

This project was heavily inspired by @mdshw5’s project pyfaidx and @brentp’s project pyfasta.

Installation

Make sure you have both pip and at least version 3.5 of Python before starting.

You can install pyfastx via the Python Package Index (PyPI)

pip install pyfastx

Update pyfastx module

pip install -U pyfastx

Usage

Read FASTA file

The fastest way to parse flat or gzipped FASTA file without building index.

>>> import pyfastx
>>> for name, seq in pyfastx.Fasta('test/data/test.fa.gz', build_index=False):
>>>     print(name, seq)

Read flat or gzipped FASTA file and build index, support for random access to FASTA.

>>> import pyfastx
>>> fa = pyfastx.Fasta('test/data/test.fa.gz')
>>> fa
<Fasta> test/data/test.fa.gz contains 211 seqs

Get FASTA information

>>> # get sequence counts in FASTA
>>> len(fa)
211

>>> # get total sequence length of FASTA
>>> fa.size
86262

>>> # get GC content of DNA sequence of FASTA
>>> fa.gc_content
43.529014587402344

>>> # get composition of nucleotides in FASTA
>>> fa.composition
{'A': 24534, 'C': 18694, 'G': 18855, 'T': 24179, 'N': 0}

Get sequence from FASTA

>>> # get sequence like a dictionary by identifier
>>> s1 = fa['JZ822577.1']
>>> s1
<Sequence> JZ822577.1 with length of 333

>>> # get sequence like a list by index
>>> s2 = fa[2]
>>> s2
<Sequence> JZ822579.1 with length of 176

>>> # get last sequence
>>> s3 = fa[-1]
>>> s3
<Sequence> JZ840318.1 with length of 134

>>> # check a sequence name weather in FASTA file
>>> 'JZ822577.1' in fa
True

Get sequence information

>>> s = fa[-1]
>>> s
<Sequence> JZ840318.1 with length of 134

>>> # get sequence name
>>> s.name
'JZ840318.1'

>>> # get sequence string
>>> s.seq
'ACTGGAGGTTCTTCTTCCTGTGGAAAGTAACTTGTTTTGCCTTCACCTGCCTGTTCTTCACATCAACCTTGTTCCCACACAAAACAATGGGAATGTTCTCACACACCCTGCAGAGATCACGATGCCATGTTGGT'

>>> # get sequence length
>>> len(s)
134

>>> # get GC content if dna sequence
>>> s.gc_content
46.26865768432617

>>> # get nucleotide composition if dna sequence
>>> s.composition
{'A': 31, 'C': 37, 'G': 25, 'T': 41, 'N': 0}

Sequence slice

Sequence object can be sliced like a python string

>>> # get a sub seq from sequence
>>> ss = seq[10:30]
>>> ss
<Sequence> JZ840318.1 from 11 to 30

>>> ss.name
'JZ840318.1:11-30'

>>> ss.seq
'CTTCTTCCTGTGGAAAGTAA'

>>> ss = s[-10:]
>>> ss
<Sequence> JZ840318.1 from 125 to 134

>>> ss.name
'JZ840318.1:125-134'

>>> ss.seq
'CCATGTTGGT'

Reverse and complement sequence

>>> # get sliced sequence
>>> fa[0][10:20].seq
'GTCAATTTCC'

>>> # get reverse of sliced sequence
>>> fa[0][10:20].reverse
'CCTTTAACTG'

>>> # get complement of sliced sequence
>>> fa[0][10:20].complement
'CAGTTAAAGG'

>>> # get reversed complement sequence, corresponding to sequence in antisense strand
>>> fa[0][10:20].antisense
'GGAAATTGAC'

Get subsequences

Subseuqneces can be retrieved from FASTA file by using a list of [start, end] coordinates

>>> # get subsequence with start and end position
>>> interval = (1, 10)
>>> fa.fetch('JZ822577.1', interval)
'CTCTAGAGAT'

>>> # get subsequences with a list of start and end position
>>> intervals = [(1, 10), (50, 60)]
>>> fa.fetch('JZ822577.1', intervals)
'CTCTAGAGATTTTAGTTTGAC'

>>> # get subsequences with reverse strand
>>> fa.fetch('JZ822577.1', (1, 10), strand='-')
'ATCTCTAGAG'

Get identifiers

Get all identifiers of sequence as a list-like object.

>>> ids = fa.keys()
>>> ids
<Identifier> contains 211 identifiers

>>> # get count of sequence
>>> len(ids)
211

>>> # get identifier by index
>>> ids[0]
'JZ822577.1'

>>> # check identifier where in fasta
>>> 'JZ822577.1' in ids
True

>>> # iter identifiers
>>> for name in ids:
>>>     print(name)

>>> # convert to a list
>>> list(ids)

Testing

The pyfaidx module was used to test pyfastx. To run the tests:

$ python setup.py test

Acknowledgements

kseq.h and zlib was used to parse FASTA format. Sqlite3 was used to store built indexes. pyfastx can randomly access to sequences from gzipped FASTA file mainly attributed to indexed_gzip.

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

pyfastx-0.2.10.tar.gz (35.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyfastx-0.2.10-cp37-cp37m-win_amd64.whl (501.1 kB view details)

Uploaded CPython 3.7mWindows x86-64

pyfastx-0.2.10-cp37-cp37m-win32.whl (514.6 kB view details)

Uploaded CPython 3.7mWindows x86

pyfastx-0.2.10-cp37-cp37m-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.7m

pyfastx-0.2.10-cp37-cp37m-manylinux1_i686.whl (2.0 MB view details)

Uploaded CPython 3.7m

pyfastx-0.2.10-cp37-cp37m-macosx_10_6_intel.whl (92.2 kB view details)

Uploaded CPython 3.7mmacOS 10.6+ Intel (x86-64, i386)

pyfastx-0.2.10-cp36-cp36m-win_amd64.whl (501.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

pyfastx-0.2.10-cp36-cp36m-win32.whl (514.7 kB view details)

Uploaded CPython 3.6mWindows x86

pyfastx-0.2.10-cp36-cp36m-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.6m

pyfastx-0.2.10-cp36-cp36m-manylinux1_i686.whl (2.0 MB view details)

Uploaded CPython 3.6m

pyfastx-0.2.10-cp36-cp36m-macosx_10_6_intel.whl (92.2 kB view details)

Uploaded CPython 3.6mmacOS 10.6+ Intel (x86-64, i386)

pyfastx-0.2.10-cp35-cp35m-win_amd64.whl (501.0 kB view details)

Uploaded CPython 3.5mWindows x86-64

pyfastx-0.2.10-cp35-cp35m-win32.whl (514.8 kB view details)

Uploaded CPython 3.5mWindows x86

pyfastx-0.2.10-cp35-cp35m-manylinux1_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.5m

pyfastx-0.2.10-cp35-cp35m-manylinux1_i686.whl (2.0 MB view details)

Uploaded CPython 3.5m

pyfastx-0.2.10-cp35-cp35m-macosx_10_6_intel.whl (92.2 kB view details)

Uploaded CPython 3.5mmacOS 10.6+ Intel (x86-64, i386)

File details

Details for the file pyfastx-0.2.10.tar.gz.

File metadata

  • Download URL: pyfastx-0.2.10.tar.gz
  • Upload date:
  • Size: 35.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10.tar.gz
Algorithm Hash digest
SHA256 95028b8ad9f3b3135afe2749b1324b0ff32139926c2bad234c0992a43d6cfe8b
MD5 702652c9ce9abfe0804b2f0a05bc9c28
BLAKE2b-256 8b86b286acaf400c52cbd104a1f39000c21de76cccafd17a957ee0e3a62865fa

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 501.1 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4

File hashes

Hashes for pyfastx-0.2.10-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 f831e4aee14989936cf51677e7c9172955bb12e6b715cb361f32e9cd041ae169
MD5 f9aaab2408aa26c11478a7d089af8e00
BLAKE2b-256 ec9b050afe196aa830ffb3a069b263dd2ffd385f4682eaba90b1f9af3de9c7c3

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp37-cp37m-win32.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 514.6 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4

File hashes

Hashes for pyfastx-0.2.10-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 519dc16e709e5b6cea7f54e080ff102563da51a9c518a7497e72839e52d3f07a
MD5 adee87f5eacd0a285a9ede425fc44c15
BLAKE2b-256 927e66a69f5567111a80f9ec7e4e0bf174a1a39f4232b16f5373d527b875d637

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 d62477a039b01cab7f1e7470b8bf4ee02e658775eae977ad6fcbd3082b2743c1
MD5 c4c63f50262dfd208c6cef574f32c2a5
BLAKE2b-256 a3313d298f78ca2947106450658937b58edec8f905c1a2806a897b67305bc58c

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 c301830b40e9584af288bfe6ba599602cdc1cc1e82887f0b43ee5e49cfed19f3
MD5 ef21bffd4da13d1dfe5a4dc09620ccf4
BLAKE2b-256 65f7b48fc0961c8cb0f851d563655c12a9face93f373f0f409e503d88a982205

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp37-cp37m-macosx_10_6_intel.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp37-cp37m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 92.2 kB
  • Tags: CPython 3.7m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/2.7.15

File hashes

Hashes for pyfastx-0.2.10-cp37-cp37m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 4ac2ff87f8b1ddec301ae2b0f53cfa15842e0bce3322879d374af59f33d32fc5
MD5 966934f6fdd05b14c8c96211e7554c76
BLAKE2b-256 7b30e7a0b11c1bd80bb047c4c6f0174d8322436db68ad86278d812580e75ab24

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 501.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.8

File hashes

Hashes for pyfastx-0.2.10-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 74f263f41d684fad80c8ab1eb3b0fc6367b29e995b9f5a62847fe038bfad9db4
MD5 2403749c1e866ee269e8acc0a1e71ef3
BLAKE2b-256 a9573a4b436224a59fd7693d55f146fb4fdc693f95064e9f239c3f85d2fb94e0

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp36-cp36m-win32.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 514.7 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.8

File hashes

Hashes for pyfastx-0.2.10-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 1bbfea33efabf99e65f8d1a04a1421926e95ce9dfe6bea51574f173f4f626207
MD5 1d8d85c2ef71e9045c5d81f1c017ced7
BLAKE2b-256 5118ee9994a406130cf7322ddfc23f47cb0b570bbc8c02ef93a9844a60a316de

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4bb3a5246aee8ac5dee90891b4d88031050653f2463d3b3e685b89035d329166
MD5 92bdd3fb3cb5081ba65187e8fc7cf5dc
BLAKE2b-256 113a9dca3dbaa24a08a84f069d234ede8d41cf25e98d6928a704da4079897be9

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 13a0855a850ea114565e82b9e8e2a2e4bfd3b0938868429728705541ad48d764
MD5 d3439a1335979217d99b6e270a079a95
BLAKE2b-256 a42f1c928fef45c1180bc31a1df411a18ed8362db96a2ff417d5ddf0bc8c7862

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp36-cp36m-macosx_10_6_intel.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp36-cp36m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 92.2 kB
  • Tags: CPython 3.6m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/2.7.15

File hashes

Hashes for pyfastx-0.2.10-cp36-cp36m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 c6421190d57a3ff5c3878298972703bb0555546f278e455e8e3198cdef577656
MD5 9822ca4ca454c0912b5aef4ba83db198
BLAKE2b-256 d323f3331c2f4cd2bf70f67384c9283b628c53b4c73645a6bd3d1a9bf4890771

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 501.0 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4

File hashes

Hashes for pyfastx-0.2.10-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 e54c25ebd8530ec8cb9ea160bd4b1a84d07a1540d0e97e162a62b3d6542a4d87
MD5 dd7562f8035c28cc17973313e5496148
BLAKE2b-256 25285c50e78dc5626319452eb430e892db2b0b042632aeef1248f05a083758e3

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp35-cp35m-win32.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 514.8 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4

File hashes

Hashes for pyfastx-0.2.10-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 94e400a92226ede817120cfb8f5bb9d044c5f8c0ded3a4da44ca514a077e48da
MD5 1fe6fe96ffd00de817cc115649cca195
BLAKE2b-256 293ec52b317cd07fdf32f32915bcb19030a88b43b28dc803b2809d3be44cbebb

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5eed54ce7bec1266d2ae870ca88fafc848ef8f5c11fdb146355331ce88f81df1
MD5 8558759c5f8c0e32ed74df497db7ef42
BLAKE2b-256 29d3d7993a48250664d1707025e21f59c0b297ea8f61aef2e0f49ba6ad24fdc5

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for pyfastx-0.2.10-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 287a1c9c3ac16c48a55dd27b0a1b250d3aa25b2ccc88154fabaa9e43b4428607
MD5 3128aa32cebe010b9cdb05e97d4ae308
BLAKE2b-256 3d9c9caad8e90150a7df3d1c1570df511bea08b0b480a2f385c625cdf1a55d63

See more details on using hashes here.

File details

Details for the file pyfastx-0.2.10-cp35-cp35m-macosx_10_6_intel.whl.

File metadata

  • Download URL: pyfastx-0.2.10-cp35-cp35m-macosx_10_6_intel.whl
  • Upload date:
  • Size: 92.2 kB
  • Tags: CPython 3.5m, macOS 10.6+ Intel (x86-64, i386)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/2.7.15

File hashes

Hashes for pyfastx-0.2.10-cp35-cp35m-macosx_10_6_intel.whl
Algorithm Hash digest
SHA256 8d20f77f485eabe516887f821ba8d7d776be19b68266196748f046d1a1af61b8
MD5 df8cdbc40069931dee67218dd4152505
BLAKE2b-256 46e9f7fe00f0e731a869132cefa5c5ffb4740e69aaa0d92392439fde8397a47d

See more details on using hashes here.

Supported by

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