view @pyobject/methods.m @ 246:4acc64f89d67

maint: fix copyright header comment blocks * @pyobject/display.m, @pyobject/dummy.m, @pyobject/methods.m, @pyobject/pyobject.m, @pyobject/subsref.m: Use correct project name in copyright file header comment blocks.
author Mike Miller <mtmiller@octave.org>
date Wed, 27 Jul 2016 17:05:09 -0700
parents c56b85f405ba
children a4a2c214415e
line wrap: on
line source

## Copyright (C) 2016 Colin B. Macdonald
##
## This file is part of Pytave
##
## Pytave is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; either version 3 of the License,
## or (at your option) any later version.
##
## This software is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty
## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
## the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public
## License along with this software; see the file COPYING.
## If not, see <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @documentencoding UTF-8
## @defmethod @@pyobject methods (@var{x})
## List the properties/callables of a Python object.
##
## Returns a cell array of strings, the names of the properties
## and ``callables'' of @var{x}.
##
## Example:
## @example
## @group
## pyexec ("import sys")
## sys = pyeval ("sys");
## methods (sys)
##   @result{} ans =
##     @{
##       [1,1] = ...
##       [1,2] = ...
##        ...  = path
##        ...  = version
##        ...
##     @}
## @end group
## @end example
##
## Note that if you instead want the methods implemented by
## the Octave class @code{@@pyobject}, use can always do:
## @example
## @group
## methods pyobject
##   @print{} Methods for class pyobject:
##   @print{} display  ...  subsref
## @comment this doctest may need updating as we add methods
## @end group
## @end example
##
## @seealso{methods}
## @end defmethod


function L = methods (x)
  # filter the output of `dir(x)`
  # (to get properties only:
  # [a for a in dir(x) if not callable(getattr(x, a)) and not a.startswith('__')]
  cmd = sprintf ("[a for a in dir(__InOct__['%s']) if not a.startswith('__')]",
                 getid (x));
  # TODO: may need to convert from Python list to Octave list
  L = pyeval (cmd);
endfunction


%!test
%! pyexec ("import sys")
%! sys = pyeval ("sys");
%! L = methods (sys);
%! % sys has lots of methods
%! assert (length (L) >= 32)
%! % version is one of them
%! assert (any (strcmp (L, "version")))

%!test
%! pyexec ("import sys")
%! L = methods (pyeval ("sys"));
%! assert (iscell (L))