Skip to content
Snippets Groups Projects
Commit 44711e0d authored by Marco Biasini's avatar Marco Biasini
Browse files

fix BZDNG-187 and BZDNG-148

parent 61660a51
Branches
Tags
No related merge requests found
...@@ -208,6 +208,7 @@ void const_seq_handle_def(O& bp_class) ...@@ -208,6 +208,7 @@ void const_seq_handle_def(O& bp_class)
.def("GetLength", &C::GetLength) .def("GetLength", &C::GetLength)
.def("GetResidue", &C::GetResidue) .def("GetResidue", &C::GetResidue)
.def("GetOneLetterCode", &C::GetOneLetterCode) .def("GetOneLetterCode", &C::GetOneLetterCode)
.def("__iter__", iterator<C>())
.def("__getitem__", &C::GetOneLetterCode) .def("__getitem__", &C::GetOneLetterCode)
.def("GetOffset", &C::GetOffset) .def("GetOffset", &C::GetOffset)
.def("Copy", &C::Copy) .def("Copy", &C::Copy)
...@@ -287,6 +288,9 @@ void export_sequence() ...@@ -287,6 +288,9 @@ void export_sequence()
class_<SeqListIter>("SeqListIter", no_init) class_<SeqListIter>("SeqListIter", no_init)
.def("next", &SeqListIter::next) .def("next", &SeqListIter::next)
; ;
to_python_converter<std::pair<mol::EntityView, mol::EntityView>,
PairToTupleConverter<mol::EntityView, mol::EntityView> >();
class_<AlignmentHandle>("AlignmentHandle", init<>()) class_<AlignmentHandle>("AlignmentHandle", init<>())
.def("GetCount", &AlignmentHandle::GetCount) .def("GetCount", &AlignmentHandle::GetCount)
.add_property("sequence_count", &AlignmentHandle::GetCount) .add_property("sequence_count", &AlignmentHandle::GetCount)
...@@ -357,8 +361,7 @@ void export_sequence() ...@@ -357,8 +361,7 @@ void export_sequence()
.def("__getitem__", &do_slice_b) .def("__getitem__", &do_slice_b)
; ;
implicitly_convertible<SequenceList, ConstSequenceList>(); implicitly_convertible<SequenceList, ConstSequenceList>();
to_python_converter<std::pair<mol::EntityView, mol::EntityView>,
PairToTupleConverter<mol::EntityView, mol::EntityView> >();
def("CreateSequenceList", &CreateSequenceList); def("CreateSequenceList", &CreateSequenceList);
def("SequenceFromChain", seq_from_chain_a); def("SequenceFromChain", seq_from_chain_a);
def("SequenceFromChain", seq_from_chain_b); def("SequenceFromChain", seq_from_chain_b);
......
...@@ -58,6 +58,8 @@ char ConstSequenceHandle::operator[](int index) const ...@@ -58,6 +58,8 @@ char ConstSequenceHandle::operator[](int index) const
} }
void ConstSequenceHandle::CheckValidity() const void ConstSequenceHandle::CheckValidity() const
{ {
if (!impl_) { if (!impl_) {
...@@ -380,4 +382,11 @@ const GenericPropContainerImpl* SequenceHandle::GpImpl() const ...@@ -380,4 +382,11 @@ const GenericPropContainerImpl* SequenceHandle::GpImpl() const
{ {
return Impl().get(); return Impl().get();
} }
char SequenceHandle::operator[](size_t index) const
{
this->CheckValidity();
return this->GetString()[index];
}
}} }}
...@@ -49,6 +49,9 @@ public: ...@@ -49,6 +49,9 @@ public:
friend class AlignmentHandle; friend class AlignmentHandle;
friend class ConstSequenceList; friend class ConstSequenceList;
friend class SequenceList; friend class SequenceList;
typedef String::const_iterator iterator;
/// \brief create invalid sequence handle /// \brief create invalid sequence handle
/// ///
/// \sa IsValid() /// \sa IsValid()
...@@ -118,6 +121,8 @@ public: ...@@ -118,6 +121,8 @@ public:
char operator[](int index) const; char operator[](int index) const;
iterator begin() const { return this->GetString().begin(); }
iterator end() const { return this->GetString().end(); }
/// \brief whether the sequence is valid /// \brief whether the sequence is valid
bool IsValid() const; bool IsValid() const;
...@@ -159,6 +164,7 @@ private: ...@@ -159,6 +164,7 @@ private:
class DLLEXPORT_OST_SEQ SequenceHandle : class DLLEXPORT_OST_SEQ SequenceHandle :
public GenericPropContainer<SequenceHandle> { public GenericPropContainer<SequenceHandle> {
public: public:
typedef String::const_iterator iterator;
friend class GenericPropContainer<SequenceHandle>; friend class GenericPropContainer<SequenceHandle>;
friend class SequenceList; friend class SequenceList;
...@@ -255,6 +261,12 @@ public: ...@@ -255,6 +261,12 @@ public:
void SetOneLetterCode(int position, char new_char); void SetOneLetterCode(int position, char new_char);
char operator[](size_t index) const;
iterator begin() const { return this->GetString().begin(); }
iterator end() const { return this->GetString().end(); }
operator ConstSequenceHandle() const; operator ConstSequenceHandle() const;
/// \brief attach entity view to sequence /// \brief attach entity view to sequence
/// ///
......
...@@ -30,7 +30,10 @@ class TestSeq(unittest.TestCase): ...@@ -30,7 +30,10 @@ class TestSeq(unittest.TestCase):
string_b=''.join([r.one_letter_code for r in b.residues]) string_b=''.join([r.one_letter_code for r in b.residues])
self.assertEqual(string_a, 'ABCDFGH') self.assertEqual(string_a, 'ABCDFGH')
self.assertEqual(string_b, 'ABCDFGH') self.assertEqual(string_b, 'ABCDFGH')
def testSeqIterBZDNG148(self):
s=seq.CreateSequence('A', 'abcdef')
for x in s:
pass
def testViewsFromSequences_02(self): def testViewsFromSequences_02(self):
seq_a=seq.CreateSequence("A", "ABCD-FGH") seq_a=seq.CreateSequence("A", "ABCD-FGH")
seq_a.AttachView(self.ent.Select('rname=A,B,C,D,F,G,H')) seq_a.AttachView(self.ent.Select('rname=A,B,C,D,F,G,H'))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment