#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2013 University of Dundee & Open Microscopy Environment.
# All rights reserved.
#
# This program 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 2 of the License, or
# (at your option) any later version.
#
# This program 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 program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import pytest
import omero
from omero.cli import CLI
from omero.plugins.sessions import SessionsControl
from omero.rtypes import rstring
from omero.testlib import ITest
import warnings
[docs]
class AbstractCLITest(ITest):
[docs]
@classmethod
def setup_class(cls):
super(AbstractCLITest, cls).setup_class()
cls.cli = CLI()
cls.cli.register("sessions", SessionsControl, "TEST")
[docs]
def setup_mock(self):
from mox3 import mox
warnings.warn(
"The usage of mox3 is deprecated as of OMERO.py 5.17.0",
DeprecationWarning)
self.mox = mox.Mox()
[docs]
def teardown_mock(self):
warnings.warn(
"The usage of mox3 is deprecated as of OMERO.py 5.17.0",
DeprecationWarning)
self.mox.UnsetStubs()
self.mox.VerifyAll()
[docs]
class CLITest(AbstractCLITest):
[docs]
def setup_method(self, method):
self.args = self.login_args()
[docs]
def create_object(self, object_type, name=""):
# create object
if object_type == 'Dataset':
new_object = omero.model.DatasetI()
elif object_type == 'Project':
new_object = omero.model.ProjectI()
elif object_type == 'Plate':
new_object = omero.model.PlateI()
elif object_type == 'Screen':
new_object = omero.model.ScreenI()
elif object_type == 'Image':
new_object = self.new_image()
new_object.name = rstring(name)
new_object = self.update.saveAndReturnObject(new_object)
# check object has been created
found_object = self.query.get(object_type, new_object.id.val)
assert found_object.id.val == new_object.id.val
return new_object.id.val
@pytest.fixture()
def simpleHierarchy(self):
proj = self.make_project()
dset = self.make_dataset()
img = self.update.saveAndReturnObject(self.new_image())
self.link(proj, dset)
self.link(dset, img)
return proj, dset, img
[docs]
class RootCLITest(AbstractCLITest):
[docs]
def setup_method(self, method):
self.args = self.root_login_args()
[docs]
class ArgumentFixture(object):
"""
Used to test the user/group argument
"""
def __init__(self, prefix, attr):
self.prefix = prefix
self.attr = attr
[docs]
def get_arguments(self, obj):
args = []
if self.prefix:
args += [self.prefix]
if self.attr:
args += ["%s" % getattr(obj, self.attr).val]
return args
def __repr__(self):
if self.prefix:
return "%s" % self.prefix
else:
return "%s" % self.attr
UserIdNameFixtures = (
ArgumentFixture('--id', 'id'),
ArgumentFixture('--name', 'omeName'),
)
UserFixtures = (
ArgumentFixture(None, 'id'),
ArgumentFixture(None, 'omeName'),
ArgumentFixture('--user-id', 'id'),
ArgumentFixture('--user-name', 'omeName'),
)
GroupIdNameFixtures = (
ArgumentFixture('--id', 'id'),
ArgumentFixture('--name', 'name'),
)
GroupFixtures = (
ArgumentFixture(None, 'id'),
ArgumentFixture(None, 'name'),
ArgumentFixture('--group-id', 'id'),
ArgumentFixture('--group-name', 'name'),
)
[docs]
def get_user_ids(out, sort_key=None):
columns = {'login': 1, 'first-name': 2, 'last-name': 3, 'email': 4}
lines = out.split('\n')
ids = []
last_value = None
for line in lines[2:]:
elements = line.split('|')
if len(elements) < 8:
continue
ids.append(int(elements[0].strip()))
if sort_key:
if sort_key == 'id':
new_value = ids[-1]
else:
new_value = elements[columns[sort_key]].strip()
if last_value is not None:
assert new_value >= last_value
last_value = new_value
return ids
[docs]
def get_group_ids(out, sort_key=None):
lines = out.split('\n')
ids = []
last_value = None
for line in lines[2:]:
elements = line.split('|')
if len(elements) < 4:
continue
ids.append(int(elements[0].strip()))
if sort_key:
if sort_key == 'id':
new_value = ids[-1]
else:
new_value = elements[1].strip()
if last_value is not None:
assert new_value >= last_value
last_value = new_value
return ids