Beispiel #1
0
def setup_repositories():
    """Setup repositories."""
    from pybossa.repositories import UserRepository
    from pybossa.repositories import ProjectRepository
    from pybossa.repositories import BlogRepository
    from pybossa.repositories import TaskRepository
    from pybossa.repositories import AuditlogRepository
    from pybossa.repositories import WebhookRepository
    from pybossa.repositories import ResultRepository
    from pybossa.repositories import UserScoreRepository
    global user_repo
    global project_repo
    global blog_repo
    global task_repo
    global auditlog_repo
    global webhook_repo
    global result_repo
    global user_score_repo
    user_repo = UserRepository(db)
    project_repo = ProjectRepository(db)
    blog_repo = BlogRepository(db)
    task_repo = TaskRepository(db)
    auditlog_repo = AuditlogRepository(db)
    webhook_repo = WebhookRepository(db)
    result_repo = ResultRepository(db)
    user_score_repo = UserScoreRepository(db)
Beispiel #2
0
def setup_repositories(app):
    """Setup repositories."""
    from pybossa.repositories import UserRepository
    from pybossa.repositories import ProjectRepository
    from pybossa.repositories import ProjectStatsRepository
    from pybossa.repositories import AnnouncementRepository
    from pybossa.repositories import BlogRepository
    from pybossa.repositories import TaskRepository
    from pybossa.repositories import AuditlogRepository
    from pybossa.repositories import WebhookRepository
    from pybossa.repositories import ResultRepository
    from pybossa.repositories import HelpingMaterialRepository
    global user_repo
    global project_repo
    global project_stats_repo
    global announcement_repo
    global blog_repo
    global task_repo
    global auditlog_repo
    global webhook_repo
    global result_repo
    global helping_repo
    language = app.config.get('FULLTEXTSEARCH_LANGUAGE')
    user_repo = UserRepository(db)
    project_repo = ProjectRepository(db)
    project_stats_repo = ProjectStatsRepository(db)
    announcement_repo = AnnouncementRepository(db)
    blog_repo = BlogRepository(db)
    task_repo = TaskRepository(db, language)
    auditlog_repo = AuditlogRepository(db)
    webhook_repo = WebhookRepository(db)
    result_repo = ResultRepository(db)
    helping_repo = HelpingMaterialRepository(db)
Beispiel #3
0
    def test_delete_also_removes_dependant_resources(self):
        """Test delete removes project tasks and taskruns too"""
        from factories import TaskFactory, TaskRunFactory, BlogpostFactory
        from pybossa.repositories import TaskRepository, BlogRepository

        project = ProjectFactory.create()
        task = TaskFactory.create(project=project)
        taskrun = TaskRunFactory.create(task=task)
        blogpost = BlogpostFactory.create(project=project)

        self.project_repo.delete(project)
        deleted_task = TaskRepository(db).get_task(task.id)
        deleted_taskrun = TaskRepository(db).get_task_run(taskrun.id)
        deleted_blogpost = BlogRepository(db).get(blogpost.id)

        assert deleted_task is None, deleted_task
        assert deleted_taskrun is None, deleted_taskrun
Beispiel #4
0
 def setUp(self):
     super(TestBaseAnalyst, self).setUp()
     BaseAnalyst.__abstractmethods__ = frozenset()
     self.ctx = ContextFixtures()
     self.base_analyst = BaseAnalyst()
     self.project_repo = ProjectRepository(db)
     self.result_repo = ResultRepository(db)
     self.task_repo = TaskRepository(db)
     assert_dict_equal.__self__.maxDiff = None
     assert_equal.__self__.maxDiff = None
Beispiel #5
0
 def setUp(self):
     super(TestZ3950Analyst, self).setUp()
     self.ctx = ContextFixtures()
     self.z3950_analyst = Z3950Analyst()
     self.result_repo = ResultRepository(db)
     self.task_repo = TaskRepository(db)
     self.data = {
         'user_id': [1],
         'control_number': ['123'],
         'reference': ['abc'],
         'foo': ['bar'],
         'comments': ['Some comment']
     }
Beispiel #6
0
def setup_repositories():
    from pybossa.repositories import UserRepository
    from pybossa.repositories import ProjectRepository
    from pybossa.repositories import BlogRepository
    from pybossa.repositories import TaskRepository
    from pybossa.repositories import AuditlogRepository
    global user_repo
    global project_repo
    global blog_repo
    global task_repo
    global auditlog_repo
    user_repo = UserRepository(db)
    project_repo = ProjectRepository(db)
    blog_repo = BlogRepository(db)
    task_repo = TaskRepository(db)
    auditlog_repo = AuditlogRepository(db)
Beispiel #7
0
    def test_api_app_access_with_secure_app_access_enabled(self):
        """Test API and APP access with SECURE_APP_ACCESS enabled"""

        project = ProjectFactory.create()
        task = TaskFactory.create(project=project,
                                  n_answers=2,
                                  state='ongoing')
        task_repo = TaskRepository(db)

        admin = UserFactory.create()
        with patch.dict(self.flask_app.config, {'SECURE_APP_ACCESS': True}):
            url = '/api/completedtask?project_id=1&api_key=api-key1'
            res = self.app.get(url)
            assert res.status_code == 401, res.data
            url = '/api/completedtask?project_id=1'
            headers = {'Authorization': 'api-key1'}
            res = self.app.get(url, headers=headers)
            data = json.loads(res.data)
            # no completedtask yet, should return zero
            assert len(data) == 0, data

            #  task is completed
            task_runs = TaskRunFactory.create_batch(2, task=task)
            task.state = 'completed'
            task_repo.update(task)
            url = '/api/completedtask?project_id=1'
            res = self.app.get(url, headers=headers)
            data = json.loads(res.data)

            # correct result
            assert data[0]['project_id'] == 1, data
            assert data[0]['state'] == u'completed', data

            # test api with incorrect api_key
            url = '/api/completedtask?project_id=1&api_key=BAD-api-key'
            res = self.app.get(url)
            err_msg = 'Status code should be 401'
            assert res.status_code == 401, err_msg

            url = "/project/%s?api_key=api-key1" % project.short_name
            res = self.app.get(url, follow_redirects=True, headers=headers)
            err_msg = 'app access should not be allowed with SECURE_APP_ACCESS enabled'
            assert "Sign in" in res.data, err_msg
Beispiel #8
0
    def test_api_app_access_with_secure_app_access_disabled(self):
        """Test API and APP access with SECURE_APP_ACCESS disabled"""

        project = ProjectFactory.create()
        task = TaskFactory.create(project=project,
                                  n_answers=2,
                                  state='ongoing')
        task_repo = TaskRepository(db)

        with patch.dict(self.flask_app.config, {'SECURE_APP_ACCESS': False}):
            # Test no completedtask yet
            url = '/api/completedtask?project_id=1&api_key=api-key1'
            res = self.app.get(url)
            data = json.loads(res.data)
            assert len(data) == 0, data

            #  test task is completed
            task_runs = TaskRunFactory.create_batch(2, task=task)
            task.state = 'completed'
            task_repo.update(task)
            url = '/api/completedtask?project_id=1&api_key=api-key1'
            res = self.app.get(url)
            data = json.loads(res.data)

            # correct result
            assert data[0]['project_id'] == 1, data
            assert data[0]['state'] == u'completed', data

            # test api with incorrect api_key
            url = '/api/completedtask?project_id=1&api_key=bad-api-key'
            res = self.app.get(url)
            err_msg = 'Status code should be 401'
            assert res.status_code == 401, err_msg

            url = "/project/%s?api_key=api-key1" % project.short_name
            res = self.app.get(url, follow_redirects=True)
            err_msg = 'app access should be allowed with SECURE_APP_ACCESS disabled'
            assert not "Sign in" in res.data, err_msg
            assert "Statistics" in res.data
            assert 'id="percent-completed"' in res.data
            assert "<div>100%</div>" in res.data
Beispiel #9
0
def setup_repositories(app):
    """Setup repositories."""
    from pybossa.repositories import UserRepository
    from pybossa.repositories import ProjectRepository
    from pybossa.repositories import ProjectStatsRepository
    from pybossa.repositories import AnnouncementRepository
    from pybossa.repositories import BlogRepository
    from pybossa.repositories import TaskRepository
    from pybossa.repositories import AuditlogRepository
    from pybossa.repositories import WebhookRepository
    from pybossa.repositories import ResultRepository
    from pybossa.repositories import HelpingMaterialRepository
    from pybossa.repositories import PerformanceStatsRepository
    global user_repo
    global project_repo
    global project_stats_repo
    global announcement_repo
    global blog_repo
    global task_repo
    global auditlog_repo
    global webhook_repo
    global result_repo
    global helping_repo
    global performance_stats_repo
    language = app.config.get('FULLTEXTSEARCH_LANGUAGE')
    rdancy_upd_exp = app.config.get('REDUNDANCY_UPDATE_EXPIRATION', 30)
    user_repo = UserRepository(db)
    project_repo = ProjectRepository(db)
    project_stats_repo = ProjectStatsRepository(db)
    announcement_repo = AnnouncementRepository(db)
    blog_repo = BlogRepository(db)
    task_repo = TaskRepository(db, language, rdancy_upd_exp)
    auditlog_repo = AuditlogRepository(db)
    webhook_repo = WebhookRepository(db)
    result_repo = ResultRepository(db)
    helping_repo = HelpingMaterialRepository(db)
    performance_stats_repo = PerformanceStatsRepository(db)
Beispiel #10
0
#
# PYBOSSA 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with PYBOSSA.  If not, see <http://www.gnu.org/licenses/>.
from mock import patch, Mock
from pybossa.importers import Importer

from default import Test, with_context
from factories import ProjectFactory, TaskFactory
from pybossa.repositories import TaskRepository
from pybossa.core import db
task_repo = TaskRepository(db)


@patch.object(Importer, '_create_importer_for')
class TestImporterPublicMethods(Test):
    importer = Importer()

    @with_context
    def test_create_tasks_creates_them_correctly(self, importer_factory):
        mock_importer = Mock()
        mock_importer.tasks.return_value = [{
            'info': {
                'question': 'question',
                'url': 'url'
            },
            'n_answers': 20
Beispiel #11
0
 def setUp(self):
     super(TestTaskRepositorySaveDeleteUpdate, self).setUp()
     self.task_repo = TaskRepository(db)
Beispiel #12
0
 def setUp(self):
     super(TestTaskRepositoryForTaskQueries, self).setUp()
     self.task_repo = TaskRepository(db)
 def setUp(self):
     super(TestUserRepository, self).setUp()
     self.user_repo = UserRepository(db)
     self.task_repo = TaskRepository(db)
Beispiel #14
0
    def setUp(self):
        super(TestIIIFAnnotationAnalyst, self).setUp()
        self.ctx = ContextFixtures()
        self.result_repo = ResultRepository(db)
        self.task_repo = TaskRepository(db)
        self.iiif_analyst = IIIFAnnotationAnalyst()
        self.comments = ['Some comment']
        self.tags = {
            'foo': [
                dict(x=100, y=100, w=100, h=100),
                dict(x=200, y=200, w=200, h=200)
            ],
            'bar': [dict(x=300, y=300, w=300, h=300)]
        }
        transcription_data = {'foo': ['bar', 'baz'], 'qux': ['quux', 'quuz']}
        self.transcriptions_df = pandas.DataFrame(transcription_data)

        self.comment_annos = []
        for comment in self.comments:
            self.comment_annos.append({
                'motivation': 'commenting',
                'body': {
                    'type': 'TextualBody',
                    'value': comment,
                    'purpose': 'commenting',
                    'format': 'text/plain'
                },
                'target': 'example.com'
            })

        self.tagging_annos = []
        for tag, rect_list in self.tags.items():
            for rect in rect_list:
                self.tagging_annos.append({
                    'motivation': 'tagging',
                    'body': {
                        'type': 'TextualBody',
                        'purpose': 'tagging',
                        'value': tag
                    },
                    'target': {
                        'source': 'example.com',
                        'selector': {
                            'conformsTo':
                            'http://www.w3.org/TR/media-frags/',
                            'type':
                            'FragmentSelector',
                            'value':
                            '?xywh={0},{1},{2},{3}'.format(
                                rect['x'], rect['y'], rect['w'], rect['h'])
                        }
                    }
                })

        self.transcription_annos = []
        for tag, value_list in transcription_data.items():
            for value in value_list:
                self.transcription_annos.append({
                    'motivation':
                    'describing',
                    'body': [{
                        'type': 'TextualBody',
                        'purpose': 'tagging',
                        'value': tag
                    }, {
                        'type': 'TextualBody',
                        'purpose': 'describing',
                        'value': value,
                        'format': 'text/plain'
                    }],
                    'target':
                    'example.com'
                })

        self.data = {
            'user_id': [1, 2, 3],
            'info':
            [self.comment_annos, self.tagging_annos, self.transcription_annos]
        }