misc: use relative imports (#36517)

This commit is contained in:
Frédéric Péters 2019-09-29 20:53:23 +02:00
parent f215eda29d
commit 1b1e596d1f
137 changed files with 665 additions and 692 deletions

View File

@ -18,7 +18,7 @@
import random
from quixote.html import htmltext, TemplateIO
from qommon.form import CompositeWidget, IntWidget, WidgetList, StringWidget, \
from wcs.qommon.form import CompositeWidget, IntWidget, WidgetList, StringWidget, \
CheckboxWidget, SingleSelectWidget
from wcs.fields import WidgetField, register_field_class
from pyvotecore import schulze_method, irv, ranked_pairs, schulze_pr, \

View File

@ -19,7 +19,7 @@
from quixote import get_publisher
from wcs.fields import WidgetField, register_field_class
from qommon.form import *
from wcs.qommon.form import *
class VoteAnonymityWidget(CheckboxWidget):
vote_anonymity = 'anonymous'

View File

@ -18,7 +18,7 @@
import random
from quixote.html import htmltext, TemplateIO
from qommon.form import *
from wcs.qommon.form import *
from wcs.fields import WidgetField, register_field_class
class RankedItemsWidget(CompositeWidget):

View File

@ -28,7 +28,7 @@ from quixote.http_request import Upload as QuixoteUpload
from wcs.qommon import errors, sessions
from wcs.qommon.form import UploadedFile
from qommon.ident.password_accounts import PasswordAccount
from wcs.qommon.ident.password_accounts import PasswordAccount
from wcs.qommon.http_request import HTTPRequest
from wcs.qommon.template import get_current_theme
from wcs.qommon.bounces import Bounce
@ -4501,7 +4501,7 @@ def test_settings_idp(pub):
resp = resp.forms[0].submit() # confirm delete
assert len(pub.cfg['idp']) == 0
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
idp_metadata_filename = os.path.join(os.path.dirname(__file__), 'idp_metadata.xml')
urlopen.side_effect = lambda *args: open(idp_metadata_filename)
resp = app.get('/backoffice/settings/identification/idp/idp/')

View File

@ -530,7 +530,7 @@ def test_formdef_schema(pub):
formdef.workflow_id = workflow.id
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO('''\
{"data": [{"id": 0, "text": "zéro", "foo": "bar"}, \
{"id": 1, "text": "uné", "foo": "bar1"}, \
@ -1282,9 +1282,8 @@ def test_formdata_with_workflow_data(pub, local_user):
formdata.status = 'wf-new'
formdata.evolution[-1].status = 'wf-new'
from qommon.form import PicklableUpload as PicklableUpload2
from wcs.qommon.form import PicklableUpload as PicklableUpload3
upload = PicklableUpload2('test.txt', 'text/plain', 'ascii')
upload = PicklableUpload3('test.txt', 'text/plain', 'ascii')
upload.receive(['test'])
upload2 = PicklableUpload3('test.txt', 'text/plain', 'ascii')
upload2.receive(['test'])
@ -2547,7 +2546,7 @@ def test_get_secret_and_orig(no_request_pub):
assert orig == 'example.net'
def test_reverse_geocoding(pub):
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(json.dumps({'address': 'xxx'}))
get_app(pub).get('/api/reverse-geocoding', status=400)
resp = get_app(pub).get('/api/reverse-geocoding?lat=0&lon=0')
@ -2603,7 +2602,7 @@ def test_formdef_submit_structured(pub, local_user):
'?format=json&orig=coucou&email=%s' % urllib.quote(local_user.email), '1234')
return signed_url[len('http://example.net'):]
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO('''\
{"data": [{"id": 0, "text": "zéro", "foo": "bar"}, \
{"id": 1, "text": "uné", "foo": "bar1"}, \
@ -2634,7 +2633,7 @@ def test_formdef_submit_structured(pub, local_user):
def test_geocoding(pub):
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(json.dumps([{'lat': 0, 'lon': 0}]))
get_app(pub).get('/api/geocoding', status=400)
resp = get_app(pub).get('/api/geocoding?q=test')

View File

@ -22,11 +22,11 @@ except ImportError:
xlwt = None
from quixote import cleanup, get_publisher
from qommon import ods
from wcs.qommon import ods
from wcs.api_utils import sign_url
from wcs.qommon import errors, sessions
from wcs.qommon.form import PicklableUpload
from qommon.ident.password_accounts import PasswordAccount
from wcs.qommon.ident.password_accounts import PasswordAccount
from wcs.qommon.http_request import HTTPRequest
from wcs.roles import Role
from wcs.workflows import (Workflow, CommentableWorkflowStatusItem,
@ -2899,7 +2899,7 @@ def test_backoffice_wfedit_and_data_source_with_user_info(pub):
app = login(get_app(pub))
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
def side_effect(url, *args):
assert '?name_id=admin' in url
@ -4023,7 +4023,7 @@ def test_backoffice_workflow_form_with_live_data_source(pub):
app = get_app(pub)
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data1 = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
data2 = {'data': [{'id': 'C', 'text': 'hello'}, {'id': 'D', 'text': 'world'}]}
def side_effect(url, *args):

View File

@ -387,7 +387,7 @@ def test_data_source_unicode():
data_source2 = NamedDataSource.select()[0]
assert data_source2.data_source == data_source.data_source
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(
'{"data": [{"id": 0, "text": "zéro"}, {"id": 1, "text": "uné"}, {"id": 2, "text": "deux"}]}')
assert data_sources.get_items({'type': 'foobar'}) == [
@ -403,7 +403,7 @@ def test_data_source_signed(no_request_pub):
data_source.data_source = {'type': 'json', 'value': "https://api.example.com/json"}
data_source.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(
'{"data": [{"id": 0, "text": "zero"}]}')
assert len(data_sources.get_items({'type': 'foobar'})) == 1
@ -420,7 +420,7 @@ def test_data_source_signed(no_request_pub):
data_source.data_source = {'type': 'json', 'value': "https://api.example.com/json?foo=bar"}
data_source.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(
'{"data": [{"id": 0, "text": "zero"}]}')
assert len(data_sources.get_items({'type': 'foobar'})) == 1
@ -437,7 +437,7 @@ def test_data_source_signed(no_request_pub):
data_source.data_source = {'type': 'json', 'value': "https://no-secret.example.com/json"}
data_source.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(
'{"data": [{"id": 0, "text": "zero"}]}')
assert len(data_sources.get_items({'type': 'foobar'})) == 1
@ -450,7 +450,7 @@ def test_named_datasource_json_cache(requests_pub):
datasource.data_source = {'type': 'json', 'value': 'http://whatever/'}
datasource.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
urlopen.side_effect = lambda *args: StringIO(
json.dumps({'data': [{'id': '1', 'text': 'foo'}, {'id': '2', 'text': 'bar'}]}))

View File

@ -144,8 +144,8 @@ def test_fc_login_page(caplog):
}
assert pub.user_class.count() == 0
with mock.patch('qommon.ident.franceconnect.http_post_request') as http_post_request, \
mock.patch('qommon.ident.franceconnect.http_get_page') as http_get_page:
with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \
mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page:
http_post_request.return_value = (None, 200, json.dumps(token_result), None)
http_get_page.return_value = (None, 200, json.dumps(user_info_result), None)
resp = app.get('/ident/fc/callback?%s' % urllib.urlencode({
@ -197,8 +197,8 @@ def test_fc_login_page(caplog):
id_token['nonce'] = qs['nonce'][0]
token_result['id_token'] = '.%s.' % base64url_encode(json.dumps(id_token))
with mock.patch('qommon.ident.franceconnect.http_post_request') as http_post_request, \
mock.patch('qommon.ident.franceconnect.http_get_page') as http_get_page:
with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \
mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page:
http_post_request.return_value = (None, 200, json.dumps(token_result), None)
http_get_page.return_value = (None, 200, json.dumps(user_info_result), None)
resp = app.get('/ident/fc/callback?%s' % urllib.urlencode({
@ -245,8 +245,8 @@ def test_fc_login_page(caplog):
'family_name': 'Deux',
# 'email': 'john.deux@example.com', # missing
}
with mock.patch('qommon.ident.franceconnect.http_post_request') as http_post_request, \
mock.patch('qommon.ident.franceconnect.http_get_page') as http_get_page:
with mock.patch('wcs.qommon.ident.franceconnect.http_post_request') as http_post_request, \
mock.patch('wcs.qommon.ident.franceconnect.http_get_page') as http_get_page:
http_post_request.return_value = (None, 200, json.dumps(token_result), None)
http_get_page.return_value = (None, 200, json.dumps(bad_user_info_result), None)
resp = app.get('/ident/fc/callback?%s' % urllib.urlencode({

View File

@ -8,7 +8,7 @@ import pytest
from quixote import cleanup
from quixote.http_request import Upload
from qommon.http_request import HTTPRequest
from wcs.qommon.http_request import HTTPRequest
from wcs.qommon import sessions
from wcs import fields
from wcs.qommon.form import Form

View File

@ -850,7 +850,7 @@ def test_form_multi_page_many_conditions(pub):
formdef.store()
formdef.data_class().wipe()
with mock.patch('qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
with mock.patch('wcs.qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
resp = get_app(pub).get('/test/')
call_count = invalidate_cache.call_count
@ -861,7 +861,7 @@ def test_form_multi_page_many_conditions(pub):
formdef.store()
# check the cache doesn't get invalidated for every page
with mock.patch('qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
with mock.patch('wcs.qommon.publisher.Substitutions.invalidate_cache') as invalidate_cache:
resp = get_app(pub).get('/test/')
assert invalidate_cache.call_count == call_count
@ -2496,7 +2496,7 @@ def test_form_page_formula_prefill_items_field(pub):
data_source=ds, display_disabled_items=True,
prefill={'type': 'formula', 'value': '["2"]'})]
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -4948,7 +4948,7 @@ def test_item_field_with_disabled_items(http_requests, pub):
data_source=ds, display_disabled_items=True)]
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -4961,7 +4961,7 @@ def test_item_field_with_disabled_items(http_requests, pub):
formdef.data_class().wipe()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -4986,7 +4986,7 @@ def test_item_field_with_disabled_items(http_requests, pub):
display_disabled_items=False)]
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -5003,7 +5003,7 @@ def test_item_field_with_disabled_items(http_requests, pub):
data_source=ds, display_mode='radio', display_disabled_items=True)]
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -5016,7 +5016,7 @@ def test_item_field_with_disabled_items(http_requests, pub):
formdef.data_class().wipe()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -5045,7 +5045,7 @@ def test_items_field_with_disabled_items(http_requests, pub):
data_source=ds, display_disabled_items=True)]
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello'}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -5058,7 +5058,7 @@ def test_items_field_with_disabled_items(http_requests, pub):
formdef.data_class().wipe()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -5075,7 +5075,7 @@ def test_items_field_with_disabled_items(http_requests, pub):
data_source=ds, display_disabled_items=False)]
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'disabled': True}, {'id': '2', 'text': 'world'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = get_app(pub).get('/test/')
@ -5104,7 +5104,7 @@ def test_item_field_autocomplete_json_source(http_requests, pub):
]
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
{'id': '2', 'text': 'world', 'extra': 'bar'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
@ -5121,7 +5121,7 @@ def test_item_field_autocomplete_json_source(http_requests, pub):
# check hint is displayed within
formdef.fields[0].hint = 'help text'
formdef.store()
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
{'id': '2', 'text': 'world', 'extra': 'bar'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
@ -5141,7 +5141,7 @@ def test_item_field_autocomplete_json_source(http_requests, pub):
formdef.data_class().wipe()
app = get_app(pub)
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
{'id': '2', 'text': 'world', 'extra': 'bar'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
@ -5150,7 +5150,7 @@ def test_item_field_autocomplete_json_source(http_requests, pub):
pq = resp.pyquery.remove_namespaces()
select2_url = pq('select').attr['data-select2-url']
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp2 = app.get(select2_url + '?q=hell')
@ -5166,7 +5166,7 @@ def test_item_field_autocomplete_json_source(http_requests, pub):
resp.form['f0'].force_value('1')
resp.form.fields['f0_display'].force_value('hello')
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = resp.form.submit('submit') # -> validation page
@ -5175,7 +5175,7 @@ def test_item_field_autocomplete_json_source(http_requests, pub):
assert resp.form['f0'].value == '1'
assert resp.form['f0_label'].value == 'hello'
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = resp.form.submit('submit') # -> submit
@ -5193,7 +5193,7 @@ remote.example.net = 1234
''')
app = get_app(pub)
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
{'id': '2', 'text': 'world', 'extra': 'bar'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
@ -5202,7 +5202,7 @@ remote.example.net = 1234
pq = resp.pyquery.remove_namespaces()
select2_url = pq('select').attr['data-select2-url']
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp2 = app.get(select2_url + '?q=hell')
@ -5215,7 +5215,7 @@ remote.example.net = 1234
resp.form['f0'].force_value('1')
resp.form.fields['f0_display'].force_value('hello')
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = resp.form.submit('submit') # -> validation page
@ -5224,7 +5224,7 @@ remote.example.net = 1234
assert resp.form['f0'].value == '1'
assert resp.form['f0_label'].value == 'hello'
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
resp = resp.form.submit('submit') # -> submit
@ -5240,7 +5240,7 @@ remote.example.net = 1234
formdef.store()
app = get_app(pub)
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'},
{'id': '2', 'text': 'world', 'extra': 'bar'}]}
urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data))
@ -5274,7 +5274,7 @@ def test_item_field_autocomplete_jsonp_source(http_requests, pub):
formdef.store()
app = get_app(pub)
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
resp = app.get('/test/')
assert urlopen.call_count == 0
pq = resp.pyquery.remove_namespaces()
@ -5287,13 +5287,13 @@ def test_item_field_autocomplete_jsonp_source(http_requests, pub):
resp.form['f0'].force_value('1')
resp.form['f0_display'].force_value('hello')
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
resp = resp.form.submit('submit') # -> validation page
assert urlopen.call_count == 0
assert resp.form['f0'].value == '1'
assert resp.form['f0_label'].value == 'hello'
with mock.patch('qommon.misc.urlopen') as urlopen:
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
resp = resp.form.submit('submit') # -> submit
assert urlopen.call_count == 0
assert formdef.data_class().select()[0].data['0'] == '1'

View File

@ -7,8 +7,8 @@ import time
from quixote import cleanup
from quixote.http_request import Upload
from qommon.template import Template
from qommon.form import PicklableUpload
from wcs.qommon.template import Template
from wcs.qommon.form import PicklableUpload
from wcs.qommon.http_request import HTTPRequest
from wcs import fields, formdef
from wcs.categories import Category

View File

@ -13,7 +13,7 @@ from wcs.categories import Category
from wcs.formdef import FormDef, fields, FormdefImportError
from wcs.workflows import Workflow
from wcs.roles import Role
from qommon.misc import indent_xml as indent
from wcs.qommon.misc import indent_xml as indent
from utilities import create_temporary_pub

View File

@ -182,7 +182,7 @@ def test_cron_command():
# simulate another locked cron
import tempfile
from qommon.vendor import locket
from wcs.qommon.vendor import locket
lockfile = os.path.join(tempfile.gettempdir(), 'wcs-cron-in-progress.lock')
with locket.lock_file(lockfile, timeout=0):
with mock.patch('wcs.qommon.management.commands.cron.cron_worker') as cron_worker:

View File

@ -4,7 +4,7 @@ import cPickle
from utilities import create_temporary_pub, clean_temporary_pub
from qommon.storage import StorableObject
from wcs.qommon.storage import StorableObject
from wcs.roles import Role, get_user_roles
def setup_module(module):

View File

@ -6,8 +6,8 @@ import string
from django.test import override_settings
from quixote import cleanup
from qommon.substitution import CompatibilityNamesDict
from qommon.template import Template, TemplateError
from wcs.qommon.substitution import CompatibilityNamesDict
from wcs.qommon.template import Template, TemplateError
from wcs.conditions import Condition
from wcs.variables import LazyFormData

View File

@ -21,7 +21,7 @@ from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem
from wcs.roles import Role
from wcs.fields import StringField
from qommon.misc import indent_xml as indent
from wcs.qommon.misc import indent_xml as indent
from utilities import create_temporary_pub, clean_temporary_pub

View File

@ -13,10 +13,10 @@ import mock
from django.utils.six import StringIO
from quixote import cleanup, get_response
from qommon.errors import ConnectionError
from wcs.qommon.errors import ConnectionError
from quixote.http_request import Upload as QuixoteUpload
from wcs.qommon.http_request import HTTPRequest
from qommon.form import *
from wcs.qommon.form import *
from wcs.formdef import FormDef
from wcs import sessions
@ -2221,7 +2221,7 @@ def test_sms_with_passerelle(pub):
item.body = 'my message'
with mock.patch('wcs.wscalls.get_secret_and_orig') as mocked_secret_and_orig:
mocked_secret_and_orig.return_value = ('secret', 'localhost')
with mock.patch('qommon.misc._http_request') as mocked_http_post:
with mock.patch('wcs.qommon.misc._http_request') as mocked_http_post:
mocked_http_post.return_value = ('response', '200', 'data', 'headers')
item.perform(formdata)
url = mocked_http_post.call_args[0][0]

View File

@ -25,8 +25,7 @@ from wcs.users import User
from wcs.tracking_code import TrackingCode
import wcs.qommon.emails
import wcs.qommon.sms
import qommon.sms
from qommon.errors import ConnectionError
from wcs.qommon.errors import ConnectionError
import wcs.middleware
@ -264,18 +263,13 @@ class EmailsMocking(object):
def __enter__(self):
self.wcs_create_smtp_server = sys.modules['wcs.qommon.emails'].create_smtp_server
self.qommon_create_smtp_server = sys.modules['qommon.emails'].create_smtp_server
sys.modules['wcs.qommon.emails'].create_smtp_server = self.create_smtp_server
sys.modules['qommon.emails'].create_smtp_server = self.create_smtp_server
self.emails = {}
return self
def __exit__(self, exc_type, exc_value, tb):
del self.emails
sys.modules['wcs.qommon.emails'].create_smtp_server = self.wcs_create_smtp_server
sys.modules['qommon.emails'].create_smtp_server = self.qommon_create_smtp_server
class MockSubstitutionVariables(object):
@ -290,24 +284,14 @@ class HttpRequestsMocking(object):
def __enter__(self):
import wcs.qommon.misc
import qommon.misc
self.wcs_qommon_misc_http_request = wcs.qommon.misc._http_request
self.qommon_misc_http_request = qommon.misc._http_request
wcs.qommon.misc._http_request = self.http_request
qommon.misc._http_request = self.http_request
return self
def __exit__(self, exc_type, exc_value, tb):
import wcs.qommon.misc
import qommon.misc
wcs.qommon.misc._http_request = self.wcs_qommon_misc_http_request
qommon.misc._http_request = self.qommon_misc_http_request
del self.wcs_qommon_misc_http_request
del self.qommon_misc_http_request
def http_request(self, url, method='GET', body=None, headers={},
cert_file=None, timeout=None, raise_on_http_errors=False):
@ -397,12 +381,9 @@ class SMSMocking(wcs.qommon.sms.MobytSMS):
def __enter__(self):
self.sms = []
self.wcs_get_sms_class = wcs.qommon.sms.SMS.get_sms_class
self.qommon_get_sms_class = qommon.sms.SMS.get_sms_class
wcs.qommon.sms.SMS.get_sms_class = self.get_sms_class
qommon.sms.SMS.get_sms_class = self.get_sms_class
return self
def __exit__(self, exc_type, exc_value, tb):
del self.sms
wcs.qommon.sms.SMS.get_sms_class = self.wcs_get_sms_class
qommon.sms.SMS.get_sms_class = self.qommon_get_sms_class

View File

@ -18,12 +18,5 @@ import sys
import os
sys.path.insert(0, os.path.dirname(__file__))
import monkeypatch
import qommon
sys.modules['qommon'] = sys.modules['wcs.qommon']
import qommon.form
sys.modules['form'] = qommon.form
import compat
from . import monkeypatch
from . import compat

View File

@ -14,4 +14,4 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
from root import RootDirectory
from .root import RootDirectory

View File

@ -21,15 +21,15 @@ from quixote import get_response, redirect
from quixote.directory import Directory
from quixote.html import htmltext, TemplateIO
from qommon import _
from qommon import errors
from qommon import misc
from qommon.bounces import Bounce
from qommon.backoffice.menu import html_top
from qommon.admin.menu import command_icon
from ..qommon import _
from ..qommon import errors
from ..qommon import misc
from ..qommon.bounces import Bounce
from ..qommon.backoffice.menu import html_top
from ..qommon.admin.menu import command_icon
from qommon.form import *
from qommon.misc import get_cfg
from ..qommon.form import *
from ..qommon.misc import get_cfg
def get_email_type_label(type):
from settings import EmailsDirectory

View File

@ -18,10 +18,10 @@ from quixote import redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from ..qommon import _
from wcs.categories import Category
from qommon.form import *
from qommon.backoffice.menu import html_top
from ..qommon.form import *
from ..qommon.backoffice.menu import html_top
from wcs.formdef import FormDef

View File

@ -18,11 +18,11 @@ from quixote import redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon import template
from qommon.form import *
from qommon.misc import json_response
from qommon.backoffice.menu import html_top
from ..qommon import _
from ..qommon import template
from ..qommon.form import *
from ..qommon.misc import json_response
from ..qommon.backoffice.menu import html_top
from wcs.data_sources import (NamedDataSource, DataSourceSelectionWidget,
get_structured_items)
from wcs.formdef import FormDef

View File

@ -20,11 +20,11 @@ from quixote import redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext, htmlescape
from qommon import _
from qommon.form import *
from qommon import errors, misc
from qommon.backoffice.menu import html_top
from qommon.admin.menu import command_icon
from ..qommon import _
from ..qommon.form import *
from ..qommon import errors, misc
from ..qommon.backoffice.menu import html_top
from ..qommon.admin.menu import command_icon
from wcs import fields
from wcs.formdef import FormDef

View File

@ -28,15 +28,15 @@ from quixote import get_response, redirect
from quixote.directory import Directory, AccessControlled
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon import misc
from qommon.errors import *
from qommon.form import *
from qommon.backoffice.menu import html_top
from qommon import get_logger
from qommon.misc import C_
from ..qommon import _
from ..qommon import misc
from ..qommon.errors import *
from ..qommon.form import *
from ..qommon.backoffice.menu import html_top
from ..qommon import get_logger
from ..qommon.misc import C_
from qommon.afterjobs import AfterJob
from ..qommon.afterjobs import AfterJob
from wcs.formdef import FormDef, FormdefImportError, FormdefImportRecoverableError
from wcs.categories import Category
@ -44,7 +44,7 @@ from wcs.roles import Role, logged_users_role, get_user_roles
from wcs.workflows import Workflow
from wcs.forms.root import qrcode
from fields import FieldDefPage, FieldsDirectory
from .fields import FieldDefPage, FieldsDirectory
from .categories import CategoriesDirectory
from .data_sources import NamedDataSourcesDirectory
from .logged_errors import LoggedErrorsDirectory

View File

@ -19,9 +19,9 @@ import re
from quixote import get_response, get_publisher, redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _, ngettext
from qommon import errors, get_cfg
from qommon.misc import localstrftime
from ..qommon import _, ngettext
from ..qommon import errors, get_cfg
from ..qommon.misc import localstrftime
from wcs.logged_errors import LoggedError

View File

@ -18,11 +18,11 @@ from quixote import redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _, get_cfg
from qommon import errors
from qommon.form import *
from ..qommon import _, get_cfg
from ..qommon import errors
from ..qommon.form import *
from qommon.backoffice.menu import html_top
from ..qommon.backoffice.menu import html_top
from wcs.roles import Role, get_user_roles
from wcs.formdef import FormDef

View File

@ -33,24 +33,23 @@ from quixote import get_publisher, get_request, get_response, redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon import get_cfg
from qommon import errors
from qommon import misc
from qommon import template
from qommon.form import *
from qommon.sms import SMS
from ..qommon import _
from ..qommon import get_cfg
from ..qommon import errors
from ..qommon import misc
from ..qommon import template
from ..qommon.form import *
from ..qommon.sms import SMS
from qommon.afterjobs import AfterJob
from qommon.backoffice.menu import html_top
from qommon.admin.menu import error_page
from qommon.admin.cfg import cfg_submit
from qommon.admin.emails import EmailsDirectory
from ..qommon.afterjobs import AfterJob
from ..qommon.backoffice.menu import html_top
from ..qommon.admin.menu import error_page
from ..qommon.admin.cfg import cfg_submit
from ..qommon.admin.emails import EmailsDirectory
from wcs.qommon.admin.texts import TextsDirectory
from qommon.admin.settings import SettingsDirectory as QommonSettingsDirectory
from qommon.admin.logger import LoggerDirectory
import qommon.ident
import qommon.template
from ..qommon.admin.settings import SettingsDirectory as QommonSettingsDirectory
from ..qommon.admin.logger import LoggerDirectory
from ..qommon import ident
from wcs.formdef import FormDef
from wcs.carddef import CardDef
@ -108,7 +107,7 @@ authentication is unavailable. Lasso must be installed to use it.'))
def _q_lookup(self, component):
get_response().breadcrumb.append( ('identification/', _('Identification')) )
return qommon.ident.get_method_admin_directory(component)
return ident.get_method_admin_directory(component)
class UserFieldDefPage(FieldDefPage):
@ -204,7 +203,7 @@ class UserFieldsFormDef(FormDef):
self.publisher.cfg['users'] = users_cfg
self.publisher.write_cfg()
if self.publisher.is_using_postgresql():
import sql
from wcs import sql
sql.do_user_table()
sql.do_tracking_code_table()
sql.do_session_table()
@ -371,12 +370,12 @@ class ThemePreviewDirectory(Directory):
if path[1] in ('backoffice', 'admin') or \
get_request().get_method() == 'POST':
from qommon.template import error_page as base_error_page
from ..qommon.template import error_page as base_error_page
output = base_error_page(_("The theme preview doesn't support this."))
else:
output = root_directory._q_traverse(path[1:])
from qommon.template import decorate
from ..qommon.template import decorate
if isinstance(output, template.QommonTemplateResponse):
output = template.render(output.templates, output.context)
theme_preview = decorate(output, response)
@ -440,7 +439,7 @@ class SettingsDirectory(QommonSettingsDirectory):
identification_cfg = get_cfg('identification', {})
for method in identification_cfg.get('methods', []):
try:
method_admin = qommon.ident.get_method_admin_directory(method)
method_admin = ident.get_method_admin_directory(method)
except AttributeError:
continue
@ -637,7 +636,7 @@ class SettingsDirectory(QommonSettingsDirectory):
r += htmltext('<a rel="popup" href="install_theme">%s</a>') % _('Install New Theme')
r += htmltext('<form action="themes" enctype="multipart/form-data" method="post">')
themes = qommon.template.get_themes_dict()
themes = template.get_themes_dict()
r += htmltext('<ul class="biglist themes">')
for theme, theme_dict in sorted(themes.items()):
label = theme_dict.get('label')
@ -670,7 +669,7 @@ class SettingsDirectory(QommonSettingsDirectory):
r += htmltext('</form>')
return r.getvalue()
else:
themes = qommon.template.get_themes()
themes = template.get_themes()
if themes.has_key(str(request.form['theme'])):
branding_cfg = get_cfg('branding', {})
branding_cfg[str('theme')] = str(request.form['theme'])
@ -683,7 +682,7 @@ class SettingsDirectory(QommonSettingsDirectory):
if not theme_id:
return redirect('themes')
theme_directory = qommon.template.get_theme_directory(theme_id)
theme_directory = template.get_theme_directory(theme_id)
if not theme_directory:
return redirect('themes')
@ -752,7 +751,7 @@ class SettingsDirectory(QommonSettingsDirectory):
get_session().message = ('error', _('Theme is missing a desc.xml file.'))
return redirect('themes')
desc_xml = z.read('%s/desc.xml' % theme_name)
theme_dict = qommon.template.get_theme_dict(StringIO(desc_xml))
theme_dict = template.get_theme_dict(StringIO(desc_xml))
if theme_dict.get('name') != theme_name:
get_session().message = ('error', _('desc.xml is missing a name attribute.'))
return redirect('themes')
@ -779,7 +778,7 @@ class SettingsDirectory(QommonSettingsDirectory):
return self.install_theme_from_file(StringIO(fp.read()))
def template(self):
from qommon.template import get_default_ezt_template
from wcs.qommon.template import get_default_ezt_template
default_template_ezt = get_default_ezt_template()
branding_cfg = get_cfg('branding', {})
template = branding_cfg.get('template', default_template_ezt)
@ -811,7 +810,7 @@ class SettingsDirectory(QommonSettingsDirectory):
return r.getvalue()
def template_submit(self, form = None):
from qommon.template import DEFAULT_TEMPLATE_EZT, get_default_ezt_template
from wcs.qommon.template import DEFAULT_TEMPLATE_EZT, get_default_ezt_template
theme_default_template_ezt = get_default_ezt_template()
get_publisher().reload_cfg()

View File

@ -18,19 +18,19 @@ from quixote import get_publisher, get_response, get_request, get_session, redir
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from ..qommon import _
import wcs.qommon.storage as st
from qommon import errors
from qommon import misc, get_cfg
from qommon.backoffice.listing import pagination_links
from ..qommon import errors
from ..qommon import misc, get_cfg
from ..qommon.backoffice.listing import pagination_links
from wcs.roles import Role
import qommon.ident
from qommon.ident.idp import is_idp_managing_user_attributes, is_idp_managing_user_roles
from qommon.form import *
from qommon.admin.emails import EmailsDirectory
from qommon.backoffice.menu import html_top
from qommon.admin.menu import error_page
from ..qommon import ident
from ..qommon.ident.idp import is_idp_managing_user_attributes, is_idp_managing_user_roles
from ..qommon.form import *
from ..qommon.admin.emails import EmailsDirectory
from ..qommon.backoffice.menu import html_top
from ..qommon.admin.menu import error_page
class UserUI(object):
def __init__(self, user):
@ -65,7 +65,7 @@ class UserUI(object):
'render_br': False,
'options': [(None, '---', None)] + [(x.id, x.name, x.id) for x in roles]})
for klass in [x for x in qommon.ident.get_method_classes() if x.key in ident_methods]:
for klass in [x for x in ident.get_method_classes() if x.key in ident_methods]:
if klass.method_admin_widget:
value = klass().get_value(self.user)
form.add(klass.method_admin_widget, 'method_%s' % klass.key, required = False,
@ -94,7 +94,7 @@ class UserUI(object):
self.user.store()
ident_methods = get_cfg('identification', {}).get('methods', [])
for klass in [x for x in qommon.ident.get_method_classes() if x.key in ident_methods]:
for klass in [x for x in ident.get_method_classes() if x.key in ident_methods]:
widget = form.get_widget('method_%s' % klass.key)
if widget:
klass().submit(self.user, widget)
@ -229,7 +229,7 @@ class UserPage(Directory):
for method in ident_methods:
try:
actions = qommon.ident.get_method_user_directory(
actions = ident.get_method_user_directory(
method, self.user).get_actions()
except AttributeError:
continue
@ -283,7 +283,7 @@ class UserPage(Directory):
return r.getvalue()
else:
ident_methods = get_cfg('identification', {}).get('methods', [])
for klass in [x for x in qommon.ident.get_method_classes() if x.key in ident_methods]:
for klass in [x for x in ident.get_method_classes() if x.key in ident_methods]:
if hasattr(klass, str('delete')):
klass().delete(self.user)
self.user.remove_self()
@ -293,7 +293,7 @@ class UserPage(Directory):
ident_methods = get_cfg('identification', {}).get('methods', [])
if component in ident_methods:
get_response().breadcrumb.append((component + '/', None))
return qommon.ident.get_method_user_directory(component, self.user)
return ident.get_method_user_directory(component, self.user)
class UsersDirectory(Directory):
_q_exports = ['', 'new']

View File

@ -27,13 +27,13 @@ from quixote import redirect, get_publisher
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon import errors
from qommon import misc
from qommon.form import *
from qommon.backoffice.menu import html_top
from qommon.admin.menu import command_icon
from qommon import get_logger
from ..qommon import _
from ..qommon import errors
from ..qommon import misc
from ..qommon.form import *
from ..qommon.backoffice.menu import html_top
from ..qommon.admin.menu import command_icon
from ..qommon import get_logger
from wcs.workflows import *
from wcs.carddef import CardDef

View File

@ -18,10 +18,10 @@ from quixote import redirect
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon import errors
from qommon.form import *
from qommon.backoffice.menu import html_top
from ..qommon import _
from ..qommon import errors
from ..qommon.form import *
from ..qommon.backoffice.menu import html_top
from wcs.wscalls import NamedWsCall, WsCallRequestWidget
class NamedWsCallUI(object):

View File

@ -25,12 +25,12 @@ from quixote.directory import Directory
from django.utils.six.moves.urllib import parse as urllib
from django.http import HttpResponse, HttpResponseBadRequest
from qommon import _
from qommon import misc
from qommon.evalutils import make_datetime
from qommon.errors import (AccessForbiddenError, QueryError, TraversalError,
from .qommon import _
from .qommon import misc
from .qommon.evalutils import make_datetime
from .qommon.errors import (AccessForbiddenError, QueryError, TraversalError,
UnknownNameIdAccessForbiddenError, RequestError)
from qommon.form import ComputedExpressionWidget, ConditionWidget
from .qommon.form import ComputedExpressionWidget, ConditionWidget
from wcs.categories import Category
from wcs.conditions import Condition, ValidationError
@ -42,8 +42,8 @@ from wcs.forms.common import FormStatusPage
import wcs.qommon.storage as st
from wcs.api_utils import sign_url_auto_orig, is_url_signed, get_user_from_api_query_string
from backoffice.management import FormPage as BackofficeFormPage
from backoffice.management import ManagementDirectory
from .backoffice.management import FormPage as BackofficeFormPage
from .backoffice.management import ManagementDirectory
def posted_json_data_to_formdata_data(formdef, data):
# remap fields from varname to field id
@ -632,7 +632,7 @@ class ApiUserDirectory(Directory):
if get_publisher().is_using_postgresql() and not get_request().form.get('full') == 'on':
from wcs import sql
from qommon.storage import Equal
from .qommon.storage import Equal
order_by = 'receipt_time'
if get_request().form.get('sort') == 'desc':
order_by = '-receipt_time'

View File

@ -27,7 +27,7 @@ from django.utils.six.moves.urllib import parse as urllib
from django.utils.six.moves.urllib import parse as urlparse
from quixote import get_request, get_publisher
from qommon.errors import (AccessForbiddenError, UnknownNameIdAccessForbiddenError)
from .qommon.errors import (AccessForbiddenError, UnknownNameIdAccessForbiddenError)
import qommon.misc
DEFAULT_DURATION = 30

View File

@ -14,4 +14,4 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
from root import RootDirectory
from .root import RootDirectory

View File

@ -21,8 +21,8 @@ import time
from quixote import get_publisher, get_request, get_response, get_session, redirect
from quixote.html import TemplateIO, htmltext
from qommon import _, misc
from qommon.misc import C_
from ..qommon import _, misc
from ..qommon.misc import C_
from wcs.carddef import CardDef
from wcs.roles import Role

View File

@ -17,9 +17,9 @@
from quixote import get_request, get_response, get_session, redirect
from quixote.html import TemplateIO, htmltext, htmlescape
from qommon import _
from qommon import errors
from qommon.backoffice.menu import html_top
from ..qommon import _
from ..qommon import errors
from ..qommon.backoffice.menu import html_top
from wcs.carddef import CardDef
from .management import ManagementDirectory, FormPage, FormFillPage, FormBackOfficeStatusPage

View File

@ -33,21 +33,21 @@ from quixote import get_session, get_publisher, get_request, get_response, redir
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext, htmlescape
from qommon import _, ngettext, ezt
from qommon.admin.emails import EmailsDirectory
from qommon.admin.menu import command_icon
from qommon.backoffice.menu import html_top
from qommon.backoffice.listing import pagination_links
from qommon import misc, get_logger
from qommon.evalutils import make_datetime
from qommon.misc import C_, ellipsize
from qommon.afterjobs import AfterJob
from qommon import emails
import qommon.sms
from qommon import errors
from qommon import ods
from qommon.form import *
from qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or,
from ..qommon import _, ngettext, ezt
from ..qommon.admin.emails import EmailsDirectory
from ..qommon.admin.menu import command_icon
from ..qommon.backoffice.menu import html_top
from ..qommon.backoffice.listing import pagination_links
from ..qommon import misc, get_logger
from ..qommon.evalutils import make_datetime
from ..qommon.misc import C_, ellipsize
from ..qommon.afterjobs import AfterJob
from ..qommon import emails
from ..qommon import sms
from ..qommon import errors
from ..qommon import ods
from ..qommon.form import *
from ..qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or,
Intersects, ILike, FtsMatch, Contains, Null)
from wcs.api_utils import get_user_from_api_query_string
@ -142,7 +142,7 @@ class SendCodeFormdefDirectory(Directory):
if get_publisher().use_sms_feature:
sms_cfg = get_cfg('sms', {})
mode = sms_cfg.get('mode', 'none')
sms_class = qommon.sms.SMS.get_sms_class(mode)
sms_class = sms.SMS.get_sms_class(mode)
if sms_class:
form.add(StringWidget, 'sms', title=_('SMS Number'), required=False)
form.add(RadiobuttonsWidget, 'method',

View File

@ -19,13 +19,13 @@ from django.utils.translation import pgettext
from quixote import get_publisher, get_request, get_response, redirect
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon.backoffice import BackofficeRootDirectory
from qommon.backoffice.menu import html_top
from ..qommon import _
from ..qommon.backoffice import BackofficeRootDirectory
from ..qommon.backoffice.menu import html_top
from qommon import misc, get_cfg
from qommon import errors
from qommon.form import *
from ..qommon import misc, get_cfg
from ..qommon import errors
from ..qommon.form import *
from wcs.formdef import FormDef
@ -202,7 +202,7 @@ class RootDirectory(BackofficeRootDirectory):
return r.getvalue()
def get_sidebar(self):
from qommon.admin.menu import get_vc_version
from ..qommon.admin.menu import get_vc_version
r = TemplateIO(html=True)
r += htmltext('<div class="bo-block">')

View File

@ -16,9 +16,9 @@
from quixote import get_publisher
from quixote.directory import Directory
from qommon import _
from qommon.backoffice.menu import html_top
from qommon import template
from ..qommon import _
from ..qommon.backoffice.menu import html_top
from ..qommon import template
class StudioDirectory(Directory):

View File

@ -22,10 +22,10 @@ from quixote import get_publisher, get_request, get_response, get_session, redir
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon.backoffice.menu import html_top
from qommon.form import *
from qommon import errors, misc
from ..qommon import _
from ..qommon.backoffice.menu import html_top
from ..qommon.form import *
from ..qommon import errors, misc
from wcs.formdata import FormData
from wcs.formdef import FormDef

View File

@ -18,7 +18,7 @@ import new
import sys
from quixote import get_publisher
from qommon import _
from .qommon import _
from wcs.carddata import CardData
from wcs.formdef import FormDef

View File

@ -17,11 +17,11 @@
from quixote import get_publisher, get_response
from quixote.html import htmltext
from qommon import _
from qommon.storage import StorableObject
from qommon.misc import simplify
from qommon.substitution import Substitutions
from qommon.xml_storage import XmlStorableObject
from .qommon import _
from .qommon.storage import StorableObject
from .qommon.misc import simplify
from .qommon.substitution import Substitutions
from .qommon.xml_storage import XmlStorableObject
class Category(XmlStorableObject):
_names = 'categories'

View File

@ -19,8 +19,8 @@ import sys
from quixote import get_publisher
from django.template import Context, Template, TemplateSyntaxError
from qommon import _, get_logger
from qommon.misc import site_encode
from .qommon import _, get_logger
from .qommon.misc import site_encode
class ValidationError(ValueError):

View File

@ -18,7 +18,7 @@ import tarfile
import time
import os
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdBackup(Command):

View File

@ -25,9 +25,9 @@ import urlparse
import hashlib
from quixote import cleanup
from qommon import misc
from qommon.ctl import Command, make_option
from qommon.storage import atomic_write
from ..qommon import misc
from ..qommon.ctl import Command, make_option
from ..qommon.storage import atomic_write
from wcs.admin.settings import UserFieldsFormDef
from wcs.fields import StringField, EmailField, DateField
@ -299,7 +299,7 @@ class CmdCheckHobos(Command):
# initialize service provider side
if not pub.cfg['sp'].get('publickey'):
from qommon.ident.idp import MethodAdminDirectory
from ..qommon.ident.idp import MethodAdminDirectory
spconfig = pub.cfg['sp']
spconfig['saml2_base_url'] = str(service.get('base_url')) + '/saml'
spconfig['saml2_providerid'] = spconfig['saml2_base_url'] + '/metadata'
@ -329,7 +329,7 @@ class CmdCheckHobos(Command):
(bfd, metadata_pathname) = tempfile.mkstemp('.metadata')
atomic_write(metadata_pathname, s)
from qommon.ident.idp import AdminIDPDir
from ..qommon.ident.idp import AdminIDPDir
admin_dir = AdminIDPDir()
key_provider_id = admin_dir.submit_new_remote(
metadata_pathname, None, metadata_url, None)

View File

@ -21,7 +21,7 @@ import psycopg2.errorcodes
from datetime import datetime
from shutil import rmtree
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdDeleteTenant(Command):

View File

@ -16,7 +16,7 @@
import os
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdExportSettings(Command):
name = 'export_settings'

View File

@ -20,8 +20,8 @@ import json
from quixote import get_publisher
from wcs.roles import Role
from qommon.ctl import Command
from qommon.publisher import get_cfg
from ..qommon.ctl import Command
from ..qommon.publisher import get_cfg
from wcs.admin.settings import UserFieldsFormDef
from wcs.qommon.misc import json_encode_helper

View File

@ -18,7 +18,7 @@ import os
from django.core.management.base import BaseCommand, CommandError
from qommon.publisher import get_publisher_class
from wcs.qommon.publisher import get_publisher_class
class TenantCommand(BaseCommand):

View File

@ -23,7 +23,7 @@ import traceback
from django.core.management.base import BaseCommand
from django.core.management.base import CommandError
from qommon.publisher import get_publisher_class
from wcs.qommon.publisher import get_publisher_class
from wcs import sql
from wcs.formdef import FormDef

View File

@ -21,7 +21,7 @@ import sys
from django.core.management.base import CommandError
from qommon.publisher import get_publisher_class
from wcs.qommon.publisher import get_publisher_class
from . import TenantCommand

View File

@ -21,7 +21,7 @@ import email.Parser
from Bouncers import BouncerAPI
from qommon.ctl import Command
from ..qommon.ctl import Command
COMMA_SPACE = ', '
@ -29,10 +29,10 @@ class CmdProcessBounce(Command):
name = 'process_bounce'
def execute(self, base_options, sub_options, args):
from qommon.tokens import Token
from qommon.bounces import Bounce
from ..qommon.tokens import Token
from ..qommon.bounces import Bounce
import publisher
from .. import publisher
try:
publisher.WcsPublisher.configure(self.config)

View File

@ -16,7 +16,7 @@
import os
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
def rebuild_vhost_indexes(pub, destroy=False):
from wcs.formdef import FormDef

View File

@ -18,7 +18,7 @@ import sys
import tarfile
import os
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdRestore(Command):

View File

@ -19,7 +19,7 @@ import runpy
import warnings
import sys
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdRunScript(Command):
'''Run a script within a given host publisher context'''

View File

@ -21,7 +21,7 @@
import os.path
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdShell(Command):
'''Launch a shell and initialize a publisher on a given host'''

View File

@ -17,7 +17,7 @@
import os
import sys
from qommon.ctl import Command, make_option
from ..qommon.ctl import Command, make_option
class CmdWipeData(Command):
name = 'wipe-data'

View File

@ -24,18 +24,18 @@ from django.utils.six.moves.urllib import parse as urlparse
from quixote import get_publisher, get_request, get_session
from quixote.html import TemplateIO
from qommon import _
from qommon.form import *
from qommon.humantime import seconds2humanduration
from qommon.misc import get_variadic_url
import qommon.misc
from qommon import get_logger
from .qommon import _
from .qommon.form import *
from .qommon.humantime import seconds2humanduration
from .qommon.misc import get_variadic_url
from .qommon import misc
from .qommon import get_logger
from qommon.storage import StorableObject
from qommon.template import Template
from qommon.xml_storage import XmlStorableObject
from .qommon.storage import StorableObject
from .qommon.template import Template
from .qommon.xml_storage import XmlStorableObject
from wcs.api_utils import sign_url_auto_orig
from .api_utils import sign_url_auto_orig
data_source_functions = {}
@ -63,7 +63,7 @@ class DataSourceSelectionWidget(CompositeWidget):
('carddef:%s' % x.url_name, x.name, 'carddef:%s' % x.url_name)
for x in CardDef.select(lightweight=True, ignore_errors=True)
if x.digest_template])
options.sort(key=lambda x: qommon.misc.simplify(x[1]))
options.sort(key=lambda x: misc.simplify(x[1]))
options.insert(0, (None, _('None'), None))
options.append(('json', _('JSON URL'), 'json'))
@ -124,7 +124,7 @@ def get_structured_items(data_source, mode=None):
items = [x.get_data_source_structured_item()
for x in carddef.data_class().select()
if not x.is_draft()]
items.sort(key=lambda x: qommon.misc.simplify(x['text']))
items.sort(key=lambda x: misc.simplify(x['text']))
return items
if data_source.get('type') not in ('json', 'jsonp', 'formula'):
@ -154,7 +154,7 @@ def get_structured_items(data_source, mode=None):
return []
if len(value) == 0:
return []
value = qommon.misc.json_encode_helper(value, get_publisher().site_charset)
value = misc.json_encode_helper(value, get_publisher().site_charset)
if isinstance(value[0], list) or isinstance(value[0], tuple):
if len(value[0]) >= 3:
return [{'id': x[0], 'text': x[1], 'key': x[2]} for x in value]
@ -196,7 +196,7 @@ def get_structured_items(data_source, mode=None):
unsigned_url = url
url = sign_url_auto_orig(url)
try:
entries = qommon.misc.json_loads(qommon.misc.urlopen(url).read())
entries = misc.json_loads(misc.urlopen(url).read())
if type(entries) is not dict:
raise ValueError('not a json dict')
if type(entries.get('data')) is not list:
@ -216,7 +216,7 @@ def get_structured_items(data_source, mode=None):
cache.set(cache_key, items, cache_duration)
return items
except qommon.misc.ConnectionError as e:
except misc.ConnectionError as e:
get_logger().warn('Error loading JSON data source (%s)' % str(e))
except ValueError as e:
get_logger().warn('Error reading JSON data source output (%s)' % str(e))
@ -300,7 +300,7 @@ class NamedDataSource(XmlStorableObject):
super(NamedDataSource, self).store()
def get_new_slug(self):
new_slug = qommon.misc.simplify(self.name, space='_')
new_slug = misc.simplify(self.name, space='_')
base_new_slug = new_slug
suffix_no = 0
while True:
@ -369,7 +369,7 @@ class NamedDataSource(XmlStorableObject):
unsigned_url = url
url = sign_url_auto_orig(url)
resp = qommon.misc.urlopen(url).read()
resp = misc.urlopen(url).read()
if hasattr(request, 'datasources_cache'):
request.datasources_cache[unsigned_url] = resp
return resp
@ -384,7 +384,7 @@ class NamedDataSource(XmlStorableObject):
value = None
if self.type == 'json' and self.id_parameter:
resp = self.load_json(self.id_parameter, option_id)
response = qommon.misc.json_loads(resp)
response = misc.json_loads(resp)
if response['data']:
value = response['data'][0]
else:

View File

@ -33,16 +33,16 @@ from django.utils.formats import date_format as django_date_format
from django.utils.html import urlize
from django.utils.six.moves.html_parser import HTMLParser
from qommon import _
from qommon import evalutils
from qommon.form import *
from qommon.misc import localstrftime, strftime, date_format, ellipsize, can_thumbnail
from qommon.template import Template, TemplateError
from qommon import get_cfg, get_logger
from .qommon import _
from .qommon import evalutils
from .qommon.form import *
from .qommon.misc import localstrftime, strftime, date_format, ellipsize, can_thumbnail
from .qommon.template import Template, TemplateError
from .qommon import get_cfg, get_logger
import data_sources
import portfolio
from conditions import Condition
from . import data_sources
from . import portfolio
from .conditions import Condition
class PrefillSelectionWidget(CompositeWidget):

View File

@ -25,16 +25,16 @@ import time
from quixote import get_request, get_publisher, get_session
from quixote.http_request import Upload
from qommon import _
from qommon.storage import StorableObject, Intersects, Contains
import qommon.misc
from qommon.evalutils import make_datetime
from qommon.publisher import get_cfg
from qommon.substitution import Substitutions, invalidate_substitution_cache
from qommon.template import Template
from .qommon import _
from .qommon.storage import StorableObject, Intersects, Contains
from .qommon import misc
from .qommon.evalutils import make_datetime
from .qommon.publisher import get_cfg
from .qommon.substitution import Substitutions, invalidate_substitution_cache
from .qommon.template import Template
from roles import Role
from fields import FileField
from .roles import Role
from .fields import FileField
def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
@ -58,7 +58,7 @@ def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
new_data['f%s' % field.id.replace('-', '_')] = value
# also add it as 'field_' + normalized(field label)
identifier_name = qommon.misc.simplify(field.label, space = '_')
identifier_name = misc.simplify(field.label, space = '_')
new_data['field_' + identifier_name] = value
# and finally add it as its manually defined variable name
@ -638,9 +638,9 @@ class FormData(StorableObject):
if field.type == 'display_name':
return self.get_display_name()
if field.type == 'time':
return qommon.misc.localstrftime(self.receipt_time)
return misc.localstrftime(self.receipt_time)
if field.type == 'last_update_time':
return qommon.misc.localstrftime(self.last_update_time)
return misc.localstrftime(self.last_update_time)
if field.type == 'user-label':
return self.get_user_label() or '-'
if field.type == 'status':
@ -685,8 +685,8 @@ class FormData(StorableObject):
if self.id:
d.update({
'form_receipt_date': qommon.misc.strftime(qommon.misc.date_format(), self.receipt_time),
'form_receipt_time': qommon.misc.strftime('%H:%M', self.receipt_time),
'form_receipt_date': misc.strftime(misc.date_format(), self.receipt_time),
'form_receipt_time': misc.strftime('%H:%M', self.receipt_time),
'form_number': str(self.get_display_id()),
'form_number_raw': '%s' % self.id,
'form_url': self.get_url(),
@ -823,7 +823,7 @@ class FormData(StorableObject):
return d
def get_substitution_variables(self, minimal=False):
from qommon.substitution import CompatibilityNamesDict
from .qommon.substitution import CompatibilityNamesDict
from wcs.variables import LazyFormData
from wcs.workflows import AttachmentsSubstitutionProxy
variables = CompatibilityNamesDict({
@ -1080,7 +1080,7 @@ class FormData(StorableObject):
def export_to_json(self, include_files=True, anonymise=False):
data = self.get_json_export_dict(include_files=include_files, anonymise=anonymise)
return json.dumps(data,
cls=qommon.misc.JSONEncoder,
cls=misc.JSONEncoder,
encoding=get_publisher().site_charset)
def mark_as_being_visited(self):

View File

@ -27,20 +27,20 @@ import datetime
from quixote import get_request, get_publisher
from quixote.http_request import Upload
from qommon import _
from qommon.storage import StorableObject, fix_key
from qommon.cron import CronJob
from qommon.form import *
from qommon.misc import simplify, get_as_datetime
from qommon import get_cfg
from qommon.substitution import Substitutions
from qommon.publisher import get_publisher_class
from .qommon import _
from .qommon.storage import StorableObject, fix_key
from .qommon.cron import CronJob
from .qommon.form import *
from .qommon.misc import simplify, get_as_datetime
from .qommon import get_cfg
from .qommon.substitution import Substitutions
from .qommon.publisher import get_publisher_class
from formdata import FormData
from roles import Role, logged_users_role
from categories import Category
import fields
import data_sources
from .formdata import FormData
from .roles import Role, logged_users_role
from .categories import Category
from . import fields
from . import data_sources
class FormdefImportError(Exception):
@ -1252,7 +1252,7 @@ class FormDef(StorableObject):
return d
def get_substitution_variables(self, minimal=False):
from qommon.substitution import CompatibilityNamesDict
from .qommon.substitution import CompatibilityNamesDict
from wcs.variables import LazyFormDef
return CompatibilityNamesDict({'form': LazyFormDef(self)})
@ -1462,7 +1462,7 @@ class FormDef(StorableObject):
return pickle.dumps(object, protocol=2) + pickle.dumps(object.fields, protocol=2)
from qommon.admin.emails import EmailsDirectory
from .qommon.admin.emails import EmailsDirectory
EmailsDirectory.register('new_user', N_('Notification of creation to user'),
enabled=False,

View File

@ -17,11 +17,11 @@
from quixote import redirect
from quixote.directory import Directory
from qommon import errors
from qommon import misc
from qommon import template
from qommon import tokens
from qommon.form import Form
from ..qommon import errors
from ..qommon import misc
from ..qommon import template
from ..qommon import tokens
from ..qommon.form import Form
from wcs.formdef import FormDef
from wcs.forms.common import FormTemplateMixin

View File

@ -19,10 +19,10 @@ import urllib
from quixote import get_request, get_publisher, redirect
from quixote.html import htmltext, TemplateIO
from qommon import _
from qommon import misc
from qommon.form import *
from qommon.backoffice.listing import pagination_links
from ..qommon import _
from ..qommon import misc
from ..qommon.form import *
from ..qommon.backoffice.listing import pagination_links
from wcs.roles import logged_users_role
class FormDefUI(object):

View File

@ -26,15 +26,15 @@ from wcs.api_utils import get_user_from_api_query_string, is_url_signed
from wcs.fields import WidgetField, FileField
from wcs.workflows import EditableWorkflowStatusItem
from qommon import _
from qommon import misc
from qommon import template
from qommon import get_logger
from qommon.form import *
from ..qommon import _
from ..qommon import misc
from ..qommon import template
from ..qommon import get_logger
from ..qommon.form import *
from wcs.qommon.admin.texts import TextsDirectory
from qommon import errors
from ..qommon import errors
class FileDirectory(Directory):

View File

@ -17,7 +17,7 @@
from quixote import get_publisher
from quixote.directory import Directory, AccessControlled
from quixote.html import htmltext, TemplateIO
from qommon import errors, _
from ..qommon import errors, _
from .root import FormPage

View File

@ -38,14 +38,14 @@ from quixote.util import randbytes
from quixote.form.widget import *
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon.admin.emails import EmailsDirectory
from qommon import errors, get_cfg
from qommon import misc, get_logger
from qommon import template
from qommon.form import *
from qommon.logger import BotFilter
from qommon import emails
from ..qommon import _
from ..qommon.admin.emails import EmailsDirectory
from ..qommon import errors, get_cfg
from ..qommon import misc, get_logger
from ..qommon import template
from ..qommon.form import *
from ..qommon.logger import BotFilter
from ..qommon import emails
from wcs import data_sources
from wcs.categories import Category

View File

@ -19,7 +19,7 @@ import json
from quixote import get_request, get_response
from quixote.directory import Directory
from qommon import errors
from ..qommon import errors
from wcs.api import get_user_from_api_query_string, is_url_signed
from wcs.roles import logged_users_role

View File

@ -16,8 +16,8 @@
import datetime
from qommon.misc import simplify
from qommon.xml_storage import XmlStorableObject
from .qommon.misc import simplify
from .qommon.xml_storage import XmlStorableObject
from wcs.formdef import FormDef
from wcs.workflows import Workflow

View File

@ -15,9 +15,9 @@
# along with this program; if not, see <http://www.gnu.org/licenses/>.
from quixote import get_request, redirect
import qommon.myspace
from .qommon import myspace
class MyspaceDirectory(qommon.myspace.MyspaceDirectory):
class MyspaceDirectory(myspace.MyspaceDirectory):
_q_exports = ['', 'profile', 'new', 'password', 'remove', 'drafts', 'forms']
def drafts(self):

View File

@ -17,12 +17,12 @@
import json
import hashlib
import urllib
import urlparse
import base64
from qommon import get_logger
from qommon.misc import http_get_page, json_loads, http_post_request, urlopen
import qommon.form
from django.utils.six.moves.urllib import parse as urlparse
from .qommon import get_logger
from .qommon.misc import http_get_page, json_loads, http_post_request, urlopen
from quixote import get_publisher, get_request, get_response, redirect, get_session
from quixote.directory import Directory
from quixote.html import TemplateIO, htmltext
@ -131,7 +131,8 @@ class FargoDirectory(Directory):
scheme, netloc, path, qs, frag = urlparse.urlsplit(url)
path = map(None, path.split('/'))
name = urllib.unquote(path[-1])
download = qommon.form.PicklableUpload(name, content_type='application/pdf')
from .qommon.form import PicklableUpload
download = PicklableUpload(name, content_type='application/pdf')
download.__setstate__({
'data': document,
})

View File

@ -29,7 +29,7 @@ try:
except ImportError:
pass
from qommon.publisher import set_publisher_class, QommonPublisher
from .qommon.publisher import set_publisher_class, QommonPublisher
# this is terribly ugly but import RootDirectory will import a bunch of things,
# and some of them need a publisher to be set
@ -38,22 +38,22 @@ class StubWcsPublisher(QommonPublisher):
set_publisher_class(StubWcsPublisher)
from root import RootDirectory
from backoffice import RootDirectory as BackofficeRootDirectory
from admin import RootDirectory as AdminRootDirectory
import sessions
from qommon.cron import CronJob
from .root import RootDirectory
from .backoffice import RootDirectory as BackofficeRootDirectory
from .admin import RootDirectory as AdminRootDirectory
from . import sessions
from .qommon.cron import CronJob
from users import User
from tracking_code import TrackingCode
from logged_errors import LoggedError
from .users import User
from .tracking_code import TrackingCode
from .logged_errors import LoggedError
import pickle
class UnpicklerClass(pickle.Unpickler):
def find_class(self, module, name):
if module == 'wcs.form':
module = 'qommon.form'
if module == 'qommon.form':
module = 'wcs.qommon.form'
__import__(module)
mod = sys.modules[module]
klass = getattr(mod, name)

View File

@ -40,8 +40,8 @@ def ngettext(*args):
return message
return unicode(pub.ngettext(*args), 'utf-8').encode(pub.site_charset)
from publisher import get_cfg, get_logger, get_publisher_class
import publisher
from .publisher import get_cfg, get_logger, get_publisher_class
from . import publisher
publisher._ = _

View File

@ -16,7 +16,7 @@
from quixote import get_publisher
from qommon import get_cfg
from .. import get_cfg
def cfg_submit(form, cfg_key, fields):
get_publisher().reload_cfg()

View File

@ -18,11 +18,11 @@ from quixote import redirect
from quixote.directory import Directory
from quixote.html import htmltext, TemplateIO
from qommon import _
from qommon.form import *
from qommon import misc, get_cfg
from qommon.backoffice.menu import html_top
from qommon.admin.cfg import cfg_submit
from .. import _
from ..form import *
from .. import misc, get_cfg
from ..backoffice.menu import html_top
from ..admin.cfg import cfg_submit
class EmailsDirectory(Directory):
emails_dict = {}

View File

@ -21,10 +21,10 @@ from quixote import get_publisher, get_request, get_response
from quixote.html import htmltext, TemplateIO
from quixote.directory import Directory
from qommon import _
from qommon import logger, errors
from qommon.backoffice.menu import html_top
from qommon.admin.menu import error_page
from .. import _
from .. import logger, errors
from ..backoffice.menu import html_top
from ..admin.menu import error_page
class ByUserDirectory(Directory):
def _q_lookup(self, component):

View File

@ -17,8 +17,8 @@
from quixote import get_publisher, get_request
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon.backoffice.menu import html_top
from .. import _
from ..backoffice.menu import html_top
import re
def _find_vc_version():

View File

@ -18,10 +18,10 @@ from quixote import redirect
from quixote.directory import Directory, AccessControlled
from quixote.html import TemplateIO, htmltext
from qommon import _
from qommon.form import *
from qommon.admin.cfg import cfg_submit
from qommon.backoffice.menu import html_top
from .. import _
from ..form import *
from ..admin.cfg import cfg_submit
from ..backoffice.menu import html_top
class SettingsDirectory(AccessControlled, Directory):
def _q_access(self):

View File

@ -20,11 +20,11 @@ from quixote import redirect, get_publisher
from quixote.html import TemplateIO, htmltext
from quixote.directory import Directory
from qommon import _
from qommon.form import *
from qommon import misc, get_cfg, ezt
from qommon.backoffice.menu import html_top
from qommon.template import Template
from wcs.qommon import _
from wcs.qommon.form import *
from wcs.qommon import misc, get_cfg, ezt
from wcs.qommon.backoffice.menu import html_top
from wcs.qommon.template import Template
class TextsDirectory(Directory):

View File

@ -17,9 +17,9 @@
from quixote.directory import Directory
from quixote import get_response
import errors
from http_response import AfterJob
from qommon import _
from . import errors
from .http_response import AfterJob
from . import _
class AfterJobStatusDirectory(Directory):
def _q_lookup(self, component):

View File

@ -14,4 +14,4 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
from root import BackofficeRootDirectory
from .root import BackofficeRootDirectory

View File

@ -19,7 +19,7 @@ import urllib
from quixote.html import htmltext, TemplateIO
from quixote import get_request, get_response
from qommon import _
from .. import _
def pagination_links(offset, limit, total_count):
get_response().add_javascript(['jquery.js', 'wcs.listing.js'])

View File

@ -17,8 +17,8 @@
from quixote import get_response, get_request, get_publisher, get_session
from quixote.html import htmltext, TemplateIO
from qommon import get_cfg
from qommon import _
from .. import get_cfg
from .. import _
def generate_header_menu(selected = None):
return get_publisher().get_backoffice_root().generate_header_menu(selected=selected)

View File

@ -17,8 +17,8 @@
from quixote.directory import Directory, AccessControlled
from quixote import get_publisher, get_request, get_response
from qommon import _
from qommon import errors
from .. import _
from .. import errors
class BackofficeRootDirectory(AccessControlled, Directory):

View File

@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
from qommon.storage import StorableObject
from .storage import StorableObject
class Bounce(StorableObject):
_names = 'bounces'

View File

@ -24,8 +24,8 @@ __all__ = [
'Command',
]
import qommon
from qommon import _
from wcs import qommon
from . import _
qommon._commands = {}
class Command(object):

View File

@ -27,7 +27,6 @@ from email.mime.multipart import MIMEMultipart
from email.mime.nonmultipart import MIMENonMultipart
from email.mime.text import MIMEText
from email.utils import formataddr
import email.Charset as Charset
import smtplib
import socket
@ -47,13 +46,17 @@ from django.utils.safestring import mark_safe
from quixote import get_request, get_response, get_publisher
from publisher import get_cfg, get_logger
import errors
import tokens
from admin.emails import EmailsDirectory
from template import Template
from .publisher import get_cfg, get_logger
from . import errors
from . import tokens
from .admin.emails import EmailsDirectory
from .template import Template
Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8')
try:
import email.Charset as Charset
Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8')
except ImportError:
pass
if docutils:

View File

@ -21,7 +21,7 @@ import quixote
from quixote.errors import *
from quixote.html import TemplateIO, htmltext
import template
from . import template
class AccessForbiddenError(AccessError):
@ -30,7 +30,7 @@ class AccessForbiddenError(AccessError):
self.location_hint = location_hint
def render(self):
from qommon import _
from . import _
if self.public_msg:
return template.error_page(self.public_msg, _('Access Forbidden'),
continue_to = (get_publisher().get_root_url(), _('the homepage')),
@ -63,7 +63,7 @@ class EmailError(Exception):
class InternalServerError(object):
def render(self):
from qommon import _
from . import _
template.html_top(_('Oops, the server borked severely'))
r = TemplateIO(html=True)
@ -116,7 +116,7 @@ TraversalError.description = N_(
def format_publish_error(exc):
from qommon import _
from . import _
if getattr(exc, 'public_msg', None):
return template.error_page(exc.format(), _(exc.title))
else:

View File

@ -35,7 +35,7 @@ try:
except ImportError:
Image = None
from storage import atomic_write
from .storage import atomic_write
try:
from feedparser import _sanitizeHTML
@ -69,14 +69,14 @@ from django.conf import settings
from django.utils.safestring import mark_safe
from .template import render as render_template, Template, TemplateError
from wcs.portfolio import has_portfolio
from ..portfolio import has_portfolio
from wcs.conditions import Condition, ValidationError
from qommon import _, ngettext
import misc
from . import _, ngettext
from . import misc
from .humantime import humanduration2seconds, seconds2humanduration, timewords
from .misc import strftime, C_, HAS_PDFTOPPM
from publisher import get_cfg
from .publisher import get_cfg
from .template_utils import render_block_to_string
QuixoteForm = Form
@ -1477,6 +1477,8 @@ class WysiwygTextWidget(TextWidget):
if self.value:
if _sanitizeHTML:
self.value = _sanitizeHTML(self.value, get_request().charset, 'text/html')
elif isinstance(self.value, unicode):
self.value = self.value.encode(get_publisher().site_charset)
if self.value.startswith('<br />'):
self.value = self.value[6:]
if self.value.endswith('<br />'):

View File

@ -23,7 +23,7 @@ from quixote import get_session, get_publisher
import quixote.http_request
from quixote.errors import RequestError
from http_response import HTTPResponse
from .http_response import HTTPResponse
class HTTPRequest(quixote.http_request.HTTPRequest):
signed = False
@ -51,7 +51,7 @@ class HTTPRequest(quixote.http_request.HTTPRequest):
if auth_header.startswith('Basic '):
auth_header = auth_header.split(' ', 1)[1]
username, password = base64.decodestring(auth_header).split(':', 1)
from qommon.ident.password_accounts import PasswordAccount
from .ident.password_accounts import PasswordAccount
try:
self._user = PasswordAccount.get_with_credentials(username, password)
except KeyError:

View File

@ -24,7 +24,7 @@ from quixote.util import randbytes
import quixote.http_response
from quixote import get_publisher, get_request
from qommon.storage import StorableObject
from .storage import StorableObject
class AfterJob(StorableObject):
_names = 'afterjobs'
@ -99,7 +99,7 @@ class HTTPResponse(quixote.http_response.HTTPResponse):
def get_javascript_for_header(self):
s = ''
if self.javascript_scripts:
from qommon.admin.menu import get_vc_version
from .admin.menu import get_vc_version
version_hash = hashlib.md5(str(get_vc_version())).hexdigest()
root_url = get_publisher().get_root_url() + get_publisher().qommon_static_dir
s += '\n'.join(['<script type="text/javascript" src="%sjs/%s?%s"></script>' % (
@ -120,7 +120,7 @@ class HTTPResponse(quixote.http_response.HTTPResponse):
def get_css_includes_for_header(self):
if not self.css_includes:
return ''
from qommon.admin.menu import get_vc_version
from .admin.menu import get_vc_version
version_hash = hashlib.md5(str(get_vc_version())).hexdigest()
root_url = get_publisher().get_root_url() + get_publisher().qommon_static_dir
return '\n'.join(['<link rel="stylesheet" type="text/css" href="%scss/%s?%s" />' % (

View File

@ -16,7 +16,7 @@
import re
from qommon import _
from . import _
_minute = 60
_hour = 60 * 60

View File

@ -16,7 +16,7 @@
from quixote import get_publisher
import base
from . import base
def login(method):
m = get_publisher().ident_methods.get(method)

View File

@ -24,12 +24,12 @@ from quixote import redirect, get_session, get_publisher, get_request, get_sessi
from quixote.directory import Directory
from quixote.html import htmltext, TemplateIO
from qommon import _
from qommon.backoffice.menu import html_top
from qommon import template, get_cfg, get_logger
from qommon.form import (Form, StringWidget, CompositeWidget, ComputedExpressionWidget,
from .. import _
from ..backoffice.menu import html_top
from .. import template, get_cfg, get_logger
from ..form import (Form, StringWidget, CompositeWidget, ComputedExpressionWidget,
SingleSelectWidget, WidgetListAsTable)
from qommon.misc import http_post_request, http_get_page, json_loads
from ..misc import http_post_request, http_get_page, json_loads
from wcs.workflows import WorkflowStatusItem
from wcs.formdata import flatten_dict

View File

@ -26,22 +26,22 @@ from quixote.directory import Directory
from quixote import redirect, get_session, get_response, get_publisher
from quixote.html import htmltext, TemplateIO
from qommon import _
from qommon import misc, get_cfg, get_logger
from qommon.form import *
from qommon.tokens import Token
from .. import _
from .. import misc, get_cfg, get_logger
from ..form import *
from ..tokens import Token
from qommon import template
from qommon import errors
from .. import template
from .. import errors
from qommon.backoffice.menu import html_top
from qommon.admin.menu import command_icon
from ..backoffice.menu import html_top
from ..admin.menu import command_icon
from base import AuthMethod
from qommon.storage import atomic_write
from .base import AuthMethod
from ..storage import atomic_write
import qommon.x509utils as x509utils
import qommon.saml2utils as saml2utils
from .. import x509utils
from .. import saml2utils
ADMIN_TITLE = N_('SAML2')
@ -1024,7 +1024,7 @@ class MethodAdminDirectory(Directory):
return r.getvalue()
def identities_submit(self, form):
from qommon.admin.settings import cfg_submit
from wcs.qommon.admin.settings import cfg_submit
cfg_submit(form, 'saml_identities',
('grab-user-with-wsf', 'identity-creation', 'notify-on-register',
'email-confirmation', 'registration-url'))

View File

@ -18,34 +18,34 @@ import random
import time
import csv
from base import AuthMethod, NoSuchMethodForUserError
from .base import AuthMethod, NoSuchMethodForUserError
from quixote import redirect, get_publisher
from quixote.directory import AccessControlled, Directory
from quixote.html import TemplateIO, htmltext
from qommon import _, ngettext
from qommon.form import *
from .. import _, ngettext
from ..form import *
from qommon.publisher import get_publisher_class
from qommon import misc, get_cfg, get_logger
from qommon import emails
from qommon import template
from qommon import tokens
from qommon import errors
from ..publisher import get_publisher_class
from .. import misc, get_cfg, get_logger
from .. import emails
from .. import template
from .. import tokens
from .. import errors
from qommon.admin.menu import command_icon
from ..admin.menu import command_icon
from qommon.backoffice.menu import html_top
from ..backoffice.menu import html_top
from qommon.admin.emails import EmailsDirectory
from ..admin.emails import EmailsDirectory
from wcs.qommon.admin.texts import TextsDirectory
from qommon.cron import CronJob
from qommon.afterjobs import AfterJob
import qommon.storage as st
from ..cron import CronJob
from ..afterjobs import AfterJob
from .. import storage as st
from password_accounts import PasswordAccount, HASHING_ALGOS
from .password_accounts import PasswordAccount, HASHING_ALGOS
def notify_admins_user_registered(account):
@ -756,7 +756,7 @@ class MethodAdminDirectory(Directory):
return r.getvalue()
def passwords_submit(self, form):
from admin.settings import cfg_submit
from wcs.admin.settings import cfg_submit
cfg_submit(form, 'passwords',
('can_change', 'generate',
'min_length', 'max_length',
@ -806,7 +806,7 @@ class MethodAdminDirectory(Directory):
return r.getvalue()
def identities_submit(self, form):
from admin.settings import cfg_submit
from wcs.admin.settings import cfg_submit
cfg_submit(form, 'identities',
('creation', 'email-as-username', 'notify-on-register', 'email-confirmation',
'warn_about_unused_account_delay', 'remove_unused_account_delay'))

View File

@ -18,7 +18,7 @@ import hashlib
from quixote import get_publisher
from qommon.storage import StorableObject
from ..storage import StorableObject
HASHING_ALGOS = {
'sha': hashlib.sha1,

View File

@ -18,7 +18,7 @@ import os
import shutil
from django.core.management.base import BaseCommand
from qommon.publisher import get_publisher_class
from wcs.qommon.publisher import get_publisher_class
class Command(BaseCommand):
help = "Collect static files in a single location."

View File

@ -20,10 +20,10 @@ import os
from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
from qommon.publisher import get_publisher_class
from wcs.qommon.publisher import get_publisher_class
from qommon.vendor import locket
from qommon.cron import cron_worker
from wcs.qommon.vendor import locket
from wcs.qommon.cron import cron_worker
from wcs.wf.jump import JUMP_TIMEOUT_INTERVAL

View File

@ -18,7 +18,7 @@ import os
import quixote
from django.core.management.base import BaseCommand
from qommon.publisher import get_publisher_class
from wcs.qommon.publisher import get_publisher_class
class Command(BaseCommand):
help = 'Migrate databases'

View File

@ -46,10 +46,10 @@ from django.utils.six.moves.urllib import parse as urlparse
from quixote import get_publisher, get_response, get_request
from quixote.html import htmltext
from qommon import _
from qommon import get_cfg, get_logger, ezt
from qommon.errors import ConnectionError
from qommon.template import Template
from . import _
from . import get_cfg, get_logger, ezt
from .errors import ConnectionError
from .template import Template
from django.utils.six import StringIO

Some files were not shown because too many files have changed in this diff Show More