Projet

Général

Profil

0001-misc-use-relative-imports-36517.patch

Frédéric Péters, 30 septembre 2019 09:46

Télécharger (151 ko)

Voir les différences:

Subject: [PATCH] misc: use relative imports (#36517)

 extra/pyvotecore/vote_field.py                |  2 +-
 extra/vote/anonymity.py                       |  2 +-
 extra/vote/ranked_items.py                    |  2 +-
 tests/test_admin_pages.py                     |  4 +-
 tests/test_api.py                             | 11 ++-
 tests/test_backoffice_pages.py                |  8 +-
 tests/test_datasource.py                      | 10 +--
 tests/test_fc_auth.py                         | 12 +--
 tests/test_fields.py                          |  2 +-
 tests/test_form_pages.py                      | 50 ++++++------
 tests/test_formdata.py                        |  4 +-
 tests/test_formdef_import.py                  |  2 +-
 tests/test_publisher.py                       |  2 +-
 tests/test_role.py                            |  2 +-
 tests/test_templates.py                       |  4 +-
 tests/test_workflow_import.py                 |  2 +-
 tests/test_workflows.py                       |  6 +-
 tests/utilities.py                            | 21 +----
 wcs/__init__.py                               | 11 +--
 wcs/admin/__init__.py                         |  2 +-
 wcs/admin/bounces.py                          | 18 ++---
 wcs/admin/categories.py                       |  6 +-
 wcs/admin/data_sources.py                     | 10 +--
 wcs/admin/fields.py                           | 10 +--
 wcs/admin/forms.py                            | 18 ++---
 wcs/admin/logged_errors.py                    |  6 +-
 wcs/admin/roles.py                            |  8 +-
 wcs/admin/settings.py                         | 55 +++++++------
 wcs/admin/users.py                            | 30 +++----
 wcs/admin/workflows.py                        | 14 ++--
 wcs/admin/wscalls.py                          |  8 +-
 wcs/api.py                                    | 16 ++--
 wcs/api_utils.py                              |  2 +-
 wcs/backoffice/__init__.py                    |  2 +-
 wcs/backoffice/cards.py                       |  4 +-
 wcs/backoffice/data_management.py             |  6 +-
 wcs/backoffice/management.py                  | 32 ++++----
 wcs/backoffice/root.py                        | 14 ++--
 wcs/backoffice/studio.py                      |  6 +-
 wcs/backoffice/submission.py                  |  8 +-
 wcs/carddef.py                                |  2 +-
 wcs/categories.py                             | 10 +--
 wcs/conditions.py                             |  4 +-
 wcs/ctl/backup.py                             |  2 +-
 wcs/ctl/check_hobos.py                        | 10 +--
 wcs/ctl/delete_tenant.py                      |  2 +-
 wcs/ctl/export_settings.py                    |  2 +-
 wcs/ctl/hobo_notify.py                        |  4 +-
 wcs/ctl/management/commands/__init__.py       |  2 +-
 wcs/ctl/management/commands/convert_to_sql.py |  2 +-
 wcs/ctl/management/commands/runscript.py      |  2 +-
 wcs/ctl/process_bounce.py                     |  8 +-
 wcs/ctl/rebuild_indexes.py                    |  2 +-
 wcs/ctl/restore.py                            |  2 +-
 wcs/ctl/runscript.py                          |  2 +-
 wcs/ctl/shell.py                              |  2 +-
 wcs/ctl/wipe_data.py                          |  2 +-
 wcs/data_sources.py                           | 36 ++++-----
 wcs/fields.py                                 | 20 ++---
 wcs/formdata.py                               | 32 ++++----
 wcs/formdef.py                                | 32 ++++----
 wcs/forms/actions.py                          | 10 +--
 wcs/forms/backoffice.py                       |  8 +-
 wcs/forms/common.py                           | 12 +--
 wcs/forms/preview.py                          |  2 +-
 wcs/forms/root.py                             | 16 ++--
 wcs/forms/workflows.py                        |  2 +-
 wcs/logged_errors.py                          |  4 +-
 wcs/myspace.py                                |  4 +-
 wcs/portfolio.py                              | 11 +--
 wcs/publisher.py                              | 22 +++---
 wcs/qommon/__init__.py                        |  4 +-
 wcs/qommon/admin/cfg.py                       |  2 +-
 wcs/qommon/admin/emails.py                    | 10 +--
 wcs/qommon/admin/logger.py                    |  8 +-
 wcs/qommon/admin/menu.py                      |  4 +-
 wcs/qommon/admin/settings.py                  |  8 +-
 wcs/qommon/admin/texts.py                     | 10 +--
 wcs/qommon/afterjobs.py                       |  6 +-
 wcs/qommon/backoffice/__init__.py             |  2 +-
 wcs/qommon/backoffice/listing.py              |  2 +-
 wcs/qommon/backoffice/menu.py                 |  4 +-
 wcs/qommon/backoffice/root.py                 |  4 +-
 wcs/qommon/bounces.py                         |  2 +-
 wcs/qommon/ctl.py                             |  4 +-
 wcs/qommon/emails.py                          | 17 ++--
 wcs/qommon/errors.py                          |  8 +-
 wcs/qommon/form.py                            | 12 +--
 wcs/qommon/http_request.py                    |  4 +-
 wcs/qommon/http_response.py                   |  6 +-
 wcs/qommon/humantime.py                       |  2 +-
 wcs/qommon/ident/__init__.py                  |  2 +-
 wcs/qommon/ident/franceconnect.py             | 10 +--
 wcs/qommon/ident/idp.py                       | 26 +++----
 wcs/qommon/ident/password.py                  | 36 ++++-----
 wcs/qommon/ident/password_accounts.py         |  2 +-
 .../management/commands/collectstatic.py      |  2 +-
 wcs/qommon/management/commands/cron.py        |  6 +-
 wcs/qommon/management/commands/migrate.py     |  2 +-
 wcs/qommon/misc.py                            |  8 +-
 wcs/qommon/myspace.py                         | 16 ++--
 wcs/qommon/pages.py                           |  4 +-
 wcs/qommon/publisher.py                       | 37 ++++-----
 wcs/qommon/saml2.py                           | 12 +--
 wcs/qommon/saml2utils.py                      |  2 +-
 wcs/qommon/sessions.py                        |  6 +-
 wcs/qommon/sms.py                             |  6 +-
 wcs/qommon/storage.py                         |  8 +-
 wcs/qommon/substitution.py                    |  2 +-
 wcs/qommon/template.py                        | 14 ++--
 wcs/qommon/tokens.py                          |  2 +-
 wcs/roles.py                                  |  9 +--
 wcs/root.py                                   | 76 +++++++++---------
 wcs/sessions.py                               |  8 +-
 wcs/sql.py                                    | 10 +--
 wcs/tracking_code.py                          |  4 +-
 wcs/users.py                                  | 10 +--
 wcs/variables.py                              | 16 ++--
 wcs/wf/aggregation_email.py                   | 12 +--
 wcs/wf/attachment.py                          |  4 +-
 wcs/wf/backoffice_fields.py                   |  4 +-
 wcs/wf/criticality.py                         |  2 +-
 wcs/wf/dispatch.py                            |  8 +-
 wcs/wf/export_to_model.py                     | 13 ++--
 wcs/wf/form.py                                |  4 +-
 wcs/wf/geolocate.py                           | 10 +--
 wcs/wf/jump.py                                | 12 +--
 wcs/wf/notification.py                        |  8 +-
 wcs/wf/profile.py                             | 10 +--
 wcs/wf/redirect_to_url.py                     |  4 +-
 wcs/wf/register_comment.py                    |  8 +-
 wcs/wf/remove.py                              |  2 +-
 wcs/wf/resubmit.py                            |  2 +-
 wcs/wf/roles.py                               | 10 +--
 wcs/wf/wscall.py                              |  8 +-
 wcs/workflows.py                              | 78 +++++++++----------
 wcs/wscalls.py                                | 18 ++---
 137 files changed, 674 insertions(+), 701 deletions(-)
extra/pyvotecore/vote_field.py
18 18

  
19 19
import random
20 20
from quixote.html import htmltext, TemplateIO
21
from qommon.form import CompositeWidget, IntWidget, WidgetList, StringWidget, \
21
from wcs.qommon.form import CompositeWidget, IntWidget, WidgetList, StringWidget, \
22 22
        CheckboxWidget, SingleSelectWidget
23 23
from wcs.fields import WidgetField, register_field_class
24 24
from pyvotecore import schulze_method, irv, ranked_pairs, schulze_pr, \
extra/vote/anonymity.py
19 19
from quixote import get_publisher
20 20

  
21 21
from wcs.fields import WidgetField, register_field_class
22
from qommon.form import *
22
from wcs.qommon.form import *
23 23

  
24 24
class VoteAnonymityWidget(CheckboxWidget):
25 25
    vote_anonymity = 'anonymous'
extra/vote/ranked_items.py
18 18

  
19 19
import random
20 20
from quixote.html import htmltext, TemplateIO
21
from qommon.form import *
21
from wcs.qommon.form import *
22 22
from wcs.fields import WidgetField, register_field_class
23 23

  
24 24
class RankedItemsWidget(CompositeWidget):
tests/test_admin_pages.py
28 28

  
29 29
from wcs.qommon import errors, sessions
30 30
from wcs.qommon.form import UploadedFile
31
from qommon.ident.password_accounts import PasswordAccount
31
from wcs.qommon.ident.password_accounts import PasswordAccount
32 32
from wcs.qommon.http_request import HTTPRequest
33 33
from wcs.qommon.template import get_current_theme
34 34
from wcs.qommon.bounces import Bounce
......
4501 4501
    resp = resp.forms[0].submit() # confirm delete
4502 4502
    assert len(pub.cfg['idp']) == 0
4503 4503

  
4504
    with mock.patch('qommon.misc.urlopen') as urlopen:
4504
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
4505 4505
        idp_metadata_filename = os.path.join(os.path.dirname(__file__), 'idp_metadata.xml')
4506 4506
        urlopen.side_effect = lambda *args: open(idp_metadata_filename)
4507 4507
        resp = app.get('/backoffice/settings/identification/idp/idp/')
tests/test_api.py
530 530
    formdef.workflow_id = workflow.id
531 531
    formdef.store()
532 532

  
533
    with mock.patch('qommon.misc.urlopen') as urlopen:
533
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
534 534
        urlopen.side_effect = lambda *args: StringIO('''\
535 535
{"data": [{"id": 0, "text": "zéro", "foo": "bar"}, \
536 536
{"id": 1, "text": "uné", "foo": "bar1"}, \
......
1282 1282
    formdata.status = 'wf-new'
1283 1283
    formdata.evolution[-1].status = 'wf-new'
1284 1284

  
1285
    from qommon.form import PicklableUpload as PicklableUpload2
1286 1285
    from wcs.qommon.form import PicklableUpload as PicklableUpload3
1287
    upload = PicklableUpload2('test.txt', 'text/plain', 'ascii')
1286
    upload = PicklableUpload3('test.txt', 'text/plain', 'ascii')
1288 1287
    upload.receive(['test'])
1289 1288
    upload2 = PicklableUpload3('test.txt', 'text/plain', 'ascii')
1290 1289
    upload2.receive(['test'])
......
2547 2546
    assert orig == 'example.net'
2548 2547

  
2549 2548
def test_reverse_geocoding(pub):
2550
    with mock.patch('qommon.misc.urlopen') as urlopen:
2549
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
2551 2550
        urlopen.side_effect = lambda *args: StringIO(json.dumps({'address': 'xxx'}))
2552 2551
        get_app(pub).get('/api/reverse-geocoding', status=400)
2553 2552
        resp = get_app(pub).get('/api/reverse-geocoding?lat=0&lon=0')
......
2603 2602
            '?format=json&orig=coucou&email=%s' % urllib.quote(local_user.email), '1234')
2604 2603
        return signed_url[len('http://example.net'):]
2605 2604

  
2606
    with mock.patch('qommon.misc.urlopen') as urlopen:
2605
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
2607 2606
        urlopen.side_effect = lambda *args: StringIO('''\
2608 2607
{"data": [{"id": 0, "text": "zéro", "foo": "bar"}, \
2609 2608
{"id": 1, "text": "uné", "foo": "bar1"}, \
......
2634 2633

  
2635 2634

  
2636 2635
def test_geocoding(pub):
2637
    with mock.patch('qommon.misc.urlopen') as urlopen:
2636
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
2638 2637
        urlopen.side_effect = lambda *args: StringIO(json.dumps([{'lat': 0, 'lon': 0}]))
2639 2638
        get_app(pub).get('/api/geocoding', status=400)
2640 2639
        resp = get_app(pub).get('/api/geocoding?q=test')
tests/test_backoffice_pages.py
22 22
    xlwt = None
23 23

  
24 24
from quixote import cleanup, get_publisher
25
from qommon import ods
25
from wcs.qommon import ods
26 26
from wcs.api_utils import sign_url
27 27
from wcs.qommon import errors, sessions
28 28
from wcs.qommon.form import PicklableUpload
29
from qommon.ident.password_accounts import PasswordAccount
29
from wcs.qommon.ident.password_accounts import PasswordAccount
30 30
from wcs.qommon.http_request import HTTPRequest
31 31
from wcs.roles import Role
32 32
from wcs.workflows import (Workflow, CommentableWorkflowStatusItem,
......
2899 2899

  
2900 2900
    app = login(get_app(pub))
2901 2901

  
2902
    with mock.patch('qommon.misc.urlopen') as urlopen:
2902
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
2903 2903
        data = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
2904 2904
        def side_effect(url, *args):
2905 2905
            assert '?name_id=admin' in url
......
4023 4023

  
4024 4024
    app = get_app(pub)
4025 4025

  
4026
    with mock.patch('qommon.misc.urlopen') as urlopen:
4026
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
4027 4027
        data1 = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
4028 4028
        data2 = {'data': [{'id': 'C', 'text': 'hello'}, {'id': 'D', 'text': 'world'}]}
4029 4029
        def side_effect(url, *args):
tests/test_datasource.py
387 387

  
388 388
    data_source2 = NamedDataSource.select()[0]
389 389
    assert data_source2.data_source == data_source.data_source
390
    with mock.patch('qommon.misc.urlopen') as urlopen:
390
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
391 391
        urlopen.side_effect = lambda *args: StringIO(
392 392
                '{"data": [{"id": 0, "text": "zéro"}, {"id": 1, "text": "uné"}, {"id": 2, "text": "deux"}]}')
393 393
        assert data_sources.get_items({'type': 'foobar'}) == [
......
403 403
    data_source.data_source = {'type': 'json', 'value': "https://api.example.com/json"}
404 404
    data_source.store()
405 405

  
406
    with mock.patch('qommon.misc.urlopen') as urlopen:
406
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
407 407
        urlopen.side_effect = lambda *args: StringIO(
408 408
                '{"data": [{"id": 0, "text": "zero"}]}')
409 409
        assert len(data_sources.get_items({'type': 'foobar'})) == 1
......
420 420

  
421 421
    data_source.data_source = {'type': 'json', 'value': "https://api.example.com/json?foo=bar"}
422 422
    data_source.store()
423
    with mock.patch('qommon.misc.urlopen') as urlopen:
423
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
424 424
        urlopen.side_effect = lambda *args: StringIO(
425 425
                '{"data": [{"id": 0, "text": "zero"}]}')
426 426
        assert len(data_sources.get_items({'type': 'foobar'})) == 1
......
437 437

  
438 438
    data_source.data_source = {'type': 'json', 'value': "https://no-secret.example.com/json"}
439 439
    data_source.store()
440
    with mock.patch('qommon.misc.urlopen') as urlopen:
440
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
441 441
        urlopen.side_effect = lambda *args: StringIO(
442 442
                '{"data": [{"id": 0, "text": "zero"}]}')
443 443
        assert len(data_sources.get_items({'type': 'foobar'})) == 1
......
450 450
    datasource.data_source = {'type': 'json', 'value': 'http://whatever/'}
451 451
    datasource.store()
452 452

  
453
    with mock.patch('qommon.misc.urlopen') as urlopen:
453
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
454 454
        urlopen.side_effect = lambda *args: StringIO(
455 455
            json.dumps({'data': [{'id': '1', 'text': 'foo'}, {'id': '2', 'text': 'bar'}]}))
456 456

  
tests/test_fc_auth.py
144 144
    }
145 145

  
146 146
    assert pub.user_class.count() == 0
147
    with mock.patch('qommon.ident.franceconnect.http_post_request') as http_post_request, \
148
            mock.patch('qommon.ident.franceconnect.http_get_page') as http_get_page:
147
    with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \
148
            mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page:
149 149
        http_post_request.return_value = (None, 200, json.dumps(token_result), None)
150 150
        http_get_page.return_value = (None, 200, json.dumps(user_info_result), None)
151 151
        resp = app.get('/ident/fc/callback?%s' % urllib.urlencode({
......
197 197
        id_token['nonce'] = qs['nonce'][0]
198 198
        token_result['id_token'] = '.%s.' % base64url_encode(json.dumps(id_token))
199 199

  
200
        with mock.patch('qommon.ident.franceconnect.http_post_request') as http_post_request, \
201
                mock.patch('qommon.ident.franceconnect.http_get_page') as http_get_page:
200
        with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \
201
                mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page:
202 202
            http_post_request.return_value = (None, 200, json.dumps(token_result), None)
203 203
            http_get_page.return_value = (None, 200, json.dumps(user_info_result), None)
204 204
            resp = app.get('/ident/fc/callback?%s' % urllib.urlencode({
......
245 245
        'family_name': 'Deux',
246 246
        # 'email': 'john.deux@example.com',  # missing
247 247
    }
248
    with mock.patch('qommon.ident.franceconnect.http_post_request') as http_post_request, \
249
            mock.patch('qommon.ident.franceconnect.http_get_page') as http_get_page:
248
    with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \
249
            mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page:
250 250
        http_post_request.return_value = (None, 200, json.dumps(token_result), None)
251 251
        http_get_page.return_value = (None, 200, json.dumps(bad_user_info_result), None)
252 252
        resp = app.get('/ident/fc/callback?%s' % urllib.urlencode({
tests/test_fields.py
8 8

  
9 9
from quixote import cleanup
10 10
from quixote.http_request import Upload
11
from qommon.http_request import HTTPRequest
11
from wcs.qommon.http_request import HTTPRequest
12 12
from wcs.qommon import sessions
13 13
from wcs import fields
14 14
from wcs.qommon.form import Form
tests/test_form_pages.py
850 850
    formdef.store()
851 851
    formdef.data_class().wipe()
852 852

  
853
    with mock.patch('qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
853
    with mock.patch('wcs.qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
854 854
        resp = get_app(pub).get('/test/')
855 855
        call_count = invalidate_cache.call_count
856 856

  
......
861 861
    formdef.store()
862 862

  
863 863
    # check the cache doesn't get invalidated for every page
864
    with mock.patch('qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
864
    with mock.patch('wcs.qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
865 865
        resp = get_app(pub).get('/test/')
866 866
        assert invalidate_cache.call_count == call_count
867 867

  
......
2496 2496
        data_source=ds, display_disabled_items=True,
2497 2497
        prefill={'type': 'formula', 'value': '["2"]'})]
2498 2498

  
2499
    with mock.patch('qommon.misc.urlopen') as urlopen:
2499
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
2500 2500
        data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
2501 2501
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
2502 2502
        resp = get_app(pub).get('/test/')
......
4948 4948
        data_source=ds, display_disabled_items=True)]
4949 4949
    formdef.store()
4950 4950

  
4951
    with mock.patch('qommon.misc.urlopen') as urlopen:
4951
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
4952 4952
        data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
4953 4953
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
4954 4954
        resp = get_app(pub).get('/test/')
......
4961 4961

  
4962 4962
    formdef.data_class().wipe()
4963 4963

  
4964
    with mock.patch('qommon.misc.urlopen') as urlopen:
4964
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
4965 4965
        data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
4966 4966
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
4967 4967
        resp = get_app(pub).get('/test/')
......
4986 4986
        display_disabled_items=False)]
4987 4987
    formdef.store()
4988 4988

  
4989
    with mock.patch('qommon.misc.urlopen') as urlopen:
4989
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
4990 4990
        data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
4991 4991
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
4992 4992
        resp = get_app(pub).get('/test/')
......
5003 5003
        data_source=ds, display_mode='radio', display_disabled_items=True)]
5004 5004
    formdef.store()
5005 5005

  
5006
    with mock.patch('qommon.misc.urlopen') as urlopen:
5006
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5007 5007
        data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
5008 5008
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5009 5009
        resp = get_app(pub).get('/test/')
......
5016 5016

  
5017 5017
    formdef.data_class().wipe()
5018 5018

  
5019
    with mock.patch('qommon.misc.urlopen') as urlopen:
5019
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5020 5020
        data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
5021 5021
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5022 5022
        resp = get_app(pub).get('/test/')
......
5045 5045
        data_source=ds, display_disabled_items=True)]
5046 5046
    formdef.store()
5047 5047

  
5048
    with mock.patch('qommon.misc.urlopen') as urlopen:
5048
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5049 5049
        data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
5050 5050
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5051 5051
        resp = get_app(pub).get('/test/')
......
5058 5058

  
5059 5059
    formdef.data_class().wipe()
5060 5060

  
5061
    with mock.patch('qommon.misc.urlopen') as urlopen:
5061
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5062 5062
        data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
5063 5063
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5064 5064
        resp = get_app(pub).get('/test/')
......
5075 5075
        data_source=ds, display_disabled_items=False)]
5076 5076
    formdef.store()
5077 5077

  
5078
    with mock.patch('qommon.misc.urlopen') as urlopen:
5078
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5079 5079
        data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
5080 5080
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5081 5081
        resp = get_app(pub).get('/test/')
......
5104 5104
    ]
5105 5105
    formdef.store()
5106 5106

  
5107
    with mock.patch('qommon.misc.urlopen') as urlopen:
5107
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5108 5108
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
5109 5109
                         {'id': '2', 'text': 'world', 'extra': 'bar'}]}
5110 5110
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
......
5121 5121
    # check hint is displayed within
5122 5122
    formdef.fields[0].hint = 'help text'
5123 5123
    formdef.store()
5124
    with mock.patch('qommon.misc.urlopen') as urlopen:
5124
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5125 5125
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
5126 5126
                         {'id': '2', 'text': 'world', 'extra': 'bar'}]}
5127 5127
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
......
5141 5141
    formdef.data_class().wipe()
5142 5142

  
5143 5143
    app = get_app(pub)
5144
    with mock.patch('qommon.misc.urlopen') as urlopen:
5144
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5145 5145
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
5146 5146
                         {'id': '2', 'text': 'world', 'extra': 'bar'}]}
5147 5147
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
......
5150 5150
        pq = resp.pyquery.remove_namespaces()
5151 5151
        select2_url = pq('select').attr['data-select2-url']
5152 5152

  
5153
    with mock.patch('qommon.misc.urlopen') as urlopen:
5153
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5154 5154
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
5155 5155
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5156 5156
        resp2 = app.get(select2_url + '?q=hell')
......
5166 5166
    resp.form['f0'].force_value('1')
5167 5167
    resp.form.fields['f0_display'].force_value('hello')
5168 5168

  
5169
    with mock.patch('qommon.misc.urlopen') as urlopen:
5169
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5170 5170
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
5171 5171
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5172 5172
        resp = resp.form.submit('submit') # -> validation page
......
5175 5175
        assert resp.form['f0'].value == '1'
5176 5176
        assert resp.form['f0_label'].value == 'hello'
5177 5177

  
5178
    with mock.patch('qommon.misc.urlopen') as urlopen:
5178
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5179 5179
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
5180 5180
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5181 5181
        resp = resp.form.submit('submit') # -> submit
......
5193 5193
''')
5194 5194

  
5195 5195
    app = get_app(pub)
5196
    with mock.patch('qommon.misc.urlopen') as urlopen:
5196
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5197 5197
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
5198 5198
                         {'id': '2', 'text': 'world', 'extra': 'bar'}]}
5199 5199
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
......
5202 5202
        pq = resp.pyquery.remove_namespaces()
5203 5203
        select2_url = pq('select').attr['data-select2-url']
5204 5204

  
5205
    with mock.patch('qommon.misc.urlopen') as urlopen:
5205
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5206 5206
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
5207 5207
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5208 5208
        resp2 = app.get(select2_url + '?q=hell')
......
5215 5215
    resp.form['f0'].force_value('1')
5216 5216
    resp.form.fields['f0_display'].force_value('hello')
5217 5217

  
5218
    with mock.patch('qommon.misc.urlopen') as urlopen:
5218
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5219 5219
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
5220 5220
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5221 5221
        resp = resp.form.submit('submit') # -> validation page
......
5224 5224
        assert resp.form['f0'].value == '1'
5225 5225
        assert resp.form['f0_label'].value == 'hello'
5226 5226

  
5227
    with mock.patch('qommon.misc.urlopen') as urlopen:
5227
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5228 5228
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
5229 5229
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
5230 5230
        resp = resp.form.submit('submit') # -> submit
......
5240 5240
    formdef.store()
5241 5241

  
5242 5242
    app = get_app(pub)
5243
    with mock.patch('qommon.misc.urlopen') as urlopen:
5243
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5244 5244
        data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
5245 5245
                         {'id': '2', 'text': 'world', 'extra': 'bar'}]}
5246 5246
        urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
......
5274 5274
    formdef.store()
5275 5275

  
5276 5276
    app = get_app(pub)
5277
    with mock.patch('qommon.misc.urlopen') as urlopen:
5277
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5278 5278
        resp = app.get('/test/')
5279 5279
        assert urlopen.call_count == 0
5280 5280
        pq = resp.pyquery.remove_namespaces()
......
5287 5287
    resp.form['f0'].force_value('1')
5288 5288
    resp.form['f0_display'].force_value('hello')
5289 5289

  
5290
    with mock.patch('qommon.misc.urlopen') as urlopen:
5290
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5291 5291
        resp = resp.form.submit('submit') # -> validation page
5292 5292
        assert urlopen.call_count == 0
5293 5293
        assert resp.form['f0'].value == '1'
5294 5294
        assert resp.form['f0_label'].value == 'hello'
5295 5295

  
5296
    with mock.patch('qommon.misc.urlopen') as urlopen:
5296
    with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
5297 5297
        resp = resp.form.submit('submit') # -> submit
5298 5298
        assert urlopen.call_count == 0
5299 5299
        assert formdef.data_class().select()[0].data['0'] == '1'
tests/test_formdata.py
7 7

  
8 8
from quixote import cleanup
9 9
from quixote.http_request import Upload
10
from qommon.template import Template
11
from qommon.form import PicklableUpload
10
from wcs.qommon.template import Template
11
from wcs.qommon.form import PicklableUpload
12 12
from wcs.qommon.http_request import HTTPRequest
13 13
from wcs import fields, formdef
14 14
from wcs.categories import Category
tests/test_formdef_import.py
13 13
from wcs.formdef import FormDef, fields, FormdefImportError
14 14
from wcs.workflows import Workflow
15 15
from wcs.roles import Role
16
from qommon.misc import indent_xml as indent
16
from wcs.qommon.misc import indent_xml as indent
17 17

  
18 18
from utilities import create_temporary_pub
19 19

  
tests/test_publisher.py
182 182

  
183 183
    # simulate another locked cron
184 184
    import tempfile
185
    from qommon.vendor import locket
185
    from wcs.qommon.vendor import locket
186 186
    lockfile = os.path.join(tempfile.gettempdir(), 'wcs-cron-in-progress.lock')
187 187
    with locket.lock_file(lockfile, timeout=0):
188 188
        with mock.patch('wcs.qommon.management.commands.cron.cron_worker') as cron_worker:
tests/test_role.py
4 4

  
5 5
from utilities import create_temporary_pub, clean_temporary_pub
6 6

  
7
from qommon.storage import StorableObject
7
from wcs.qommon.storage import StorableObject
8 8
from wcs.roles import Role, get_user_roles
9 9

  
10 10
def setup_module(module):
tests/test_templates.py
6 6

  
7 7
from django.test import override_settings
8 8
from quixote import cleanup
9
from qommon.substitution import CompatibilityNamesDict
10
from qommon.template import Template, TemplateError
9
from wcs.qommon.substitution import CompatibilityNamesDict
10
from wcs.qommon.template import Template, TemplateError
11 11
from wcs.conditions import Condition
12 12
from wcs.variables import LazyFormData
13 13

  
tests/test_workflow_import.py
21 21
from wcs.roles import Role
22 22
from wcs.fields import StringField
23 23

  
24
from qommon.misc import indent_xml as indent
24
from wcs.qommon.misc import indent_xml as indent
25 25

  
26 26
from utilities import create_temporary_pub, clean_temporary_pub
27 27

  
tests/test_workflows.py
13 13
from django.utils.six import StringIO
14 14

  
15 15
from quixote import cleanup, get_response
16
from qommon.errors import ConnectionError
16
from wcs.qommon.errors import ConnectionError
17 17
from quixote.http_request import Upload as QuixoteUpload
18 18
from wcs.qommon.http_request import HTTPRequest
19
from qommon.form import *
19
from wcs.qommon.form import *
20 20

  
21 21
from wcs.formdef import FormDef
22 22
from wcs import sessions
......
2221 2221
    item.body = 'my message'
2222 2222
    with mock.patch('wcs.wscalls.get_secret_and_orig') as mocked_secret_and_orig:
2223 2223
        mocked_secret_and_orig.return_value = ('secret', 'localhost')
2224
        with mock.patch('qommon.misc._http_request') as mocked_http_post:
2224
        with mock.patch('wcs.qommon.misc._http_request') as mocked_http_post:
2225 2225
            mocked_http_post.return_value = ('response', '200', 'data', 'headers')
2226 2226
            item.perform(formdata)
2227 2227
            url = mocked_http_post.call_args[0][0]
tests/utilities.py
25 25
from wcs.tracking_code import TrackingCode
26 26
import wcs.qommon.emails
27 27
import wcs.qommon.sms
28
import qommon.sms
29
from qommon.errors import ConnectionError
28
from wcs.qommon.errors import ConnectionError
30 29

  
31 30
import wcs.middleware
32 31

  
......
264 263

  
265 264
    def __enter__(self):
266 265
        self.wcs_create_smtp_server = sys.modules['wcs.qommon.emails'].create_smtp_server
267
        self.qommon_create_smtp_server = sys.modules['qommon.emails'].create_smtp_server
268

  
269 266
        sys.modules['wcs.qommon.emails'].create_smtp_server = self.create_smtp_server
270
        sys.modules['qommon.emails'].create_smtp_server = self.create_smtp_server
271

  
272 267
        self.emails = {}
273 268
        return self
274 269

  
275 270
    def __exit__(self, exc_type, exc_value, tb):
276 271
        del self.emails
277 272
        sys.modules['wcs.qommon.emails'].create_smtp_server = self.wcs_create_smtp_server
278
        sys.modules['qommon.emails'].create_smtp_server = self.qommon_create_smtp_server
279 273

  
280 274

  
281 275
class MockSubstitutionVariables(object):
......
290 284

  
291 285
    def __enter__(self):
292 286
        import wcs.qommon.misc
293
        import qommon.misc
294

  
295 287
        self.wcs_qommon_misc_http_request = wcs.qommon.misc._http_request
296
        self.qommon_misc_http_request = qommon.misc._http_request
297

  
298 288
        wcs.qommon.misc._http_request = self.http_request
299
        qommon.misc._http_request = self.http_request
300 289
        return self
301 290

  
302 291
    def __exit__(self, exc_type, exc_value, tb):
303 292
        import wcs.qommon.misc
304
        import qommon.misc
305

  
306 293
        wcs.qommon.misc._http_request = self.wcs_qommon_misc_http_request
307
        qommon.misc._http_request = self.qommon_misc_http_request
308

  
309 294
        del self.wcs_qommon_misc_http_request
310
        del self.qommon_misc_http_request
311 295

  
312 296
    def http_request(self, url, method='GET', body=None, headers={},
313 297
            cert_file=None, timeout=None, raise_on_http_errors=False):
......
397 381
    def __enter__(self):
398 382
        self.sms = []
399 383
        self.wcs_get_sms_class = wcs.qommon.sms.SMS.get_sms_class
400
        self.qommon_get_sms_class = qommon.sms.SMS.get_sms_class
401 384
        wcs.qommon.sms.SMS.get_sms_class = self.get_sms_class
402
        qommon.sms.SMS.get_sms_class = self.get_sms_class
403 385
        return self
404 386

  
405 387
    def __exit__(self, exc_type, exc_value, tb):
406 388
        del self.sms
407 389
        wcs.qommon.sms.SMS.get_sms_class = self.wcs_get_sms_class
408
        qommon.sms.SMS.get_sms_class = self.qommon_get_sms_class
wcs/__init__.py
18 18
import os
19 19
sys.path.insert(0, os.path.dirname(__file__))
20 20

  
21
import monkeypatch
22

  
23
import qommon
24
sys.modules['qommon'] = sys.modules['wcs.qommon']
25

  
26
import qommon.form
27
sys.modules['form'] = qommon.form
28

  
29
import compat
21
from . import monkeypatch
22
from . import compat
wcs/admin/__init__.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from root import RootDirectory
17
from .root import RootDirectory
wcs/admin/bounces.py
21 21
from quixote.directory import Directory
22 22
from quixote.html import htmltext, TemplateIO
23 23

  
24
from qommon import _
25
from qommon import errors
26
from qommon import misc
27
from qommon.bounces import Bounce
28
from qommon.backoffice.menu import html_top
29
from qommon.admin.menu import command_icon
30

  
31
from qommon.form import *
32
from qommon.misc import get_cfg
24
from ..qommon import _
25
from ..qommon import errors
26
from ..qommon import misc
27
from ..qommon.bounces import Bounce
28
from ..qommon.backoffice.menu import html_top
29
from ..qommon.admin.menu import command_icon
30

  
31
from ..qommon.form import *
32
from ..qommon.misc import get_cfg
33 33

  
34 34
def get_email_type_label(type):
35 35
    from settings import EmailsDirectory
wcs/admin/categories.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import TemplateIO, htmltext
20 20

  
21
from qommon import _
21
from ..qommon import _
22 22
from wcs.categories import Category
23
from qommon.form import *
24
from qommon.backoffice.menu import html_top
23
from ..qommon.form import *
24
from ..qommon.backoffice.menu import html_top
25 25

  
26 26
from wcs.formdef import FormDef
27 27

  
wcs/admin/data_sources.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import TemplateIO, htmltext
20 20

  
21
from qommon import _
22
from qommon import template
23
from qommon.form import *
24
from qommon.misc import json_response
25
from qommon.backoffice.menu import html_top
21
from ..qommon import _
22
from ..qommon import template
23
from ..qommon.form import *
24
from ..qommon.misc import json_response
25
from ..qommon.backoffice.menu import html_top
26 26
from wcs.data_sources import (NamedDataSource, DataSourceSelectionWidget,
27 27
        get_structured_items)
28 28
from wcs.formdef import FormDef
wcs/admin/fields.py
20 20
from quixote.directory import Directory
21 21
from quixote.html import TemplateIO, htmltext, htmlescape
22 22

  
23
from qommon import _
24
from qommon.form import *
25
from qommon import errors, misc
26
from qommon.backoffice.menu import html_top
27
from qommon.admin.menu import command_icon
23
from ..qommon import _
24
from ..qommon.form import *
25
from ..qommon import errors, misc
26
from ..qommon.backoffice.menu import html_top
27
from ..qommon.admin.menu import command_icon
28 28

  
29 29
from wcs import fields
30 30
from wcs.formdef import FormDef
wcs/admin/forms.py
28 28
from quixote.directory import Directory, AccessControlled
29 29
from quixote.html import TemplateIO, htmltext
30 30

  
31
from qommon import _
32
from qommon import misc
33
from qommon.errors import *
34
from qommon.form import *
35
from qommon.backoffice.menu import html_top
36
from qommon import get_logger
37
from qommon.misc import C_
31
from ..qommon import _
32
from ..qommon import misc
33
from ..qommon.errors import *
34
from ..qommon.form import *
35
from ..qommon.backoffice.menu import html_top
36
from ..qommon import get_logger
37
from ..qommon.misc import C_
38 38

  
39
from qommon.afterjobs import AfterJob
39
from ..qommon.afterjobs import AfterJob
40 40

  
41 41
from wcs.formdef import FormDef, FormdefImportError, FormdefImportRecoverableError
42 42
from wcs.categories import Category
......
44 44
from wcs.workflows import Workflow
45 45
from wcs.forms.root import qrcode
46 46

  
47
from fields import FieldDefPage, FieldsDirectory
47
from .fields import FieldDefPage, FieldsDirectory
48 48
from .categories import CategoriesDirectory
49 49
from .data_sources import NamedDataSourcesDirectory
50 50
from .logged_errors import LoggedErrorsDirectory
wcs/admin/logged_errors.py
19 19
from quixote import get_response, get_publisher, redirect
20 20
from quixote.directory import Directory
21 21
from quixote.html import TemplateIO, htmltext
22
from qommon import _, ngettext
23
from qommon import errors, get_cfg
24
from qommon.misc import localstrftime
22
from ..qommon import _, ngettext
23
from ..qommon import errors, get_cfg
24
from ..qommon.misc import localstrftime
25 25

  
26 26
from wcs.logged_errors import LoggedError
27 27

  
wcs/admin/roles.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import TemplateIO, htmltext
20 20

  
21
from qommon import _, get_cfg
22
from qommon import errors
23
from qommon.form import *
21
from ..qommon import _, get_cfg
22
from ..qommon import errors
23
from ..qommon.form import *
24 24

  
25
from qommon.backoffice.menu import html_top
25
from ..qommon.backoffice.menu import html_top
26 26

  
27 27
from wcs.roles import Role, get_user_roles
28 28
from wcs.formdef import FormDef
wcs/admin/settings.py
33 33
from quixote.directory import Directory
34 34
from quixote.html import TemplateIO, htmltext
35 35

  
36
from qommon import _
37
from qommon import get_cfg
38
from qommon import errors
39
from qommon import misc
40
from qommon import template
41
from qommon.form import *
42
from qommon.sms import SMS
43

  
44
from qommon.afterjobs import AfterJob
45
from qommon.backoffice.menu import html_top
46
from qommon.admin.menu import error_page
47
from qommon.admin.cfg import cfg_submit
48
from qommon.admin.emails import EmailsDirectory
36
from ..qommon import _
37
from ..qommon import get_cfg
38
from ..qommon import errors
39
from ..qommon import misc
40
from ..qommon import template
41
from ..qommon.form import *
42
from ..qommon.sms import SMS
43

  
44
from ..qommon.afterjobs import AfterJob
45
from ..qommon.backoffice.menu import html_top
46
from ..qommon.admin.menu import error_page
47
from ..qommon.admin.cfg import cfg_submit
48
from ..qommon.admin.emails import EmailsDirectory
49 49
from wcs.qommon.admin.texts import TextsDirectory
50
from qommon.admin.settings import SettingsDirectory as QommonSettingsDirectory
51
from qommon.admin.logger import LoggerDirectory
52
import qommon.ident
53
import qommon.template
50
from ..qommon.admin.settings import SettingsDirectory as QommonSettingsDirectory
51
from ..qommon.admin.logger import LoggerDirectory
52
from ..qommon import ident
54 53

  
55 54
from wcs.formdef import FormDef
56 55
from wcs.carddef import CardDef
......
108 107

  
109 108
    def _q_lookup(self, component):
110 109
        get_response().breadcrumb.append( ('identification/', _('Identification')) )
111
        return qommon.ident.get_method_admin_directory(component)
110
        return ident.get_method_admin_directory(component)
112 111

  
113 112

  
114 113
class UserFieldDefPage(FieldDefPage):
......
204 203
        self.publisher.cfg['users'] = users_cfg
205 204
        self.publisher.write_cfg()
206 205
        if self.publisher.is_using_postgresql():
207
            import sql
206
            from wcs import sql
208 207
            sql.do_user_table()
209 208
            sql.do_tracking_code_table()
210 209
            sql.do_session_table()
......
371 370

  
372 371
        if path[1] in ('backoffice', 'admin') or \
373 372
                get_request().get_method() == 'POST':
374
            from qommon.template import error_page as base_error_page
373
            from ..qommon.template import error_page as base_error_page
375 374
            output = base_error_page(_("The theme preview doesn't support this."))
376 375
        else:
377 376
            output = root_directory._q_traverse(path[1:])
378 377

  
379
        from qommon.template import decorate
378
        from ..qommon.template import decorate
380 379
        if isinstance(output, template.QommonTemplateResponse):
381 380
            output = template.render(output.templates, output.context)
382 381
        theme_preview = decorate(output, response)
......
440 439
            identification_cfg = get_cfg('identification', {})
441 440
            for method in identification_cfg.get('methods', []):
442 441
                try:
443
                    method_admin = qommon.ident.get_method_admin_directory(method)
442
                    method_admin = ident.get_method_admin_directory(method)
444 443
                except AttributeError:
445 444
                    continue
446 445

  
......
637 636
            r += htmltext('<a rel="popup" href="install_theme">%s</a>') % _('Install New Theme')
638 637

  
639 638
            r += htmltext('<form action="themes" enctype="multipart/form-data" method="post">')
640
            themes = qommon.template.get_themes_dict()
639
            themes = template.get_themes_dict()
641 640
            r += htmltext('<ul class="biglist themes">')
642 641
            for theme, theme_dict in sorted(themes.items()):
643 642
                label = theme_dict.get('label')
......
670 669
            r += htmltext('</form>')
671 670
            return r.getvalue()
672 671
        else:
673
            themes = qommon.template.get_themes()
672
            themes = template.get_themes()
674 673
            if themes.has_key(str(request.form['theme'])):
675 674
                branding_cfg = get_cfg('branding', {})
676 675
                branding_cfg[str('theme')] = str(request.form['theme'])
......
683 682
        if not theme_id:
684 683
            return redirect('themes')
685 684

  
686
        theme_directory = qommon.template.get_theme_directory(theme_id)
685
        theme_directory = template.get_theme_directory(theme_id)
687 686
        if not theme_directory:
688 687
            return redirect('themes')
689 688

  
......
752 751
            get_session().message = ('error', _('Theme is missing a desc.xml file.'))
753 752
            return redirect('themes')
754 753
        desc_xml = z.read('%s/desc.xml' % theme_name)
755
        theme_dict = qommon.template.get_theme_dict(StringIO(desc_xml))
754
        theme_dict = template.get_theme_dict(StringIO(desc_xml))
756 755
        if theme_dict.get('name') != theme_name:
757 756
            get_session().message = ('error', _('desc.xml is missing a name attribute.'))
758 757
            return redirect('themes')
......
779 778
        return self.install_theme_from_file(StringIO(fp.read()))
780 779

  
781 780
    def template(self):
782
        from qommon.template import get_default_ezt_template
781
        from wcs.qommon.template import get_default_ezt_template
783 782
        default_template_ezt = get_default_ezt_template()
784 783
        branding_cfg = get_cfg('branding', {})
785 784
        template = branding_cfg.get('template', default_template_ezt)
......
811 810
        return r.getvalue()
812 811

  
813 812
    def template_submit(self, form = None):
814
        from qommon.template import DEFAULT_TEMPLATE_EZT, get_default_ezt_template
813
        from wcs.qommon.template import DEFAULT_TEMPLATE_EZT, get_default_ezt_template
815 814
        theme_default_template_ezt = get_default_ezt_template()
816 815

  
817 816
        get_publisher().reload_cfg()
wcs/admin/users.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import TemplateIO, htmltext
20 20

  
21
from qommon import _
21
from ..qommon import _
22 22
import wcs.qommon.storage as st
23
from qommon import errors
24
from qommon import misc, get_cfg
25
from qommon.backoffice.listing import pagination_links
23
from ..qommon import errors
24
from ..qommon import misc, get_cfg
25
from ..qommon.backoffice.listing import pagination_links
26 26
from wcs.roles import Role
27 27

  
28
import qommon.ident
29
from qommon.ident.idp import is_idp_managing_user_attributes, is_idp_managing_user_roles
30
from qommon.form import *
31
from qommon.admin.emails import EmailsDirectory
32
from qommon.backoffice.menu import html_top
33
from qommon.admin.menu import error_page
28
from ..qommon import ident
29
from ..qommon.ident.idp import is_idp_managing_user_attributes, is_idp_managing_user_roles
30
from ..qommon.form import *
31
from ..qommon.admin.emails import EmailsDirectory
32
from ..qommon.backoffice.menu import html_top
33
from ..qommon.admin.menu import error_page
34 34

  
35 35
class UserUI(object):
36 36
    def __init__(self, user):
......
65 65
                        'render_br': False,
66 66
                        'options': [(None, '---', None)] + [(x.id, x.name, x.id) for x in roles]})
67 67

  
68
        for klass in [x for x in qommon.ident.get_method_classes() if x.key in ident_methods]:
68
        for klass in [x for x in ident.get_method_classes() if x.key in ident_methods]:
69 69
            if klass.method_admin_widget:
70 70
                value = klass().get_value(self.user)
71 71
                form.add(klass.method_admin_widget, 'method_%s' % klass.key, required = False,
......
94 94
        self.user.store()
95 95

  
96 96
        ident_methods = get_cfg('identification', {}).get('methods', [])
97
        for klass in [x for x in qommon.ident.get_method_classes() if x.key in ident_methods]:
97
        for klass in [x for x in ident.get_method_classes() if x.key in ident_methods]:
98 98
            widget = form.get_widget('method_%s' % klass.key)
99 99
            if widget:
100 100
                klass().submit(self.user, widget)
......
229 229

  
230 230
        for method in ident_methods:
231 231
            try:
232
                actions = qommon.ident.get_method_user_directory(
232
                actions = ident.get_method_user_directory(
233 233
                                method, self.user).get_actions()
234 234
            except AttributeError:
235 235
                continue
......
283 283
            return r.getvalue()
284 284
        else:
285 285
            ident_methods = get_cfg('identification', {}).get('methods', [])
286
            for klass in [x for x in qommon.ident.get_method_classes() if x.key in ident_methods]:
286
            for klass in [x for x in ident.get_method_classes() if x.key in ident_methods]:
287 287
                if hasattr(klass, str('delete')):
288 288
                    klass().delete(self.user)
289 289
            self.user.remove_self()
......
293 293
        ident_methods = get_cfg('identification', {}).get('methods', [])
294 294
        if component in ident_methods:
295 295
            get_response().breadcrumb.append((component + '/', None))
296
            return qommon.ident.get_method_user_directory(component, self.user)
296
            return ident.get_method_user_directory(component, self.user)
297 297

  
298 298
class UsersDirectory(Directory):
299 299
    _q_exports = ['', 'new']
wcs/admin/workflows.py
27 27
from quixote.directory import Directory
28 28
from quixote.html import TemplateIO, htmltext
29 29

  
30
from qommon import _
31
from qommon import errors
32
from qommon import misc
33
from qommon.form import *
34
from qommon.backoffice.menu import html_top
35
from qommon.admin.menu import command_icon
36
from qommon import get_logger
30
from ..qommon import _
31
from ..qommon import errors
32
from ..qommon import misc
33
from ..qommon.form import *
34
from ..qommon.backoffice.menu import html_top
35
from ..qommon.admin.menu import command_icon
36
from ..qommon import get_logger
37 37

  
38 38
from wcs.workflows import *
39 39
from wcs.carddef import CardDef
wcs/admin/wscalls.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import TemplateIO, htmltext
20 20

  
21
from qommon import _
22
from qommon import errors
23
from qommon.form import *
24
from qommon.backoffice.menu import html_top
21
from ..qommon import _
22
from ..qommon import errors
23
from ..qommon.form import *
24
from ..qommon.backoffice.menu import html_top
25 25
from wcs.wscalls import NamedWsCall, WsCallRequestWidget
26 26

  
27 27
class NamedWsCallUI(object):
wcs/api.py
25 25
from django.utils.six.moves.urllib import parse as urllib
26 26
from django.http import HttpResponse, HttpResponseBadRequest
27 27

  
28
from qommon import _
29
from qommon import misc
30
from qommon.evalutils import make_datetime
31
from qommon.errors import (AccessForbiddenError, QueryError, TraversalError,
28
from .qommon import _
29
from .qommon import misc
30
from .qommon.evalutils import make_datetime
31
from .qommon.errors import (AccessForbiddenError, QueryError, TraversalError,
32 32
    UnknownNameIdAccessForbiddenError, RequestError)
33
from qommon.form import ComputedExpressionWidget, ConditionWidget
33
from .qommon.form import ComputedExpressionWidget, ConditionWidget
34 34

  
35 35
from wcs.categories import Category
36 36
from wcs.conditions import Condition, ValidationError
......
42 42
import wcs.qommon.storage as st
43 43
from wcs.api_utils import sign_url_auto_orig, is_url_signed, get_user_from_api_query_string
44 44

  
45
from backoffice.management import FormPage as BackofficeFormPage
46
from backoffice.management import ManagementDirectory
45
from .backoffice.management import FormPage as BackofficeFormPage
46
from .backoffice.management import ManagementDirectory
47 47

  
48 48
def posted_json_data_to_formdata_data(formdef, data):
49 49
    # remap fields from varname to field id
......
632 632

  
633 633
        if get_publisher().is_using_postgresql() and not get_request().form.get('full') == 'on':
634 634
            from wcs import sql
635
            from qommon.storage import Equal
635
            from .qommon.storage import Equal
636 636
            order_by = 'receipt_time'
637 637
            if get_request().form.get('sort') == 'desc':
638 638
                order_by = '-receipt_time'
wcs/api_utils.py
27 27
from django.utils.six.moves.urllib import parse as urlparse
28 28

  
29 29
from quixote import get_request, get_publisher
30
from qommon.errors import (AccessForbiddenError, UnknownNameIdAccessForbiddenError)
30
from .qommon.errors import (AccessForbiddenError, UnknownNameIdAccessForbiddenError)
31 31
import qommon.misc
32 32

  
33 33
DEFAULT_DURATION = 30
wcs/backoffice/__init__.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from root import RootDirectory
17
from .root import RootDirectory
wcs/backoffice/cards.py
21 21
from quixote import get_publisher, get_request, get_response, get_session, redirect
22 22
from quixote.html import TemplateIO, htmltext
23 23

  
24
from qommon import _, misc
25
from qommon.misc import C_
24
from ..qommon import _, misc
25
from ..qommon.misc import C_
26 26

  
27 27
from wcs.carddef import CardDef
28 28
from wcs.roles import Role
wcs/backoffice/data_management.py
17 17
from quixote import get_request, get_response, get_session, redirect
18 18
from quixote.html import TemplateIO, htmltext, htmlescape
19 19

  
20
from qommon import _
21
from qommon import errors
22
from qommon.backoffice.menu import html_top
20
from ..qommon import _
21
from ..qommon import errors
22
from ..qommon.backoffice.menu import html_top
23 23

  
24 24
from wcs.carddef import CardDef
25 25
from .management import ManagementDirectory, FormPage, FormFillPage, FormBackOfficeStatusPage
wcs/backoffice/management.py
33 33
from quixote.directory import Directory
34 34
from quixote.html import TemplateIO, htmltext, htmlescape
35 35

  
36
from qommon import _, ngettext, ezt
37
from qommon.admin.emails import EmailsDirectory
38
from qommon.admin.menu import command_icon
39
from qommon.backoffice.menu import html_top
40
from qommon.backoffice.listing import pagination_links
41
from qommon import misc, get_logger
42
from qommon.evalutils import make_datetime
43
from qommon.misc import C_, ellipsize
44
from qommon.afterjobs import AfterJob
45
from qommon import emails
46
import qommon.sms
47
from qommon import errors
48
from qommon import ods
49
from qommon.form import *
50
from qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or,
36
from ..qommon import _, ngettext, ezt
37
from ..qommon.admin.emails import EmailsDirectory
38
from ..qommon.admin.menu import command_icon
39
from ..qommon.backoffice.menu import html_top
40
from ..qommon.backoffice.listing import pagination_links
41
from ..qommon import misc, get_logger
42
from ..qommon.evalutils import make_datetime
43
from ..qommon.misc import C_, ellipsize
44
from ..qommon.afterjobs import AfterJob
45
from ..qommon import emails
46
from ..qommon import sms
47
from ..qommon import errors
48
from ..qommon import ods
49
from ..qommon.form import *
50
from ..qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or,
51 51
        Intersects, ILike, FtsMatch, Contains, Null)
52 52

  
53 53
from wcs.api_utils import get_user_from_api_query_string
......
142 142
        if get_publisher().use_sms_feature:
143 143
            sms_cfg = get_cfg('sms', {})
144 144
            mode = sms_cfg.get('mode', 'none')
145
            sms_class = qommon.sms.SMS.get_sms_class(mode)
145
            sms_class = sms.SMS.get_sms_class(mode)
146 146
            if sms_class:
147 147
                form.add(StringWidget, 'sms', title=_('SMS Number'), required=False)
148 148
                form.add(RadiobuttonsWidget, 'method',
wcs/backoffice/root.py
19 19
from quixote import get_publisher, get_request, get_response, redirect
20 20
from quixote.html import TemplateIO, htmltext
21 21

  
22
from qommon import _
23
from qommon.backoffice import BackofficeRootDirectory
24
from qommon.backoffice.menu import html_top
22
from ..qommon import _
23
from ..qommon.backoffice import BackofficeRootDirectory
24
from ..qommon.backoffice.menu import html_top
25 25

  
26
from qommon import misc, get_cfg
27
from qommon import errors
28
from qommon.form import *
26
from ..qommon import misc, get_cfg
27
from ..qommon import errors
28
from ..qommon.form import *
29 29

  
30 30
from wcs.formdef import FormDef
31 31

  
......
202 202
        return r.getvalue()
203 203

  
204 204
    def get_sidebar(self):
205
        from qommon.admin.menu import get_vc_version
205
        from ..qommon.admin.menu import get_vc_version
206 206
        r = TemplateIO(html=True)
207 207

  
208 208
        r += htmltext('<div class="bo-block">')
wcs/backoffice/studio.py
16 16

  
17 17
from quixote import get_publisher
18 18
from quixote.directory import Directory
19
from qommon import _
20
from qommon.backoffice.menu import html_top
21
from qommon import template
19
from ..qommon import _
20
from ..qommon.backoffice.menu import html_top
21
from ..qommon import template
22 22

  
23 23

  
24 24
class StudioDirectory(Directory):
wcs/backoffice/submission.py
22 22
from quixote.directory import Directory
23 23
from quixote.html import TemplateIO, htmltext
24 24

  
25
from qommon import _
26
from qommon.backoffice.menu import html_top
27
from qommon.form import *
28
from qommon import errors, misc
25
from ..qommon import _
26
from ..qommon.backoffice.menu import html_top
27
from ..qommon.form import *
28
from ..qommon import errors, misc
29 29

  
30 30
from wcs.formdata import FormData
31 31
from wcs.formdef import FormDef
wcs/carddef.py
18 18
import sys
19 19

  
20 20
from quixote import get_publisher
21
from qommon import _
21
from .qommon import _
22 22

  
23 23
from wcs.carddata import CardData
24 24
from wcs.formdef import FormDef
wcs/categories.py
17 17
from quixote import get_publisher, get_response
18 18
from quixote.html import htmltext
19 19

  
20
from qommon import _
21
from qommon.storage import StorableObject
22
from qommon.misc import simplify
23
from qommon.substitution import Substitutions
24
from qommon.xml_storage import XmlStorableObject
20
from .qommon import _
21
from .qommon.storage import StorableObject
22
from .qommon.misc import simplify
23
from .qommon.substitution import Substitutions
24
from .qommon.xml_storage import XmlStorableObject
25 25

  
26 26
class Category(XmlStorableObject):
27 27
    _names = 'categories'
wcs/conditions.py
19 19
from quixote import get_publisher
20 20
from django.template import Context, Template, TemplateSyntaxError
21 21

  
22
from qommon import _, get_logger
23
from qommon.misc import site_encode
22
from .qommon import _, get_logger
23
from .qommon.misc import site_encode
24 24

  
25 25

  
26 26
class ValidationError(ValueError):
wcs/ctl/backup.py
18 18
import time
19 19
import os
20 20

  
21
from qommon.ctl import Command, make_option
21
from ..qommon.ctl import Command, make_option
22 22

  
23 23

  
24 24
class CmdBackup(Command):
wcs/ctl/check_hobos.py
25 25
import hashlib
26 26

  
27 27
from quixote import cleanup
28
from qommon import misc
29
from qommon.ctl import Command, make_option
30
from qommon.storage import atomic_write
28
from ..qommon import misc
29
from ..qommon.ctl import Command, make_option
30
from ..qommon.storage import atomic_write
31 31

  
32 32
from wcs.admin.settings import UserFieldsFormDef
33 33
from wcs.fields import StringField, EmailField, DateField
......
299 299

  
300 300
        # initialize service provider side
301 301
        if not pub.cfg['sp'].get('publickey'):
302
            from qommon.ident.idp import MethodAdminDirectory
302
            from ..qommon.ident.idp import MethodAdminDirectory
303 303
            spconfig = pub.cfg['sp']
304 304
            spconfig['saml2_base_url'] = str(service.get('base_url')) + '/saml'
305 305
            spconfig['saml2_providerid'] = spconfig['saml2_base_url'] + '/metadata'
......
329 329
            (bfd, metadata_pathname) = tempfile.mkstemp('.metadata')
330 330
            atomic_write(metadata_pathname, s)
331 331

  
332
            from qommon.ident.idp import AdminIDPDir
332
            from ..qommon.ident.idp import AdminIDPDir
333 333
            admin_dir = AdminIDPDir()
334 334
            key_provider_id = admin_dir.submit_new_remote(
335 335
                    metadata_pathname, None, metadata_url, None)
wcs/ctl/delete_tenant.py
21 21
from datetime import datetime
22 22
from shutil import rmtree
23 23

  
24
from qommon.ctl import Command, make_option
24
from ..qommon.ctl import Command, make_option
25 25

  
26 26

  
27 27
class CmdDeleteTenant(Command):
wcs/ctl/export_settings.py
16 16

  
17 17
import os
18 18

  
19
from qommon.ctl import Command, make_option
19
from ..qommon.ctl import Command, make_option
20 20

  
21 21
class CmdExportSettings(Command):
22 22
    name = 'export_settings'
wcs/ctl/hobo_notify.py
20 20

  
21 21
from quixote import get_publisher
22 22
from wcs.roles import Role
23
from qommon.ctl import Command
24
from qommon.publisher import get_cfg
23
from ..qommon.ctl import Command
24
from ..qommon.publisher import get_cfg
25 25
from wcs.admin.settings import UserFieldsFormDef
26 26
from wcs.qommon.misc import json_encode_helper
27 27

  
wcs/ctl/management/commands/__init__.py
18 18

  
19 19
from django.core.management.base import BaseCommand, CommandError
20 20

  
21
from qommon.publisher import get_publisher_class
21
from wcs.qommon.publisher import get_publisher_class
22 22

  
23 23

  
24 24
class TenantCommand(BaseCommand):
wcs/ctl/management/commands/convert_to_sql.py
23 23
from django.core.management.base import BaseCommand
24 24
from django.core.management.base import CommandError
25 25

  
26
from qommon.publisher import get_publisher_class
26
from wcs.qommon.publisher import get_publisher_class
27 27

  
28 28
from wcs import sql
29 29
from wcs.formdef import FormDef
wcs/ctl/management/commands/runscript.py
21 21

  
22 22
from django.core.management.base import CommandError
23 23

  
24
from qommon.publisher import get_publisher_class
24
from wcs.qommon.publisher import get_publisher_class
25 25

  
26 26
from . import TenantCommand
27 27

  
wcs/ctl/process_bounce.py
21 21

  
22 22
from Bouncers import BouncerAPI
23 23

  
24
from qommon.ctl import Command
24
from ..qommon.ctl import Command
25 25

  
26 26
COMMA_SPACE = ', '
27 27

  
......
29 29
    name = 'process_bounce'
30 30

  
31 31
    def execute(self, base_options, sub_options, args):
32
        from qommon.tokens import Token
33
        from qommon.bounces import Bounce
32
        from ..qommon.tokens import Token
33
        from ..qommon.bounces import Bounce
34 34

  
35
        import publisher
35
        from .. import publisher
36 36

  
37 37
        try:
38 38
            publisher.WcsPublisher.configure(self.config)
wcs/ctl/rebuild_indexes.py
16 16

  
17 17
import os
18 18

  
19
from qommon.ctl import Command, make_option
19
from ..qommon.ctl import Command, make_option
20 20

  
21 21
def rebuild_vhost_indexes(pub, destroy=False):
22 22
    from wcs.formdef import FormDef
wcs/ctl/restore.py
18 18
import tarfile
19 19
import os
20 20

  
21
from qommon.ctl import Command, make_option
21
from ..qommon.ctl import Command, make_option
22 22

  
23 23

  
24 24
class CmdRestore(Command):
wcs/ctl/runscript.py
19 19
import warnings
20 20
import sys
21 21

  
22
from qommon.ctl import Command, make_option
22
from ..qommon.ctl import Command, make_option
23 23

  
24 24
class CmdRunScript(Command):
25 25
    '''Run a script within a given host publisher context'''
wcs/ctl/shell.py
21 21

  
22 22
import os.path
23 23

  
24
from qommon.ctl import Command, make_option
24
from ..qommon.ctl import Command, make_option
25 25

  
26 26
class CmdShell(Command):
27 27
    '''Launch a shell and initialize a publisher on a given host'''
wcs/ctl/wipe_data.py
17 17
import os
18 18
import sys
19 19

  
20
from qommon.ctl import Command, make_option
20
from ..qommon.ctl import Command, make_option
21 21

  
22 22
class CmdWipeData(Command):
23 23
    name = 'wipe-data'
wcs/data_sources.py
24 24
from quixote import get_publisher, get_request, get_session
25 25
from quixote.html import TemplateIO
26 26

  
27
from qommon import _
28
from qommon.form import *
29
from qommon.humantime import seconds2humanduration
30
from qommon.misc import get_variadic_url
31
import qommon.misc
32
from qommon import get_logger
27
from .qommon import _
28
from .qommon.form import *
29
from .qommon.humantime import seconds2humanduration
30
from .qommon.misc import get_variadic_url
31
from .qommon import misc
32
from .qommon import get_logger
33 33

  
34
from qommon.storage import StorableObject
35
from qommon.template import Template
36
from qommon.xml_storage import XmlStorableObject
34
from .qommon.storage import StorableObject
35
from .qommon.template import Template
36
from .qommon.xml_storage import XmlStorableObject
37 37

  
38
from wcs.api_utils import sign_url_auto_orig
38
from .api_utils import sign_url_auto_orig
39 39

  
40 40

  
41 41
data_source_functions = {}
......
63 63
                ('carddef:%s' % x.url_name, x.name, 'carddef:%s' % x.url_name)
64 64
                for x in CardDef.select(lightweight=True, ignore_errors=True)
65 65
                if x.digest_template])
66
            options.sort(key=lambda x: qommon.misc.simplify(x[1]))
66
            options.sort(key=lambda x: misc.simplify(x[1]))
67 67

  
68 68
        options.insert(0, (None, _('None'), None))
69 69
        options.append(('json', _('JSON URL'), 'json'))
......
124 124
        items = [x.get_data_source_structured_item()
125 125
                 for x in carddef.data_class().select()
126 126
                 if not x.is_draft()]
127
        items.sort(key=lambda x: qommon.misc.simplify(x['text']))
127
        items.sort(key=lambda x: misc.simplify(x['text']))
128 128
        return items
129 129

  
130 130
    if data_source.get('type') not in ('json', 'jsonp', 'formula'):
......
154 154
                return []
155 155
            if len(value) == 0:
156 156
                return []
157
            value = qommon.misc.json_encode_helper(value, get_publisher().site_charset)
157
            value = misc.json_encode_helper(value, get_publisher().site_charset)
158 158
            if isinstance(value[0], list) or isinstance(value[0], tuple):
159 159
                if len(value[0]) >= 3:
160 160
                    return [{'id': x[0], 'text': x[1], 'key': x[2]} for x in value]
......
196 196
        unsigned_url = url
197 197
        url = sign_url_auto_orig(url)
198 198
        try:
199
            entries = qommon.misc.json_loads(qommon.misc.urlopen(url).read())
199
            entries = misc.json_loads(misc.urlopen(url).read())
200 200
            if type(entries) is not dict:
201 201
                raise ValueError('not a json dict')
202 202
            if type(entries.get('data')) is not list:
......
216 216
                cache.set(cache_key, items, cache_duration)
217 217

  
218 218
            return items
219
        except qommon.misc.ConnectionError as e:
219
        except misc.ConnectionError as e:
220 220
            get_logger().warn('Error loading JSON data source (%s)' % str(e))
221 221
        except ValueError as e:
222 222
            get_logger().warn('Error reading JSON data source output (%s)' % str(e))
......
300 300
        super(NamedDataSource, self).store()
301 301

  
302 302
    def get_new_slug(self):
303
        new_slug = qommon.misc.simplify(self.name, space='_')
303
        new_slug = misc.simplify(self.name, space='_')
304 304
        base_new_slug = new_slug
305 305
        suffix_no = 0
306 306
        while True:
......
369 369

  
370 370
        unsigned_url = url
371 371
        url = sign_url_auto_orig(url)
372
        resp = qommon.misc.urlopen(url).read()
372
        resp = misc.urlopen(url).read()
373 373
        if hasattr(request, 'datasources_cache'):
374 374
            request.datasources_cache[unsigned_url] = resp
375 375
        return resp
......
384 384
        value = None
385 385
        if self.type == 'json' and self.id_parameter:
386 386
            resp = self.load_json(self.id_parameter, option_id)
387
            response = qommon.misc.json_loads(resp)
387
            response = misc.json_loads(resp)
388 388
            if response['data']:
389 389
                value = response['data'][0]
390 390
        else:
wcs/fields.py
33 33
from django.utils.html import urlize
34 34
from django.utils.six.moves.html_parser import HTMLParser
35 35

  
36
from qommon import _
37
from qommon import evalutils
38
from qommon.form import *
39
from qommon.misc import localstrftime, strftime, date_format, ellipsize, can_thumbnail
40
from qommon.template import Template, TemplateError
41
from qommon import get_cfg, get_logger
42

  
43
import data_sources
44
import portfolio
45
from conditions import Condition
36
from .qommon import _
37
from .qommon import evalutils
38
from .qommon.form import *
39
from .qommon.misc import localstrftime, strftime, date_format, ellipsize, can_thumbnail
40
from .qommon.template import Template, TemplateError
41
from .qommon import get_cfg, get_logger
42

  
43
from . import data_sources
44
from . import portfolio
45
from .conditions import Condition
46 46

  
47 47

  
48 48
class PrefillSelectionWidget(CompositeWidget):
wcs/formdata.py
25 25
from quixote import get_request, get_publisher, get_session
26 26
from quixote.http_request import Upload
27 27

  
28
from qommon import _
29
from qommon.storage import StorableObject, Intersects, Contains
30
import qommon.misc
31
from qommon.evalutils import make_datetime
32
from qommon.publisher import get_cfg
33
from qommon.substitution import Substitutions, invalidate_substitution_cache
34
from qommon.template import Template
28
from .qommon import _
29
from .qommon.storage import StorableObject, Intersects, Contains
30
from .qommon import misc
31
from .qommon.evalutils import make_datetime
32
from .qommon.publisher import get_cfg
33
from .qommon.substitution import Substitutions, invalidate_substitution_cache
34
from .qommon.template import Template
35 35

  
36
from roles import Role
37
from fields import FileField
36
from .roles import Role
37
from .fields import FileField
38 38

  
39 39

  
40 40
def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
......
58 58
            new_data['f%s' % field.id.replace('-', '_')] = value
59 59

  
60 60
            # also add it as 'field_' + normalized(field label)
61
            identifier_name = qommon.misc.simplify(field.label, space = '_')
61
            identifier_name = misc.simplify(field.label, space = '_')
62 62
            new_data['field_' + identifier_name] = value
63 63

  
64 64
        # and finally add it as its manually defined variable name
......
638 638
        if field.type == 'display_name':
639 639
            return self.get_display_name()
640 640
        if field.type == 'time':
641
            return qommon.misc.localstrftime(self.receipt_time)
641
            return misc.localstrftime(self.receipt_time)
642 642
        if field.type == 'last_update_time':
643
            return qommon.misc.localstrftime(self.last_update_time)
643
            return misc.localstrftime(self.last_update_time)
644 644
        if field.type == 'user-label':
645 645
            return self.get_user_label() or '-'
646 646
        if field.type == 'status':
......
685 685

  
686 686
        if self.id:
687 687
            d.update({
688
                'form_receipt_date': qommon.misc.strftime(qommon.misc.date_format(), self.receipt_time),
689
                'form_receipt_time': qommon.misc.strftime('%H:%M', self.receipt_time),
688
                'form_receipt_date': misc.strftime(misc.date_format(), self.receipt_time),
689
                'form_receipt_time': misc.strftime('%H:%M', self.receipt_time),
690 690
                'form_number': str(self.get_display_id()),
691 691
                'form_number_raw': '%s' % self.id,
692 692
                'form_url': self.get_url(),
......
823 823
        return d
824 824

  
825 825
    def get_substitution_variables(self, minimal=False):
826
        from qommon.substitution import CompatibilityNamesDict
826
        from .qommon.substitution import CompatibilityNamesDict
827 827
        from wcs.variables import LazyFormData
828 828
        from wcs.workflows import AttachmentsSubstitutionProxy
829 829
        variables = CompatibilityNamesDict({
......
1080 1080
    def export_to_json(self, include_files=True, anonymise=False):
1081 1081
        data = self.get_json_export_dict(include_files=include_files, anonymise=anonymise)
1082 1082
        return json.dumps(data,
1083
                cls=qommon.misc.JSONEncoder,
1083
                cls=misc.JSONEncoder,
1084 1084
                encoding=get_publisher().site_charset)
1085 1085

  
1086 1086
    def mark_as_being_visited(self):
wcs/formdef.py
27 27
from quixote import get_request, get_publisher
28 28
from quixote.http_request import Upload
29 29

  
30
from qommon import _
31
from qommon.storage import StorableObject, fix_key
32
from qommon.cron import CronJob
33
from qommon.form import *
34
from qommon.misc import simplify, get_as_datetime
35
from qommon import get_cfg
36
from qommon.substitution import Substitutions
37
from qommon.publisher import get_publisher_class
38

  
39
from formdata import FormData
40
from roles import Role, logged_users_role
41
from categories import Category
42
import fields
43
import data_sources
30
from .qommon import _
31
from .qommon.storage import StorableObject, fix_key
32
from .qommon.cron import CronJob
33
from .qommon.form import *
34
from .qommon.misc import simplify, get_as_datetime
35
from .qommon import get_cfg
36
from .qommon.substitution import Substitutions
37
from .qommon.publisher import get_publisher_class
38

  
39
from .formdata import FormData
40
from .roles import Role, logged_users_role
41
from .categories import Category
42
from . import fields
43
from . import data_sources
44 44

  
45 45

  
46 46
class FormdefImportError(Exception):
......
1252 1252
        return d
1253 1253

  
1254 1254
    def get_substitution_variables(self, minimal=False):
1255
        from qommon.substitution import CompatibilityNamesDict
1255
        from .qommon.substitution import CompatibilityNamesDict
1256 1256
        from wcs.variables import LazyFormDef
1257 1257
        return CompatibilityNamesDict({'form': LazyFormDef(self)})
1258 1258

  
......
1462 1462
        return pickle.dumps(object, protocol=2) + pickle.dumps(object.fields, protocol=2)
1463 1463

  
1464 1464

  
1465
from qommon.admin.emails import EmailsDirectory
1465
from .qommon.admin.emails import EmailsDirectory
1466 1466

  
1467 1467
EmailsDirectory.register('new_user', N_('Notification of creation to user'),
1468 1468
        enabled=False,
wcs/forms/actions.py
17 17
from quixote import redirect
18 18
from quixote.directory import Directory
19 19

  
20
from qommon import errors
21
from qommon import misc
22
from qommon import template
23
from qommon import tokens
24
from qommon.form import Form
20
from ..qommon import errors
21
from ..qommon import misc
22
from ..qommon import template
23
from ..qommon import tokens
24
from ..qommon.form import Form
25 25

  
26 26
from wcs.formdef import FormDef
27 27
from wcs.forms.common import FormTemplateMixin
wcs/forms/backoffice.py
19 19
from quixote import get_request, get_publisher, redirect
20 20
from quixote.html import htmltext, TemplateIO
21 21

  
22
from qommon import _
23
from qommon import misc
24
from qommon.form import *
25
from qommon.backoffice.listing import pagination_links
22
from ..qommon import _
23
from ..qommon import misc
24
from ..qommon.form import *
25
from ..qommon.backoffice.listing import pagination_links
26 26
from wcs.roles import logged_users_role
27 27

  
28 28
class FormDefUI(object):
wcs/forms/common.py
26 26
from wcs.fields import WidgetField, FileField
27 27
from wcs.workflows import EditableWorkflowStatusItem
28 28

  
29
from qommon import _
30
from qommon import misc
31
from qommon import template
32
from qommon import get_logger
33
from qommon.form import *
29
from ..qommon import _
30
from ..qommon import misc
31
from ..qommon import template
32
from ..qommon import get_logger
33
from ..qommon.form import *
34 34

  
35 35
from wcs.qommon.admin.texts import TextsDirectory
36 36

  
37
from qommon import errors
37
from ..qommon import errors
38 38

  
39 39

  
40 40
class FileDirectory(Directory):
wcs/forms/preview.py
17 17
from quixote import get_publisher
18 18
from quixote.directory import Directory, AccessControlled
19 19
from quixote.html import htmltext, TemplateIO
20
from qommon import errors, _
20
from ..qommon import errors, _
21 21

  
22 22
from .root import FormPage
23 23

  
wcs/forms/root.py
38 38
from quixote.form.widget import *
39 39
from quixote.html import TemplateIO, htmltext
40 40

  
41
from qommon import _
42
from qommon.admin.emails import EmailsDirectory
43
from qommon import errors, get_cfg
44
from qommon import misc, get_logger
45
from qommon import template
46
from qommon.form import *
47
from qommon.logger import BotFilter
48
from qommon import emails
41
from ..qommon import _
42
from ..qommon.admin.emails import EmailsDirectory
43
from ..qommon import errors, get_cfg
44
from ..qommon import misc, get_logger
45
from ..qommon import template
46
from ..qommon.form import *
47
from ..qommon.logger import BotFilter
48
from ..qommon import emails
49 49

  
50 50
from wcs import data_sources
51 51
from wcs.categories import Category
wcs/forms/workflows.py
19 19
from quixote import get_request, get_response
20 20
from quixote.directory import Directory
21 21

  
22
from qommon import errors
22
from ..qommon import errors
23 23

  
24 24
from wcs.api import get_user_from_api_query_string, is_url_signed
25 25
from wcs.roles import logged_users_role
wcs/logged_errors.py
16 16

  
17 17
import datetime
18 18

  
19
from qommon.misc import simplify
20
from qommon.xml_storage import XmlStorableObject
19
from .qommon.misc import simplify
20
from .qommon.xml_storage import XmlStorableObject
21 21
from wcs.formdef import FormDef
22 22
from wcs.workflows import Workflow
23 23

  
wcs/myspace.py
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
from quixote import get_request, redirect
18
import qommon.myspace
18
from .qommon import myspace
19 19

  
20
class MyspaceDirectory(qommon.myspace.MyspaceDirectory):
20
class MyspaceDirectory(myspace.MyspaceDirectory):
21 21
    _q_exports = ['', 'profile', 'new', 'password', 'remove', 'drafts', 'forms']
22 22

  
23 23
    def drafts(self):
wcs/portfolio.py
17 17
import json
18 18
import hashlib
19 19
import urllib
20
import urlparse
21 20
import base64
22 21

  
23
from qommon import get_logger
24
from qommon.misc import http_get_page, json_loads, http_post_request, urlopen
25
import qommon.form
22
from django.utils.six.moves.urllib import parse as urlparse
23

  
24
from .qommon import get_logger
25
from .qommon.misc import http_get_page, json_loads, http_post_request, urlopen
26 26
from quixote import get_publisher, get_request, get_response, redirect, get_session
27 27
from quixote.directory import Directory
28 28
from quixote.html import TemplateIO, htmltext
......
131 131
            scheme, netloc, path, qs, frag = urlparse.urlsplit(url)
132 132
            path = map(None, path.split('/'))
133 133
            name = urllib.unquote(path[-1])
134
            download = qommon.form.PicklableUpload(name, content_type='application/pdf')
134
            from .qommon.form import PicklableUpload
135
            download = PicklableUpload(name, content_type='application/pdf')
135 136
            download.__setstate__({
136 137
                'data': document,
137 138
            })
wcs/publisher.py
29 29
except ImportError:
30 30
    pass
31 31

  
32
from qommon.publisher import set_publisher_class, QommonPublisher
32
from .qommon.publisher import set_publisher_class, QommonPublisher
33 33

  
34 34
# this is terribly ugly but import RootDirectory will import a bunch of things,
35 35
# and some of them need a publisher to be set
......
38 38
set_publisher_class(StubWcsPublisher)
39 39

  
40 40

  
41
from root import RootDirectory
42
from backoffice import RootDirectory as BackofficeRootDirectory
43
from admin import RootDirectory as AdminRootDirectory
44
import sessions
45
from qommon.cron import CronJob
41
from .root import RootDirectory
42
from .backoffice import RootDirectory as BackofficeRootDirectory
43
from .admin import RootDirectory as AdminRootDirectory
44
from . import sessions
45
from .qommon.cron import CronJob
46 46

  
47
from users import User
48
from tracking_code import TrackingCode
49
from logged_errors import LoggedError
47
from .users import User
48
from .tracking_code import TrackingCode
49
from .logged_errors import LoggedError
50 50

  
51 51
import pickle
52 52

  
53 53
class UnpicklerClass(pickle.Unpickler):
54 54
    def find_class(self, module, name):
55
        if module == 'wcs.form':
56
            module = 'qommon.form'
55
        if module == 'qommon.form':
56
            module = 'wcs.qommon.form'
57 57
        __import__(module)
58 58
        mod = sys.modules[module]
59 59
        klass = getattr(mod, name)
wcs/qommon/__init__.py
40 40
        return message
41 41
    return unicode(pub.ngettext(*args), 'utf-8').encode(pub.site_charset)
42 42

  
43
from publisher import get_cfg, get_logger, get_publisher_class
44
import publisher
43
from .publisher import get_cfg, get_logger, get_publisher_class
44
from . import publisher
45 45
publisher._ = _
46 46

  
47 47

  
wcs/qommon/admin/cfg.py
16 16

  
17 17
from quixote import get_publisher
18 18

  
19
from qommon import get_cfg
19
from .. import get_cfg
20 20

  
21 21
def cfg_submit(form, cfg_key, fields):
22 22
    get_publisher().reload_cfg()
wcs/qommon/admin/emails.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import htmltext, TemplateIO
20 20

  
21
from qommon import _
22
from qommon.form import *
23
from qommon import misc, get_cfg
24
from qommon.backoffice.menu import html_top
25
from qommon.admin.cfg import cfg_submit
21
from .. import _
22
from ..form import *
23
from .. import misc, get_cfg
24
from ..backoffice.menu import html_top
25
from ..admin.cfg import cfg_submit
26 26

  
27 27
class EmailsDirectory(Directory):
28 28
    emails_dict = {}
wcs/qommon/admin/logger.py
21 21
from quixote.html import htmltext, TemplateIO
22 22
from quixote.directory import Directory
23 23

  
24
from qommon import _
25
from qommon import logger, errors
26
from qommon.backoffice.menu import html_top
27
from qommon.admin.menu import error_page
24
from .. import _
25
from .. import logger, errors
26
from ..backoffice.menu import html_top
27
from ..admin.menu import error_page
28 28

  
29 29
class ByUserDirectory(Directory):
30 30
    def _q_lookup(self, component):
wcs/qommon/admin/menu.py
17 17
from quixote import get_publisher, get_request
18 18
from quixote.html import TemplateIO, htmltext
19 19

  
20
from qommon import _
21
from qommon.backoffice.menu import html_top
20
from .. import _
21
from ..backoffice.menu import html_top
22 22
import re
23 23

  
24 24
def _find_vc_version():
wcs/qommon/admin/settings.py
18 18
from quixote.directory import Directory, AccessControlled
19 19
from quixote.html import TemplateIO, htmltext
20 20

  
21
from qommon import _
22
from qommon.form import *
23
from qommon.admin.cfg import cfg_submit
24
from qommon.backoffice.menu import html_top
21
from .. import _
22
from ..form import *
23
from ..admin.cfg import cfg_submit
24
from ..backoffice.menu import html_top
25 25

  
26 26
class SettingsDirectory(AccessControlled, Directory):
27 27
    def _q_access(self):
wcs/qommon/admin/texts.py
20 20
from quixote.html import TemplateIO, htmltext
21 21
from quixote.directory import Directory
22 22

  
23
from qommon import _
24
from qommon.form import *
25
from qommon import misc, get_cfg, ezt
26
from qommon.backoffice.menu import html_top
27
from qommon.template import Template
23
from wcs.qommon import _
24
from wcs.qommon.form import *
25
from wcs.qommon import misc, get_cfg, ezt
26
from wcs.qommon.backoffice.menu import html_top
27
from wcs.qommon.template import Template
28 28

  
29 29

  
30 30
class TextsDirectory(Directory):
wcs/qommon/afterjobs.py
17 17
from quixote.directory import Directory
18 18
from quixote import get_response
19 19

  
20
import errors
21
from http_response import AfterJob
22
from qommon import _
20
from . import errors
21
from .http_response import AfterJob
22
from . import _
23 23

  
24 24
class AfterJobStatusDirectory(Directory):
25 25
    def _q_lookup(self, component):
wcs/qommon/backoffice/__init__.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from root import BackofficeRootDirectory
17
from .root import BackofficeRootDirectory
wcs/qommon/backoffice/listing.py
19 19
from quixote.html import htmltext, TemplateIO
20 20
from quixote import get_request, get_response
21 21

  
22
from qommon import _
22
from .. import _
23 23

  
24 24
def pagination_links(offset, limit, total_count):
25 25
    get_response().add_javascript(['jquery.js', 'wcs.listing.js'])
wcs/qommon/backoffice/menu.py
17 17
from quixote import get_response, get_request, get_publisher, get_session
18 18
from quixote.html import htmltext, TemplateIO
19 19

  
20
from qommon import get_cfg
21
from qommon import _
20
from .. import get_cfg
21
from .. import _
22 22

  
23 23
def generate_header_menu(selected = None):
24 24
    return get_publisher().get_backoffice_root().generate_header_menu(selected=selected)
wcs/qommon/backoffice/root.py
17 17
from quixote.directory import Directory, AccessControlled
18 18
from quixote import get_publisher, get_request, get_response
19 19

  
20
from qommon import _
21
from qommon import errors
20
from .. import _
21
from .. import errors
22 22

  
23 23
class BackofficeRootDirectory(AccessControlled, Directory):
24 24

  
wcs/qommon/bounces.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from qommon.storage import StorableObject
17
from .storage import StorableObject
18 18

  
19 19
class Bounce(StorableObject):
20 20
    _names = 'bounces'
wcs/qommon/ctl.py
24 24
    'Command',
25 25
    ]
26 26

  
27
import qommon
28
from qommon import _
27
from wcs import qommon
28
from . import _
29 29
qommon._commands = {}
30 30

  
31 31
class Command(object):
wcs/qommon/emails.py
27 27
from email.mime.nonmultipart import MIMENonMultipart
28 28
from email.mime.text import MIMEText
29 29
from email.utils import formataddr
30
import email.Charset as Charset
31 30
import smtplib
32 31
import socket
33 32

  
......
47 46

  
48 47
from quixote import get_request, get_response, get_publisher
49 48

  
50
from publisher import get_cfg, get_logger
51
import errors
52
import tokens
53
from admin.emails import EmailsDirectory
54
from template import Template
49
from .publisher import get_cfg, get_logger
50
from . import errors
51
from . import tokens
52
from .admin.emails import EmailsDirectory
53
from .template import Template
55 54

  
56
Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8')
55
try:
56
    import email.Charset as Charset
57
    Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8')
58
except ImportError:
59
    pass
57 60

  
58 61

  
59 62
if docutils:
wcs/qommon/errors.py
21 21
from quixote.errors import *
22 22
from quixote.html import TemplateIO, htmltext
23 23

  
24
import template
24
from . import template
25 25

  
26 26

  
27 27
class AccessForbiddenError(AccessError):
......
30 30
        self.location_hint = location_hint
31 31

  
32 32
    def render(self):
33
        from qommon import _
33
        from . import _
34 34
        if self.public_msg:
35 35
            return template.error_page(self.public_msg, _('Access Forbidden'),
36 36
                    continue_to = (get_publisher().get_root_url(), _('the homepage')),
......
63 63

  
64 64
class InternalServerError(object):
65 65
    def render(self):
66
        from qommon import _
66
        from . import _
67 67
        template.html_top(_('Oops, the server borked severely'))
68 68
        r = TemplateIO(html=True)
69 69

  
......
116 116

  
117 117

  
118 118
def format_publish_error(exc):
119
    from qommon import _
119
    from . import _
120 120
    if getattr(exc, 'public_msg', None):
121 121
        return template.error_page(exc.format(), _(exc.title))
122 122
    else:
wcs/qommon/form.py
35 35
except ImportError:
36 36
    Image = None
37 37

  
38
from storage import atomic_write
38
from .storage import atomic_write
39 39

  
40 40
try:
41 41
    from feedparser import _sanitizeHTML
......
69 69
from django.utils.safestring import mark_safe
70 70

  
71 71
from .template import render as render_template, Template, TemplateError
72
from wcs.portfolio import has_portfolio
72
from ..portfolio import has_portfolio
73 73
from wcs.conditions import Condition, ValidationError
74 74

  
75
from qommon import _, ngettext
76
import misc
75
from . import _, ngettext
76
from . import misc
77 77
from .humantime import humanduration2seconds, seconds2humanduration, timewords
78 78
from .misc import strftime, C_, HAS_PDFTOPPM
79
from publisher import get_cfg
79
from .publisher import get_cfg
80 80
from .template_utils import render_block_to_string
81 81

  
82 82
QuixoteForm = Form
......
1484 1484
        if self.value:
1485 1485
            if _sanitizeHTML:
1486 1486
                self.value = _sanitizeHTML(self.value, get_request().charset, 'text/html')
1487
            elif isinstance(self.value, unicode):
1488
                self.value = self.value.encode(get_publisher().site_charset)
1487 1489
            if self.value.startswith('<br />'):
1488 1490
                self.value = self.value[6:]
1489 1491
            if self.value.endswith('<br />'):
wcs/qommon/http_request.py
23 23
import quixote.http_request
24 24
from quixote.errors import RequestError
25 25

  
26
from http_response import HTTPResponse
26
from .http_response import HTTPResponse
27 27

  
28 28
class HTTPRequest(quixote.http_request.HTTPRequest):
29 29
    signed = False
......
51 51
        if auth_header.startswith('Basic '):
52 52
            auth_header = auth_header.split(' ', 1)[1]
53 53
            username, password = base64.decodestring(auth_header).split(':', 1)
54
            from qommon.ident.password_accounts import PasswordAccount
54
            from .ident.password_accounts import PasswordAccount
55 55
            try:
56 56
                self._user = PasswordAccount.get_with_credentials(username, password)
57 57
            except KeyError:
wcs/qommon/http_response.py
24 24
import quixote.http_response
25 25
from quixote import get_publisher, get_request
26 26

  
27
from qommon.storage import StorableObject
27
from .storage import StorableObject
28 28

  
29 29
class AfterJob(StorableObject):
30 30
    _names = 'afterjobs'
......
99 99
    def get_javascript_for_header(self):
100 100
        s = ''
101 101
        if self.javascript_scripts:
102
            from qommon.admin.menu import get_vc_version
102
            from .admin.menu import get_vc_version
103 103
            version_hash = hashlib.md5(str(get_vc_version())).hexdigest()
104 104
            root_url = get_publisher().get_root_url() + get_publisher().qommon_static_dir
105 105
            s += '\n'.join(['<script type="text/javascript" src="%sjs/%s?%s"></script>' % (
......
120 120
    def get_css_includes_for_header(self):
121 121
        if not self.css_includes:
122 122
            return ''
123
        from qommon.admin.menu import get_vc_version
123
        from .admin.menu import get_vc_version
124 124
        version_hash = hashlib.md5(str(get_vc_version())).hexdigest()
125 125
        root_url = get_publisher().get_root_url() + get_publisher().qommon_static_dir
126 126
        return '\n'.join(['<link rel="stylesheet" type="text/css" href="%scss/%s?%s" />' % (
wcs/qommon/humantime.py
16 16

  
17 17
import re
18 18

  
19
from qommon import _
19
from . import _
20 20

  
21 21
_minute = 60
22 22
_hour = 60 * 60
wcs/qommon/ident/__init__.py
16 16

  
17 17
from quixote import get_publisher
18 18

  
19
import base
19
from . import base
20 20

  
21 21
def login(method):
22 22
    m = get_publisher().ident_methods.get(method)
wcs/qommon/ident/franceconnect.py
24 24
from quixote.directory import Directory
25 25
from quixote.html import htmltext, TemplateIO
26 26

  
27
from qommon import _
28
from qommon.backoffice.menu import html_top
29
from qommon import template, get_cfg, get_logger
30
from qommon.form import (Form, StringWidget, CompositeWidget, ComputedExpressionWidget,
27
from .. import _
28
from ..backoffice.menu import html_top
29
from .. import template, get_cfg, get_logger
30
from ..form import (Form, StringWidget, CompositeWidget, ComputedExpressionWidget,
31 31
                         SingleSelectWidget, WidgetListAsTable)
32
from qommon.misc import http_post_request, http_get_page, json_loads
32
from ..misc import http_post_request, http_get_page, json_loads
33 33

  
34 34
from wcs.workflows import WorkflowStatusItem
35 35
from wcs.formdata import flatten_dict
wcs/qommon/ident/idp.py
26 26
from quixote import redirect, get_session, get_response, get_publisher
27 27
from quixote.html import htmltext, TemplateIO
28 28

  
29
from qommon import _
30
from qommon import misc, get_cfg, get_logger
31
from qommon.form import *
32
from qommon.tokens import Token
29
from .. import _
30
from .. import misc, get_cfg, get_logger
31
from ..form import *
32
from ..tokens import Token
33 33

  
34
from qommon import template
35
from qommon import errors
34
from .. import template
35
from .. import errors
36 36

  
37
from qommon.backoffice.menu import html_top
38
from qommon.admin.menu import command_icon
37
from ..backoffice.menu import html_top
38
from ..admin.menu import command_icon
39 39

  
40
from base import AuthMethod
41
from qommon.storage import atomic_write
40
from .base import AuthMethod
41
from ..storage import atomic_write
42 42

  
43
import qommon.x509utils as x509utils
44
import qommon.saml2utils as saml2utils
43
from .. import x509utils
44
from .. import saml2utils
45 45

  
46 46
ADMIN_TITLE = N_('SAML2')
47 47

  
......
1024 1024
        return r.getvalue()
1025 1025

  
1026 1026
    def identities_submit(self, form):
1027
        from qommon.admin.settings import cfg_submit
1027
        from wcs.qommon.admin.settings import cfg_submit
1028 1028
        cfg_submit(form, 'saml_identities',
1029 1029
                ('grab-user-with-wsf', 'identity-creation', 'notify-on-register',
1030 1030
                 'email-confirmation', 'registration-url'))
wcs/qommon/ident/password.py
18 18
import time
19 19
import csv
20 20

  
21
from base import AuthMethod, NoSuchMethodForUserError
21
from .base import AuthMethod, NoSuchMethodForUserError
22 22

  
23 23
from quixote import redirect, get_publisher
24 24
from quixote.directory import AccessControlled, Directory
25 25
from quixote.html import TemplateIO, htmltext
26 26

  
27
from qommon import _, ngettext
28
from qommon.form import *
27
from .. import _, ngettext
28
from ..form import *
29 29

  
30
from qommon.publisher import get_publisher_class
31
from qommon import misc, get_cfg, get_logger
32
from qommon import emails
33
from qommon import template
34
from qommon import tokens
35
from qommon import errors
30
from ..publisher import get_publisher_class
31
from .. import misc, get_cfg, get_logger
32
from .. import emails
33
from .. import template
34
from .. import tokens
35
from .. import errors
36 36

  
37
from qommon.admin.menu import command_icon
37
from ..admin.menu import command_icon
38 38

  
39
from qommon.backoffice.menu import html_top
39
from ..backoffice.menu import html_top
40 40

  
41
from qommon.admin.emails import EmailsDirectory
41
from ..admin.emails import EmailsDirectory
42 42
from wcs.qommon.admin.texts import TextsDirectory
43 43

  
44
from qommon.cron import CronJob
45
from qommon.afterjobs import AfterJob
46
import qommon.storage as st
44
from ..cron import CronJob
45
from ..afterjobs import AfterJob
46
from .. import storage as st
47 47

  
48
from password_accounts import PasswordAccount, HASHING_ALGOS
48
from .password_accounts import PasswordAccount, HASHING_ALGOS
49 49

  
50 50

  
51 51
def notify_admins_user_registered(account):
......
756 756
        return r.getvalue()
757 757

  
758 758
    def passwords_submit(self, form):
759
        from admin.settings import cfg_submit
759
        from wcs.admin.settings import cfg_submit
760 760
        cfg_submit(form, 'passwords',
761 761
                ('can_change', 'generate',
762 762
                'min_length', 'max_length',
......
806 806
        return r.getvalue()
807 807

  
808 808
    def identities_submit(self, form):
809
        from admin.settings import cfg_submit
809
        from wcs.admin.settings import cfg_submit
810 810
        cfg_submit(form, 'identities',
811 811
                ('creation', 'email-as-username', 'notify-on-register', 'email-confirmation',
812 812
                 'warn_about_unused_account_delay', 'remove_unused_account_delay'))
wcs/qommon/ident/password_accounts.py
18 18

  
19 19
from quixote import get_publisher
20 20

  
21
from qommon.storage import StorableObject
21
from ..storage import StorableObject
22 22

  
23 23
HASHING_ALGOS = {
24 24
   'sha': hashlib.sha1,
wcs/qommon/management/commands/collectstatic.py
18 18
import shutil
19 19

  
20 20
from django.core.management.base import BaseCommand
21
from qommon.publisher import get_publisher_class
21
from wcs.qommon.publisher import get_publisher_class
22 22

  
23 23
class Command(BaseCommand):
24 24
    help = "Collect static files in a single location."
wcs/qommon/management/commands/cron.py
20 20

  
21 21
from django.conf import settings
22 22
from django.core.management.base import BaseCommand, CommandError
23
from qommon.publisher import get_publisher_class
23
from wcs.qommon.publisher import get_publisher_class
24 24

  
25
from qommon.vendor import locket
26
from qommon.cron import cron_worker
25
from wcs.qommon.vendor import locket
26
from wcs.qommon.cron import cron_worker
27 27
from wcs.wf.jump import JUMP_TIMEOUT_INTERVAL
28 28

  
29 29

  
wcs/qommon/management/commands/migrate.py
18 18
import quixote
19 19

  
20 20
from django.core.management.base import BaseCommand
21
from qommon.publisher import get_publisher_class
21
from wcs.qommon.publisher import get_publisher_class
22 22

  
23 23
class Command(BaseCommand):
24 24
    help = 'Migrate databases'
wcs/qommon/misc.py
46 46
from quixote import get_publisher, get_response, get_request
47 47
from quixote.html import htmltext
48 48

  
49
from qommon import _
50
from qommon import get_cfg, get_logger, ezt
51
from qommon.errors import ConnectionError
52
from qommon.template import Template
49
from . import _
50
from . import get_cfg, get_logger, ezt
51
from .errors import ConnectionError
52
from .template import Template
53 53

  
54 54
from django.utils.six import StringIO
55 55

  
wcs/qommon/myspace.py
18 18
from quixote.directory import Directory
19 19
from quixote.html import htmltext, TemplateIO
20 20

  
21
from qommon import _
22
from qommon import template
23
from qommon.form import *
24
from qommon import get_cfg
25
from qommon import errors
21
from . import _
22
from . import template
23
from .form import *
24
from . import get_cfg
25
from . import errors
26 26

  
27
import qommon.ident.password
28
from qommon.ident.password_accounts import PasswordAccount
27
from .ident.password_accounts import PasswordAccount
29 28

  
30 29
from wcs.qommon.admin.texts import TextsDirectory
31 30

  
......
152 151
            return redirect('.')
153 152

  
154 153
        if form.is_submitted() and not form.has_errors():
155
            qommon.ident.password.check_password(form, 'new_password')
154
            from .qommon.ident.password import check_password
155
            check_password(form, 'new_password')
156 156
            new_password = form.get_widget('new_password').parse()
157 157
            new2_password = form.get_widget('new2_password').parse()
158 158
            if new_password != new2_password:
wcs/qommon/pages.py
20 20
from quixote.directory import Directory
21 21
from quixote.util import StaticDirectory
22 22

  
23
from qommon import errors
24
from qommon import template
23
from . import errors
24
from . import template
25 25

  
26 26
class PagesDirectory(Directory):
27 27
    _q_exports = ['']
wcs/qommon/publisher.py
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
import collections
18
from django.utils.six.moves import builtins
18 19
from django.utils.six.moves import configparser as ConfigParser
19 20
from django.utils.six.moves import cPickle
20 21
import datetime
......
32 33
import sys
33 34
import time
34 35
import traceback
35
import __builtin__
36
__builtin__.__dict__['N_'] = lambda x: x
36

  
37
builtins.__dict__['N_'] = lambda x: x
37 38

  
38 39
import linecache
39 40
import requests
......
46 47
from django.utils.translation import gettext, ngettext
47 48

  
48 49
from quixote.publish import Publisher, get_request, get_response, get_publisher, redirect
49
from http_request import HTTPRequest
50
from http_response import HTTPResponse, AfterJob
50
from .http_request import HTTPRequest
51
from .http_response import HTTPResponse, AfterJob
51 52

  
52
from cron import CronJob
53
from substitution import Substitutions, CompatibilityNamesDict
53
from .cron import CronJob
54
from .substitution import Substitutions, CompatibilityNamesDict
54 55

  
55
import errors
56
import template
56
from . import errors
57
from . import template
57 58
import logging
58 59
import logging.handlers
59
import logger
60
import storage
60
from . import logger
61
from . import storage
61 62
import urllib
62 63

  
63 64
class ImmediateRedirectException(Exception):
......
556 557
            lasso = None
557 558
        classes = []
558 559
        if lasso:
559
            import qommon.ident.idp
560
            classes.append(qommon.ident.idp.IdPAuthMethod)
561
        import qommon.ident.franceconnect
562
        classes.append(qommon.ident.franceconnect.FCAuthMethod)
563
        import qommon.ident.password
564
        classes.append(qommon.ident.password.PasswordAuthMethod)
560
            from .ident import idp
561
            classes.append(idp.IdPAuthMethod)
562
        from .ident import franceconnect
563
        classes.append(franceconnect.FCAuthMethod)
564
        from .ident import password
565
        classes.append(password.PasswordAuthMethod)
565 566
        self.ident_methods = {}
566 567
        for klass in classes:
567 568
            self.ident_methods[klass.key] = klass
......
1008 1009

  
1009 1010

  
1010 1011
def set_publisher_class(klass):
1011
    __builtin__.__dict__['__publisher_class'] = klass
1012
    builtins.__dict__['__publisher_class'] = klass
1012 1013

  
1013 1014
def get_publisher_class():
1014
    return __builtin__.__dict__.get('__publisher_class')
1015
    return builtins.__dict__.get('__publisher_class')
1015 1016

  
1016 1017

  
1017 1018
Substitutions.register('site_name', category=N_('General'), comment=N_('Site Name'))
wcs/qommon/saml2.py
31 31
from quixote.directory import Directory
32 32
from quixote import get_session, get_session_manager
33 33

  
34
import misc
35
from publisher import get_cfg, get_logger
36
from qommon import _
37
from qommon import template
38
from template import error_page
34
from . import misc
35
from .publisher import get_cfg, get_logger
36
from . import _
37
from . import template
38
from .template import error_page
39 39
from wcs.roles import Role
40 40

  
41
import errors
41
from . import errors
42 42

  
43 43

  
44 44
class SOAPException(Exception):
wcs/qommon/saml2utils.py
16 16

  
17 17
import os
18 18

  
19
import x509utils
19
from . import x509utils
20 20

  
21 21
def bool2xs(boolean):
22 22
    '''Convert a boolean value to XSchema boolean representation'''
wcs/qommon/sessions.py
28 28
from django.conf import settings
29 29
from django.core.signing import Signer, BadSignature
30 30

  
31
from qommon import misc
32
from qommon.storage import StorableObject
33
from publisher import get_cfg
31
from . import misc
32
from .storage import StorableObject
33
from .publisher import get_cfg
34 34
from quixote.publish import get_session, get_session_manager, get_request
35 35

  
36 36

  
wcs/qommon/sms.py
17 17
import re
18 18
import urllib
19 19

  
20
from qommon import errors, misc
21
from qommon import get_cfg, get_logger
22
from qommon.form import StringWidget, PasswordWidget
20
from . import errors, misc
21
from . import get_cfg, get_logger
22
from .form import StringWidget, PasswordWidget
23 23
from wcs.wscalls import call_webservice
24 24

  
25 25

  
wcs/qommon/storage.py
23 23
import shutil
24 24
import sys
25 25
import tempfile
26
try:
27
    import thread as _thread
28
except ImportError:
29
    import dummy_thread as _thread
30 26

  
31
from vendor import locket
27
from django.utils.six.moves import _thread
28

  
29
from .vendor import locket
32 30

  
33 31
from quixote import get_publisher
34 32

  
wcs/qommon/substitution.py
120 120

  
121 121
    @classmethod
122 122
    def get_substitution_html_table(cls):
123
        from qommon import _
123
        from . import _
124 124
        r = TemplateIO(html=True)
125 125
        r += htmltext('<table id="substvars">')
126 126
        r += htmltext('<thead><tr><th>%s</th><th>%s</th><th>%s</th></tr></thead>' % (
wcs/qommon/template.py
32 32
from quixote.util import StaticDirectory, StaticFile
33 33
from quixote.html import htmltext, htmlescape, TemplateIO
34 34

  
35
import errors
36
import ezt
35
from . import ezt
37 36

  
38 37

  
39 38
def get_template_from_script(filename):
......
186 185

  
187 186
def error_page(error_message, error_title = None, exception = None, continue_to = None,
188 187
            location_hint = None):
189
    from qommon import _
188
    from . import _
190 189
    if not error_title:
191 190
        error_title = _('Error')
192 191
    if exception:
......
195 194

  
196 195
    kwargs = {'title': error_title}
197 196
    if location_hint == 'backoffice':
198
        import qommon.backoffice.menu
199
        error_html_top = qommon.backoffice.menu.html_top
197
        from .backoffice.menu import html_top as error_html_top
200 198
        kwargs[str('section')]  = None
201 199
    else:
202 200
        error_html_top = html_top
......
432 430

  
433 431

  
434 432
def ezt_raises(exception, on_parse=False):
435
    from qommon import _
433
    from . import _
436 434
    parts = []
437 435
    parts.append({
438 436
            ezt.ArgCountSyntaxError: _('wrong number of arguments'),
......
472 470
                self.template = engines['django'].from_string(value)
473 471
            except DjangoTemplateSyntaxError as e:
474 472
                if raises:
475
                    from qommon import _
473
                    from . import _
476 474
                    raise TemplateError(_('syntax error in Django template: %s'), e)
477 475
                self.render = self.null_render
478 476

  
......
497 495
            rendered = self.template.render(context)
498 496
        except (DjangoTemplateSyntaxError, DjangoVariableDoesNotExist) as e:
499 497
            if self.raises:
500
                from qommon import _
498
                from . import _
501 499
                raise TemplateError(_('failure to render Django template: %s'), e)
502 500
            else:
503 501
                return self.value
wcs/qommon/tokens.py
17 17
import random
18 18
import string
19 19

  
20
from qommon.storage import StorableObject
20
from .storage import StorableObject
21 21
import time
22 22

  
23 23
class Token(StorableObject):
wcs/roles.py
16 16

  
17 17
from quixote import get_publisher
18 18

  
19
from qommon import _
20
from qommon.storage import StorableObject
21
import qommon.misc
19
from .qommon import _, misc
20
from .qommon.storage import StorableObject
22 21

  
23 22
class Role(StorableObject):
24 23
    _names = 'roles'
......
51 50
        super(Role, self).store()
52 51

  
53 52
    def get_new_slug(self):
54
        new_slug = qommon.misc.simplify(self.name)
53
        new_slug = misc.simplify(self.name)
55 54
        base_new_slug = new_slug
56 55
        suffix_no = 0
57 56
        while True:
......
126 125

  
127 126

  
128 127
def get_user_roles():
129
    t = sorted([(qommon.misc.simplify(x.name), x.id, x.name, x.id) for x in Role.select()])
128
    t = sorted([(misc.simplify(x.name), x.id, x.name, x.id) for x in Role.select()])
130 129
    return [x[1:] for x in t]
131 130

  
wcs/root.py
25 25
from quixote.html import htmltext, TemplateIO
26 26
from quixote.util import StaticDirectory
27 27

  
28
import forms.root
29
from qommon import saml2
30

  
31
from qommon import _
32
from qommon import errors
33
from qommon import get_cfg, get_logger
34
from qommon import template
35
from qommon.form import *
36
import qommon.ident
37
import qommon.pages
38

  
39
from qommon.afterjobs import AfterJobStatusDirectory
40

  
41
from categories import Category
42
from formdef import FormDef
43
from data_sources import NamedDataSource
44
from wscalls import NamedWsCall
45
from wcs.api import ApiDirectory
46
from myspace import MyspaceDirectory
47
from forms.preview import PreviewDirectory
48
from wcs.forms.actions import ActionsDirectory
49
from wcs.scripts import Script
50

  
51
from wcs import portfolio
28
from .forms import root
29
from .qommon import saml2
30

  
31
from .qommon import _
32
from .qommon import errors
33
from .qommon import get_cfg, get_logger
34
from .qommon import template
35
from .qommon.form import *
36
from .qommon import ident
37
from .qommon import pages
38

  
39
from .qommon.afterjobs import AfterJobStatusDirectory
40

  
41
from .categories import Category
42
from .formdef import FormDef
43
from .data_sources import NamedDataSource
44
from .wscalls import NamedWsCall
45
from .api import ApiDirectory
46
from .myspace import MyspaceDirectory
47
from .forms.preview import PreviewDirectory
48
from .forms.actions import ActionsDirectory
49
from .scripts import Script
50

  
51
from . import portfolio
52 52

  
53 53
class CompatibilityDirectory(Directory):
54 54
    _q_exports = ['']
......
61 61
    def _q_lookup(self, component):
62 62
        get_response().breadcrumb.append(('ident/', None))
63 63
        try:
64
            return qommon.ident.get_method_directory(component)
64
            return ident.get_method_directory(component)
65 65
        except KeyError:
66 66
            raise errors.TraversalError()
67 67

  
......
91 91
        if len(ident_methods) == 1:
92 92
            method = ident_methods[0]
93 93
            try:
94
                return qommon.ident.login(method)
94
                return ident.login(method)
95 95
            except KeyError:
96 96
                msg = 'failed to login with method %s' % method
97 97
                get_logger().error(msg)
......
100 100
            form = Form(enctype='multipart/form-data')
101 101
            form.add(RadiobuttonsWidget, 'method',
102 102
                    options = [(x.key, _(x.description)) \
103
                            for x in qommon.ident.get_method_classes() if \
103
                            for x in ident.get_method_classes() if \
104 104
                                    x.key in ident_methods],
105 105
                    delim = htmltext('<br/>'))
106 106
            form.add_submit('submit', _('Submit'))
......
115 115
                    return redirect(login_url)
116 116
                else:
117 117
                    try:
118
                        return qommon.ident.login(method)
118
                        return ident.login(method)
119 119
                    except KeyError:
120 120
                        msg = 'failed to login with method %s' % method
121 121
                        get_logger().error(msg)
......
129 129

  
130 130
    def _q_lookup(self, component):
131 131
        try:
132
            dir = qommon.ident.get_method_directory(component)
132
            dir = ident.get_method_directory(component)
133 133
            # set the register page as the index page, so the url can be
134 134
            # /login/password/ instead of /login/password/login
135 135
            dir._q_exports.append('')
......
155 155
        if len(ident_methods) == 1:
156 156
            method = ident_methods[0]
157 157
            try:
158
                return qommon.ident.register(method)
158
                return ident.register(method)
159 159
            except KeyError:
160 160
                get_logger().error('failed to register with method %s' % method)
161 161
                return errors.TraversalError()
......
163 163
            form = Form(enctype='multipart/form-data')
164 164
            form.add(RadiobuttonsWidget, 'method',
165 165
                    options = [(x.key, _(x.description)) \
166
                            for x in qommon.ident.get_method_classes() if \
166
                            for x in ident.get_method_classes() if \
167 167
                                    x.key in ident_methods],
168 168
                    delim = htmltext('<br/>'))
169 169
            form.add_submit('submit', _('Submit'))
......
181 181

  
182 182
    def _q_lookup(self, component):
183 183
        try:
184
            dir = qommon.ident.get_method_directory(component)
184
            dir = ident.get_method_directory(component)
185 185
            # set the register page as the index page, so the url can be
186 186
            # /register/password/ instead of /register/password/register
187 187
            dir._q_exports.append('')
......
246 246
    api = ApiDirectory()
247 247
    themes = template.ThemesDirectory()
248 248
    myspace = MyspaceDirectory()
249
    pages = qommon.pages.PagesDirectory()
249
    pages = pages.PagesDirectory()
250 250
    fargo = portfolio.FargoDirectory()
251 251
    static = StaticsDirectory()
252 252
    actions = ActionsDirectory()
253 253

  
254 254
    def tryauth(self):
255
        return forms.root.tryauth(get_publisher().get_root_url())
255
        return root.tryauth(get_publisher().get_root_url())
256 256

  
257 257
    def auth(self):
258
        return forms.root.auth(get_publisher().get_root_url())
258
        return root.auth(get_publisher().get_root_url())
259 259

  
260 260
    def logout(self):
261 261
        get_logger().info('logout')
......
339 339
        except errors.TraversalError:
340 340
            pass
341 341

  
342
        return forms.root.RootDirectory()._q_traverse(path)
342
        return root.RootDirectory()._q_traverse(path)
343 343

  
344 344
    def _q_lookup(self, component):
345 345
        # is this a category ?
......
352 352
            try:
353 353
                formdef = FormDef.get_by_urlname(component)
354 354
            except KeyError:
355
                return forms.root.RootDirectory(category)
355
                return root.RootDirectory(category)
356 356

  
357 357
        # or a form ?
358
        return forms.root.RootDirectory()._q_lookup(component)
358
        return root.RootDirectory()._q_lookup(component)
359 359

  
360 360
    def reload_top(self):
361 361
        get_response().filter = {}
wcs/sessions.py
18 18
import time
19 19
import uuid
20 20

  
21
import qommon.sessions
22
from qommon.sessions import Session
21
from .qommon import sessions
22
from .qommon.sessions import Session
23 23

  
24 24
class BasicSession(Session):
25 25

  
......
155 155
            return None
156 156
        return self.data_source_query_url_tokens.get(token)
157 157

  
158
qommon.sessions.BasicSession = BasicSession
159
StorageSessionManager = qommon.sessions.StorageSessionManager
158
sessions.BasicSession = BasicSession
159
StorageSessionManager = sessions.StorageSessionManager
wcs/sql.py
22 22
import cPickle
23 23

  
24 24
from quixote import get_publisher
25
import qommon
26
from qommon.storage import _take, parse_clause as parse_storage_clause
27
from qommon.substitution import invalidate_substitution_cache
28
from qommon import get_cfg
25
from . import qommon
26
from .qommon.storage import _take, parse_clause as parse_storage_clause
27
from .qommon.substitution import invalidate_substitution_cache
28
from .qommon import get_cfg
29 29

  
30 30
import wcs.categories
31 31
import wcs.carddata
......
593 593
        'anonymous', 'name_identifiers', 'verified_fields',
594 594
        'lasso_dump', 'last_seen', 'fts', 'ascii_name'])
595 595

  
596
    from admin.settings import UserFieldsFormDef
596
    from wcs.admin.settings import UserFieldsFormDef
597 597
    formdef = UserFieldsFormDef()
598 598

  
599 599
    for field in formdef.get_all_fields():
wcs/tracking_code.py
16 16

  
17 17
import random
18 18

  
19
from qommon.storage import StorableObject
19
from .qommon.storage import StorableObject
20 20

  
21
from formdef import FormDef
21
from .formdef import FormDef
22 22

  
23 23
class TrackingCode(StorableObject):
24 24
    _names = 'tracking-codes'
wcs/users.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from qommon import _
18
from qommon.misc import simplify
19
from qommon.storage import StorableObject
20
from qommon import get_cfg
17
from .qommon import _
18
from .qommon.misc import simplify
19
from .qommon.storage import StorableObject
20
from .qommon import get_cfg
21 21
import wcs.qommon.storage as st
22 22

  
23
from qommon.substitution import Substitutions, invalidate_substitution_cache
23
from .qommon.substitution import Substitutions, invalidate_substitution_cache
24 24

  
25 25
class User(StorableObject):
26 26
    _names = 'users'
wcs/variables.py
22 22

  
23 23
from pyproj import Geod
24 24

  
25
import qommon.misc
26
from qommon.evalutils import make_datetime
27
from qommon.templatetags.qommon import parse_datetime
28
from qommon.storage import (Or, Equal, NotEqual)
25
from .qommon import misc
26
from .qommon.evalutils import make_datetime
27
from .qommon.templatetags.qommon import parse_datetime
28
from .qommon.storage import (Or, Equal, NotEqual)
29 29

  
30 30

  
31 31
class LazyFormDefObjectsManager(object):
......
214 214

  
215 215
    @property
216 216
    def receipt_date(self):
217
        return qommon.misc.strftime(qommon.misc.date_format(), self._formdata.receipt_time)
217
        return misc.strftime(misc.date_format(), self._formdata.receipt_time)
218 218

  
219 219
    @property
220 220
    def receipt_time(self):
221
        return qommon.misc.strftime('%H:%M', self._formdata.receipt_time)
221
        return misc.strftime('%H:%M', self._formdata.receipt_time)
222 222

  
223 223
    @property
224 224
    def number(self):
......
334 334
                value = field.convert_value_to_str(value)
335 335
            elif value is None:
336 336
                value = ''
337
            identifier_name = qommon.misc.simplify(field.label, space='_')
337
            identifier_name = misc.simplify(field.label, space='_')
338 338
            d[identifier_name] = value
339 339

  
340 340
        return d
......
529 529

  
530 530
    def __contains__(self, value):
531 531
        if self._field.key == 'items':
532
            return qommon.misc.site_encode(value) in self._data.get(self._field.id)
532
            return misc.site_encode(value) in self._data.get(self._field.id)
533 533
        return value in self.get_value()
534 534

  
535 535
    def __unicode__(self):
wcs/wf/aggregation_email.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from qommon import _
18
from qommon.publisher import get_publisher_class
19
from qommon.storage import StorableObject
20
from qommon.form import *
21
from qommon.cron import CronJob
22
from qommon import emails
17
from ..qommon import _
18
from ..qommon.publisher import get_publisher_class
19
from ..qommon.storage import StorableObject
20
from ..qommon.form import *
21
from ..qommon.cron import CronJob
22
from ..qommon import emails
23 23

  
24 24
from wcs.workflows import WorkflowStatusItem, register_item_class, \
25 25
        get_role_translation
wcs/wf/attachment.py
17 17

  
18 18
from quixote import redirect
19 19

  
20
from qommon import _
20
from ..qommon import _
21 21
from wcs.workflows import *
22
from qommon.errors import *
22
from ..qommon.errors import *
23 23

  
24 24
from wcs.forms.common import FormStatusPage, FileDirectory
25 25
from wcs.portfolio import has_portfolio, push_document
wcs/wf/backoffice_fields.py
16 16

  
17 17
import xml.etree.ElementTree as ET
18 18

  
19
from qommon import _
20
from qommon.form import (WidgetListAsTable, CompositeWidget, SingleSelectWidget,
19
from ..qommon import _
20
from ..qommon.form import (WidgetListAsTable, CompositeWidget, SingleSelectWidget,
21 21
        ComputedExpressionWidget)
22 22
from wcs.fields import WidgetField
23 23
from wcs.workflows import (WorkflowStatusItem,
wcs/wf/criticality.py
16 16

  
17 17
from quixote import get_publisher
18 18

  
19
from qommon import _
19
from ..qommon import _
20 20
from wcs.qommon.form import SingleSelectWidget
21 21
from wcs.workflows import WorkflowStatusItem, register_item_class
22 22

  
wcs/wf/dispatch.py
17 17
import collections
18 18
import xml.etree.ElementTree as ET
19 19

  
20
from qommon import _
21
from qommon.form import *
22
from qommon.template import Template
23
from qommon import get_logger
20
from ..qommon import _
21
from ..qommon.form import *
22
from ..qommon.template import Template
23
from ..qommon import get_logger
24 24
from wcs.roles import Role, get_user_roles
25 25
from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class
26 26

  
wcs/wf/export_to_model.py
29 29
from quixote.directory import Directory
30 30
from quixote.html import htmltext
31 31

  
32
from qommon import _, ezt
33
from qommon import get_logger
34
from qommon.form import (SingleSelectWidget, WidgetList, CheckboxWidget,
32
from ..qommon import _, ezt, misc
33
from ..qommon import get_logger
34
from ..qommon.form import (SingleSelectWidget, WidgetList, CheckboxWidget,
35 35
                         StringWidget, UploadWidget, WysiwygTextWidget, Upload,
36 36
                         UploadedFile, UploadValidationError, VarnameWidget,
37 37
                         RadiobuttonsWidget, PicklableUpload, ComputedExpressionWidget)
38
from qommon.errors import PublishError
39
from qommon.template import TemplateError
40
import qommon
38
from ..qommon.errors import PublishError
39
from ..qommon.template import TemplateError
41 40

  
42 41
from wcs.fields import SubtitleField, TitleField, CommentField, PageField
43 42
from wcs.workflows import (WorkflowStatusItem, AttachmentEvolutionPart,
......
381 380
        return filename
382 381

  
383 382
    def get_directory_name(self):
384
        return qommon.misc.simplify(self.label or 'export_to_model', space='_')
383
        return misc.simplify(self.label or 'export_to_model', space='_')
385 384
    directory_name = property(get_directory_name)
386 385

  
387 386
    def apply_template_to_formdata(self, formdata):
wcs/wf/form.py
16 16

  
17 17
import xml.etree.ElementTree as ET
18 18

  
19
from qommon import _
20
from qommon.form import *
19
from ..qommon import _
20
from ..qommon.form import *
21 21

  
22 22
from wcs.workflows import WorkflowStatusItem, register_item_class
23 23
from wcs.formdef import FormDef, lax_int
wcs/wf/geolocate.py
26 26

  
27 27
from quixote import get_publisher
28 28

  
29
from qommon import _
30
from qommon import get_logger
31
from qommon.errors import ConnectionError
32
from qommon.form import RadiobuttonsWidget, ComputedExpressionWidget, CheckboxWidget
33
from qommon.misc import http_get_page, normalize_geolocation
29
from ..qommon import _
30
from ..qommon import get_logger
31
from ..qommon.errors import ConnectionError
32
from ..qommon.form import RadiobuttonsWidget, ComputedExpressionWidget, CheckboxWidget
33
from ..qommon.misc import http_get_page, normalize_geolocation
34 34
from wcs.workflows import WorkflowStatusItem, register_item_class
35 35

  
36 36
class GeolocateWorkflowStatusItem(WorkflowStatusItem):
wcs/wf/jump.py
21 21
from quixote import get_publisher, get_request, redirect
22 22

  
23 23
from quixote.directory import Directory
24
from qommon import _
25
from qommon.humantime import *
26
from qommon.form import *
27
from qommon import errors
28
from qommon.publisher import get_publisher_class
29
from qommon.cron import CronJob
24
from ..qommon import _
25
from ..qommon.humantime import *
26
from ..qommon.form import *
27
from ..qommon import errors
28
from ..qommon.publisher import get_publisher_class
29
from ..qommon.cron import CronJob
30 30

  
31 31
from wcs.workflows import Workflow, WorkflowStatusJumpItem, register_item_class
32 32
from wcs.api import get_user_from_api_query_string, is_url_signed
wcs/wf/notification.py
16 16

  
17 17
from quixote import get_publisher
18 18

  
19
from qommon import _, ezt
20
from qommon.form import *
21
from qommon.template import TemplateError
22
from qommon import get_logger
19
from ..qommon import _, ezt
20
from ..qommon.form import *
21
from ..qommon.template import TemplateError
22
from ..qommon import get_logger
23 23

  
24 24
from wcs.roles import Role
25 25
from wcs.workflows import (WorkflowStatusItem, register_item_class,
wcs/wf/profile.py
23 23

  
24 24
from quixote import get_publisher, get_response
25 25

  
26
from qommon import _
27
from qommon.form import (CompositeWidget, SingleSelectWidget,
26
from ..qommon import _
27
from ..qommon.form import (CompositeWidget, SingleSelectWidget,
28 28
        WidgetListAsTable, ComputedExpressionWidget)
29
from qommon.ident.idp import is_idp_managing_user_attributes
30
from qommon.misc import http_patch_request, JSONEncoder
31
from qommon.publisher import get_cfg, get_logger
29
from ..qommon.ident.idp import is_idp_managing_user_attributes
30
from ..qommon.misc import http_patch_request, JSONEncoder
31
from ..qommon.publisher import get_cfg, get_logger
32 32

  
33 33
from wcs.api_utils import sign_url, get_secret_and_orig, MissingSecret
34 34
from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class
wcs/wf/redirect_to_url.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from qommon import _
18
from qommon.form import ComputedExpressionWidget
17
from ..qommon import _
18
from ..qommon.form import ComputedExpressionWidget
19 19
from wcs.workflows import WorkflowStatusItem, register_item_class
20 20

  
21 21

  
wcs/wf/register_comment.py
16 16

  
17 17
import cgi
18 18

  
19
from qommon import _, ezt
20
from qommon.form import *
21
from qommon.template import TemplateError
22
from qommon import get_logger
19
from ..qommon import _, ezt
20
from ..qommon.form import *
21
from ..qommon.template import TemplateError
22
from ..qommon import get_logger
23 23

  
24 24
from wcs.workflows import (WorkflowStatusItem, register_item_class, template_on_formdata,
25 25
                           AttachmentEvolutionPart)
wcs/wf/remove.py
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17 17
from quixote import get_publisher, get_request, get_response, get_session
18
from qommon import _
18
from ..qommon import _
19 19
from wcs.workflows import WorkflowStatusItem, register_item_class
20 20

  
21 21
class RemoveWorkflowStatusItem(WorkflowStatusItem):
wcs/wf/resubmit.py
16 16

  
17 17
from quixote import get_publisher, get_request, get_session
18 18

  
19
from qommon import _
19
from ..qommon import _
20 20
from wcs.workflows import WorkflowStatusItem, register_item_class
21 21
from wcs.formdef import FormDef
22 22
from wcs.qommon.form import (WidgetList, SingleSelectWidget, StringWidget,
wcs/wf/roles.py
21 21

  
22 22
from quixote import get_request, get_publisher, get_response
23 23

  
24
from qommon import _
25
from qommon.form import *
24
from ..qommon import _
25
from ..qommon.form import *
26 26
from wcs.workflows import WorkflowStatusItem, register_item_class
27 27
from wcs.roles import get_user_roles, Role
28
from qommon.ident.idp import is_idp_managing_user_attributes
29
from qommon.misc import http_post_request, http_delete_request
30
from qommon.publisher import get_cfg, get_logger
28
from ..qommon.ident.idp import is_idp_managing_user_attributes
29
from ..qommon.misc import http_post_request, http_delete_request
30
from ..qommon.publisher import get_cfg, get_logger
31 31
from wcs.api_utils import sign_url, get_secret_and_orig, MissingSecret
32 32

  
33 33

  
wcs/wf/wscall.py
25 25

  
26 26
from quixote.html import TemplateIO, htmltext
27 27

  
28
from qommon import _
29
from qommon.errors import ConnectionError
30
from qommon.form import *
31
from qommon.misc import json_loads, site_encode
28
from ..qommon import _
29
from ..qommon.errors import ConnectionError
30
from ..qommon.form import *
31
from ..qommon.misc import json_loads, site_encode
32 32
from wcs.workflows import (WorkflowStatusItem, register_item_class,
33 33
        AbortActionException, AttachmentEvolutionPart)
34 34
from wcs.wscalls import call_webservice
wcs/workflows.py
14 14
# You should have received a copy of the GNU General Public License
15 15
# along with this program; if not, see <http://www.gnu.org/licenses/>.
16 16

  
17
from qommon import ezt
17
from .qommon import ezt
18 18
import collections
19 19
import copy
20 20
import datetime
......
29 29

  
30 30
from quixote import get_request, get_response, redirect
31 31

  
32
from qommon import _
33
from qommon.misc import C_, get_as_datetime, file_digest, get_foreground_colour
34
from qommon.storage import StorableObject, atomic_write, NotEqual, Contains, Null
35
from qommon.form import *
36
from qommon.humantime import seconds2humanduration
37
from qommon import emails, get_cfg, get_logger
32
from .qommon import _
33
from .qommon.misc import C_, get_as_datetime, file_digest, get_foreground_colour
34
from .qommon.storage import StorableObject, atomic_write, NotEqual, Contains, Null
35
from .qommon.form import *
36
from .qommon.humantime import seconds2humanduration
37
from .qommon import emails, get_cfg, get_logger
38 38
from quixote.html import htmltext
39
import qommon.errors
40
from qommon.template import Template, TemplateError
39
from .qommon import errors
40
from .qommon.template import Template, TemplateError
41 41

  
42
from wcs.conditions import Condition
43
from wcs.roles import Role, logged_users_role, get_user_roles
44
from wcs.fields import FileField
45
from wcs.formdef import FormDef
46
from wcs.formdata import Evolution
42
from .conditions import Condition
43
from .roles import Role, logged_users_role, get_user_roles
44
from .fields import FileField
45
from .formdef import FormDef
46
from .formdata import Evolution
47 47

  
48 48
if not __name__.startswith('wcs.') and not __name__ == "__main__":
49 49
    raise ImportError('Import of workflows module must be absolute (import wcs.workflows)')
......
677 677

  
678 678
    @classmethod
679 679
    def get_default_workflow(cls):
680
        from qommon.admin.emails import EmailsDirectory
680
        from .qommon.admin.emails import EmailsDirectory
681 681

  
682 682
        workflow = Workflow(name=_('Default'))
683 683
        workflow.id = '_default'
......
2667 2667
                               'sms could not be generated' % (url, str(e)))
2668 2668
            return
2669 2669

  
2670
        import qommon.sms
2670
        from .qommon import sms
2671 2671

  
2672 2672
        sms_cfg = get_cfg('sms', {})
2673 2673
        sender = sms_cfg.get('sender', 'AuQuotidien')[:11]
2674 2674
        mode = sms_cfg.get('mode', 'none')
2675 2675
        try:
2676
            qommon.sms.SMS.get_sms_class(mode).send(sender, destinations, sms_body[:160])
2677
        except qommon.errors.SMSError as e:
2676
            sms.SMS.get_sms_class(mode).send(sender, destinations, sms_body[:160])
2677
        except errors.SMSError as e:
2678 2678
            get_logger().error(e)
2679 2679

  
2680 2680
register_item_class(SendSMSWorkflowStatusItem)
......
2862 2862

  
2863 2863

  
2864 2864
def load_extra():
2865
    import wf.aggregation_email
2866
    import wf.timeout_jump
2867
    import wf.jump
2868
    import wf.attachment
2869
    import wf.remove
2870
    import wf.roles
2871
    import wf.dispatch
2872
    import wf.geolocate
2873
    import wf.wscall
2874
    import wf.form
2875
    import wf.register_comment
2876
    import wf.anonymise
2877
    import wf.export_to_model
2878
    import wf.resubmit
2879
    import wf.criticality
2880
    import wf.profile
2881
    import wf.backoffice_fields
2882
    import wf.redirect_to_url
2883
    import wf.notification
2884

  
2885
from wf.export_to_model import ExportToModel
2865
    from .wf import aggregation_email
2866
    from .wf import timeout_jump
2867
    from .wf import jump
2868
    from .wf import attachment
2869
    from .wf import remove
2870
    from .wf import roles
2871
    from .wf import dispatch
2872
    from .wf import geolocate
2873
    from .wf import wscall
2874
    from .wf import form
2875
    from .wf import register_comment
2876
    from .wf import anonymise
2877
    from .wf import export_to_model
2878
    from .wf import resubmit
2879
    from .wf import criticality
2880
    from .wf import profile
2881
    from .wf import backoffice_fields
2882
    from .wf import redirect_to_url
2883
    from .wf import notification
2884

  
2885
from .wf.export_to_model import ExportToModel
wcs/wscalls.py
24 24

  
25 25
from quixote import get_publisher, get_request
26 26

  
27
from qommon import _
28
from qommon.misc import simplify, get_variadic_url, JSONEncoder, json_loads
29
from qommon.xml_storage import XmlStorableObject
30
from qommon.form import (CompositeWidget, StringWidget, WidgetDict,
27
from .qommon import _
28
from .qommon.misc import simplify, get_variadic_url, JSONEncoder, json_loads
29
from .qommon.xml_storage import XmlStorableObject
30
from .qommon.form import (CompositeWidget, StringWidget, WidgetDict,
31 31
        ComputedExpressionWidget, RadiobuttonsWidget, CheckboxWidget)
32
import qommon.misc
33
from qommon.template import Template
32
from .qommon import misc
33
from .qommon.template import Template
34 34

  
35 35
from wcs.api_utils import sign_url, get_secret_and_orig, MissingSecret
36 36
from wcs.workflows import WorkflowStatusItem
......
109 109
            headers['Content-type'] = 'application/json'
110 110
            payload = json.dumps(payload, cls=JSONEncoder,
111 111
                    encoding=get_publisher().site_charset)
112
        response, status, data, auth_header = qommon.misc._http_request(
112
        response, status, data, auth_header = misc._http_request(
113 113
                url, method=method, body=payload, headers=headers)
114 114
    elif method == 'DELETE':
115
        response, status, data, auth_header = qommon.misc._http_request(
115
        response, status, data, auth_header = misc._http_request(
116 116
            url, method='DELETE', headers=headers)
117 117
    else:
118
        response, status, data, auth_header = qommon.misc.http_get_page(
118
        response, status, data, auth_header = misc.http_get_page(
119 119
                url, headers=headers)
120 120
        request = get_request()
121 121
        if cache is True and request and hasattr(request, 'wscalls_cache'):
122
-