Skip to content

Commit

Permalink
Merge pull request #92 from deeptools/fix91
Browse files Browse the repository at this point in the history
PyUnicode_AsASCIIString returns a new object that needs to be DECREF'd
  • Loading branch information
dpryan79 authored Aug 5, 2019
2 parents f0c6e16 + 9f94cf9 commit 414ce53
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 6 deletions.
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,6 @@ For the sake of consistency with other tools, pyBigWig adopts this same methodol
0.22213841940688142
>>> bw.stats('chr1', 89294, 91629, exact=True)
[0.22213841940688142]
Additionally, `values()` can directly output a numpy vector:

>>> bw = bw.open("

## Retrieve values for individual bases in a range

Expand Down Expand Up @@ -218,6 +215,8 @@ By default, up to 10 "zoom levels" are constructed for bigWig files. You can cha

>>> bw.addHeader([("chr1", 1000000), ("chr2", 1500000)], maxZooms=0)

If you set `maxTooms=0`, please note that IGV and many other tools WILL NOT WORK as they assume that at least one zoom level will be present. You are advised to use the default unless you do not expect the bigWig files to be used by other packages.

## Adding entries to a bigWig file

Assuming you've opened a file for writing and added a header, you can then add entries. Note that the entries **must** be added in order, as bigWig files always contain ordered intervals. There are three formats that bigWig files can use internally to store entries. The most commonly observed format is identical to a [bedGraph](https://genome.ucsc.edu/goldenpath/help/bedgraph.html) file:
Expand Down
21 changes: 20 additions & 1 deletion pyBigWig.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,10 @@ static PyObject *pyBwGetHeader(pyBigWigFile_t *self, PyObject *args) {
PyErr_SetString(PyExc_RuntimeError, "The bigWig file handle is not opened!");
return NULL;
}
if(bw->isWrite == 1) {
PyErr_SetString(PyExc_RuntimeError, "The header cannot be accessed in files opened for writing!");
return NULL;
}

ret = PyDict_New();
val = PyLong_FromUnsignedLong(bw->hdr->version);
Expand Down Expand Up @@ -321,6 +325,11 @@ static PyObject *pyBwGetChroms(pyBigWigFile_t *self, PyObject *args) {
return NULL;
}

if(bw->isWrite == 1) {
PyErr_SetString(PyExc_RuntimeError, "Chromosomes cannot be accessed in files opened for writing!");
return NULL;
}

if(!(PyArg_ParseTuple(args, "|s", &chrom)) || !chrom) {
ret = PyDict_New();
for(i=0; i<bw->cl->nKeys; i++) {
Expand Down Expand Up @@ -380,6 +389,11 @@ static PyObject *pyBwGetStats(pyBigWigFile_t *self, PyObject *args, PyObject *kw
return NULL;
}

if(bw->isWrite == 1) {
PyErr_SetString(PyExc_RuntimeError, "Statistics cannot be accessed in files opened for writing!");
return NULL;
}

if(bw->type == 1) {
PyErr_SetString(PyExc_RuntimeError, "bigBed files have no statistics!");
return NULL;
Expand Down Expand Up @@ -621,6 +635,11 @@ static PyObject *pyBwGetIntervals(pyBigWigFile_t *self, PyObject *args, PyObject
return NULL;
}

if(bw->isWrite == 1) {
PyErr_SetString(PyExc_RuntimeError, "Intervals cannot be accessed in files opened for writing!");
return NULL;
}

if(bw->type == 1) {
PyErr_SetString(PyExc_RuntimeError, "bigBed files have no intervals! Use 'entries()' instead.");
return NULL;
Expand Down Expand Up @@ -724,7 +743,7 @@ int PyString_Check(PyObject *obj) {

//I don't know what happens if PyBytes_AsString(NULL) is used...
char *PyString_AsString(PyObject *obj) {
return PyBytes_AsString(PyUnicode_AsASCIIString(obj));
return PyUnicode_AsUTF8(obj);
}
#endif

Expand Down
2 changes: 1 addition & 1 deletion pyBigWig.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <structmember.h>
#include "bigWig.h"

#define pyBigWigVersion "0.3.16"
#define pyBigWigVersion "0.3.17"

typedef struct {
PyObject_HEAD
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
include_dirs = include_dirs)

setup(name = 'pyBigWig',
version = '0.3.16',
version = '0.3.17',
description = 'A package for accessing bigWig files using libBigWig',
author = "Devon P. Ryan",
author_email = "[email protected]",
Expand Down

0 comments on commit 414ce53

Please sign in to comment.