def GetValidFilters (args): filters = MultiDict() for arg, val in args.iteritems(True): if arg in ValidFilters: filters.add(arg, val) return filters
def GetValidFilters(args): filters = MultiDict() for arg, val in args.iteritems(True): if arg in ValidFilters: filters.add(arg, val) return filters
def send_email(datafile): env = Environment(loader=PackageLoader('sendemail', 'templates')) template = env.get_template('email.html') with open(datafile, 'r') as f: wholefile = f.read() wholefile = json.loads(wholefile) files = MultiDict() # this 'i' business is jank to work around a Multidict bug in Requests: # https://github.com/kennethreitz/requests/issues/1155 i = 1 context = list() for graph in wholefile: points = list() if graph['type'] == 'table': for row in graph['data']: points.append((row[0], row[1])) currentgraph = { 'type': 'table', 'title': graph['name'].title(), 'additional': graph['additional'].title(), 'col1': graph['columns'][0], 'col2': graph['columns'][1], 'points': points, } elif graph['type'] == 'timeseries' or (graph['type'] == 'bar' and graph['data']): imagename = graph['uniquename'] + '.png' files.add('inline[%s]' % str(i), open(os.path.join(IMAGEDIR, imagename))) i += 1 currentgraph = { 'type': 'imagegraph', 'title': graph['name'].title(), 'additional': graph.get('additional', '').title(), 'cid': imagename, 'alt': '%s graph' % graph['name'], } context.append(currentgraph) return requests.post( POST_URL, auth=('api', MAILGUN_KEY), files=files, data={ "from": MAILGUN_FROM, "to": MAILGUN_TO, "subject": "Daily Status Report", "text": "Daily snapshot of the Refugees United dashboard.", "html": template.render(context=context), })
def instrument_processor(form, field, submit=False, fields=None): form.embargo_date.flags.hidden = True form.embargo_date.flags.disabled = True form.license.flags.hidden = True form.license.flags.disabled = True form.access_conditions.flags.hidden = True form.access_conditions.flags.disabled = True form.access_groups.flags.hidden = True form.access_groups.flags.disabled = True form.access_right.flags.hidden = True form.access_right.flags.disabled = True if field.data != '-1': selected = getInstrument(field.data) instrument = json.loads(selected) accessRight = str(instrument['accessRight']) license = str(instrument['license']) embargoDate = str(instrument['embargoDate']) conditions = str(instrument['conditions']) groups = getUsergroupByIdInstrument(field.data) groups_json = json.loads(groups) d = MultiDict() for group in groups_json: info = { u'identifier': unicode(str(group['idGroup'])), u'title': group['name'], } d.add(unicode('access_groups'), info) #current_app.logger.debug(d) form.access_groups.process(d) #MultiDict([(unicode('access_groups'),info)]) form.license.data = license form.access_conditions.data = conditions if embargoDate is not None and str(embargoDate) != 'None': form.embargo_date.data = datetime.fromtimestamp( float(embargoDate) / 1000.0).strftime('%Y-%m-%d') if accessRight == 'embargoed': form.embargo_date.flags.hidden = False form.embargo_date.flags.disabled = False if accessRight == 'restricted': form.access_conditions.flags.hidden = False form.access_conditions.flags.disabled = False form.access_groups.flags.hidden = False form.access_groups.flags.disabled = False if accessRight in ['open', 'embargoed']: form.license.flags.hidden = False form.license.flags.disabled = False form.access_right.data = unicode(accessRight) else: form.access_right.data = 'open' form.access_conditions.data = '' form.license.flags.hidden = False form.license.flags.disabled = False form.access_right.flags.hidden = False form.access_right.flags.disabled = False
def send_email(datafile): env = Environment(loader=PackageLoader('sendemail', 'templates')) template = env.get_template('email.html') with open(datafile, 'r') as f: wholefile = f.read() wholefile = json.loads(wholefile) files = MultiDict() # this 'i' business is jank to work around a Multidict bug in Requests: # https://github.com/kennethreitz/requests/issues/1155 i = 1 context = list() for graph in wholefile: points = list() if graph['type'] == 'table': for row in graph['data']: points.append((row[0], row[1])) currentgraph = { 'type' : 'table', 'title' : graph['name'].title(), 'additional' : graph['additional'].title(), 'col1' : graph['columns'][0], 'col2' : graph['columns'][1], 'points' : points, } elif graph['type'] == 'timeseries' or (graph['type'] == 'bar' and graph['data']): imagename = graph['uniquename'] + '.png' files.add('inline[%s]' % str(i), open(os.path.join(IMAGEDIR, imagename))) i += 1 currentgraph = { 'type' : 'imagegraph', 'title' : graph['name'].title(), 'additional' : graph.get('additional', '').title(), 'cid' : imagename, 'alt' : '%s graph' % graph['name'], } context.append(currentgraph) return requests.post( POST_URL, auth=('api', MAILGUN_KEY), files=files, data={"from": MAILGUN_FROM, "to": MAILGUN_TO, "subject": SUBJECT, "text": "Analytics by email.", "html": template.render(context=context), })
def instrument_processor(form, field, submit=False, fields=None): form.embargo_date.flags.hidden = True form.embargo_date.flags.disabled = True form.license.flags.hidden = True form.license.flags.disabled = True form.access_conditions.flags.hidden = True form.access_conditions.flags.disabled = True form.access_groups.flags.hidden = True form.access_groups.flags.disabled = True form.access_right.flags.hidden = True form.access_right.flags.disabled = True if field.data != "-1": selected = getInstrument(field.data) instrument = json.loads(selected) accessRight = str(instrument["accessRight"]) license = str(instrument["license"]) embargoDate = str(instrument["embargoDate"]) conditions = str(instrument["conditions"]) groups = getUsergroupByIdInstrument(field.data) groups_json = json.loads(groups) d = MultiDict() for group in groups_json: info = {u"identifier": unicode(str(group["idGroup"])), u"title": group["name"]} d.add(unicode("access_groups"), info) # current_app.logger.debug(d) form.access_groups.process(d) # MultiDict([(unicode('access_groups'),info)]) form.license.data = license form.access_conditions.data = conditions if embargoDate is not None and str(embargoDate) != "None": form.embargo_date.data = datetime.fromtimestamp(float(embargoDate) / 1000.0).strftime("%Y-%m-%d") if accessRight == "embargoed": form.embargo_date.flags.hidden = False form.embargo_date.flags.disabled = False if accessRight == "restricted": form.access_conditions.flags.hidden = False form.access_conditions.flags.disabled = False form.access_groups.flags.hidden = False form.access_groups.flags.disabled = False if accessRight in ["open", "embargoed"]: form.license.flags.hidden = False form.license.flags.disabled = False form.access_right.data = unicode(accessRight) else: form.access_right.data = "open" form.access_conditions.data = "" form.license.flags.hidden = False form.license.flags.disabled = False form.access_right.flags.hidden = False form.access_right.flags.disabled = False
def test_send_support_email(app, db, es, users): """Test mail sending.""" with app.extensions['mail'].record_messages() as outbox: with app.test_client() as client: res = client.get(url_for('zenodo_support.support')) assert res.status_code == 200 with recaptcha_enabled(app): res = client.get(url_for('zenodo_support.support')) assert b('recaptcha') in res.data assert res.status_code == 200 res = client.post(url_for('zenodo_support.support'), data=dict()) assert res.status_code == 200 assert b('field-name has-error') in res.data assert b('field-email has-error') in res.data assert b('field-subject has-error') in res.data assert b('field-description has-error') in res.data assert b('field-attachments has-error') not in res.data form = MultiDict( dict(name='Aman', email='*****@*****.**', subject='hello', issue_category='tech-support', description='Please help us! Troubleshoot our problem.')) res = client.post(url_for('zenodo_support.support'), data=form) assert b('has-error') not in res.data assert len(outbox) == 2 sent_msg = outbox[0] assert sent_msg.sender == 'Aman <*****@*****.**>' assert sent_msg.subject == '[tech-support]: hello' assert sent_msg.reply_to == '*****@*****.**' assert 'Aman <*****@*****.**>' in sent_msg.body sent_msg = outbox[1] assert sent_msg.sender == 'Zenodo <*****@*****.**>' assert sent_msg.subject == 'Zenodo Support' assert sent_msg.body == ( 'Thank you for contacting Zenodo support.' '\n\nWe have received your message, and we will do our best ' 'to get back to you as soon as possible.\nThis is an ' 'automated confirmation of your request, please do not reply ' 'to this email.\n\nZenodo Support\n' 'https://zenodo.org\n') form = MultiDict( dict(name='Foo', email='*****@*****.**', subject='Bar', issue_category='tech-support', description='Please help us! Troubleshoot our problem.')) test_file = BytesIO(b('My other file contents')) test_file2 = BytesIO(b('Another My other file contents')) form.add('attachments', (test_file, 'file2.txt')) form.add('attachments', (test_file2, 'test3.txt')) res = client.post(url_for('zenodo_support.support'), data=form, content_type='multipart/form-data', follow_redirects=True) assert len(outbox) == 4 sent_msg = outbox[2] file1 = sent_msg.attachments[0] assert file1.filename == 'file2.txt' assert file1.data == b('My other file contents') file2 = sent_msg.attachments[1] assert file2.filename == 'test3.txt' assert file2.data == b('Another My other file contents') login_user_via_session(client, email=users[1]['email']) with recaptcha_enabled(app): res = client.get(url_for('zenodo_support.support')) assert b('*****@*****.**') in res.data assert b('recaptcha') not in res.data form = MultiDict( dict(name='Foo', subject='Bar', issue_category='tech-support', description='Please help us! Troubleshoot our problem.')) res = client.post(url_for('zenodo_support.support'), data=form) assert len(outbox) == 6 sent_msg = outbox[4] assert 'From: Foo <*****@*****.**> (2)' in sent_msg.body test_file = BytesIO(b('My file contents')) form.add('attachments', (test_file, 'file1.txt')) res = client.post(url_for('zenodo_support.support'), data=form, content_type='multipart/form-data', follow_redirects=True) assert len(outbox) == 8 sent_msg = outbox[6] file1 = sent_msg.attachments[0] assert file1.filename == 'file1.txt' assert file1.data == b('My file contents') form = MultiDict( dict(name='Foo', subject='Bar', issue_category='tech-support', description='Please help us! Troubleshoot our problem.')) test_file = BytesIO(b('My other file contents')) test_file2 = BytesIO(b('Another My other file contents')) form.add('attachments', (test_file, 'file2.txt')) form.add('attachments', (test_file2, 'test3.txt')) res = client.post(url_for('zenodo_support.support'), data=form, content_type='multipart/form-data', follow_redirects=True) assert len(outbox) == 10 sent_msg = outbox[8] file1 = sent_msg.attachments[0] assert file1.filename == 'file2.txt' assert file1.data == b('My other file contents') file2 = sent_msg.attachments[1] assert file2.filename == 'test3.txt' assert file2.data == b('Another My other file contents')
def test_send_support_email(app, db, es, users): """Test mail sending.""" with app.extensions['mail'].record_messages() as outbox: with app.test_client() as client: res = client.get(url_for('zenodo_pages.support')) assert res.status_code == 200 res = client.get( url_for('zenodo_pages.support') ) assert b('recaptcha') in res.data assert res.status_code == 200 res = client.post( url_for('zenodo_pages.support'), data=dict() ) assert res.status_code == 200 assert b('field-name has-error') in res.data assert b('field-email has-error') in res.data assert b('field-subject has-error') in res.data assert b('field-description has-error') in res.data assert b('field-attachments has-error') not in res.data form = MultiDict(dict( name='Aman', email='*****@*****.**', subject='hello', issue_category='tech-support', description='Please help us! Troubleshoot our problem.' )) res = client.post( url_for('zenodo_pages.support'), data=form ) assert b('has-error') not in res.data assert len(outbox) == 2 sent_msg = outbox[0] assert sent_msg.sender == 'Aman <*****@*****.**>' assert sent_msg.subject == '[tech-support]: hello' assert sent_msg.reply_to == '*****@*****.**' assert 'Aman <*****@*****.**>' in sent_msg.body sent_msg = outbox[1] assert sent_msg.sender == 'Zenodo <*****@*****.**>' assert sent_msg.subject == 'Zenodo Support' assert sent_msg.body == ( 'Thank you for contacting Zenodo support.' '\n\nWe have received your message, and we will do our best ' 'to get back to you as soon as possible.\nThis is an ' 'automated confirmation of your request, please do not reply ' 'to this email.\n\nZenodo Support\n' 'https://zenodo.org\n' ) form = MultiDict(dict( name='Foo', email='*****@*****.**', subject='Bar', issue_category='tech-support', description='Please help us! Troubleshoot our problem.' )) test_file = BytesIO(b('My other file contents')) test_file2 = BytesIO(b('Another My other file contents')) form.add('attachments', (test_file, 'file2.txt')) form.add('attachments', (test_file2, 'test3.txt')) res = client.post( url_for('zenodo_pages.support'), data=form, content_type='multipart/form-data', follow_redirects=True ) assert len(outbox) == 4 sent_msg = outbox[2] file1 = sent_msg.attachments[0] assert file1.filename == 'file2.txt' assert file1.data == b('My other file contents') file2 = sent_msg.attachments[1] assert file2.filename == 'test3.txt' assert file2.data == b('Another My other file contents') login_user_via_session(client, email=users[1]['email']) res = client.get( url_for('zenodo_pages.support') ) assert b('*****@*****.**') in res.data assert b('recaptcha') not in res.data form = MultiDict(dict( name='Foo', subject='Bar', issue_category='tech-support', description='Please help us! Troubleshoot our problem.' )) res = client.post( url_for('zenodo_pages.support'), data=form ) assert len(outbox) == 6 sent_msg = outbox[4] assert 'From: Foo <*****@*****.**> (2)' in sent_msg.body test_file = BytesIO(b('My file contents')) form.add('attachments', (test_file, 'file1.txt')) res = client.post( url_for('zenodo_pages.support'), data=form, content_type='multipart/form-data', follow_redirects=True ) assert len(outbox) == 8 sent_msg = outbox[6] file1 = sent_msg.attachments[0] assert file1.filename == 'file1.txt' assert file1.data == b('My file contents') form = MultiDict(dict( name='Foo', subject='Bar', issue_category='tech-support', description='Please help us! Troubleshoot our problem.' )) test_file = BytesIO(b('My other file contents')) test_file2 = BytesIO(b('Another My other file contents')) form.add('attachments', (test_file, 'file2.txt')) form.add('attachments', (test_file2, 'test3.txt')) res = client.post( url_for('zenodo_pages.support'), data=form, content_type='multipart/form-data', follow_redirects=True ) assert len(outbox) == 10 sent_msg = outbox[8] file1 = sent_msg.attachments[0] assert file1.filename == 'file2.txt' assert file1.data == b('My other file contents') file2 = sent_msg.attachments[1] assert file2.filename == 'test3.txt' assert file2.data == b('Another My other file contents')
def test_update_genres(self): # start with a couple genres [lp] = self.english_1.license_pools genre, ignore = Genre.lookup(self._db, "Occult Horror") lp.work.genres = [genre] # change genres with self.app.test_request_context("/"): requested_genres = ["Drama", "Urban Fantasy", "Women's Fiction"] form = MultiDict() for genre in requested_genres: form.add("genres", genre) flask.request.form = form response = self.manager.admin_work_controller.update_genres(lp.data_source.name, lp.identifier.identifier) new_genre_names = [work_genre.genre.name for work_genre in lp.work.work_genres] eq_(len(new_genre_names), len(requested_genres)) for genre in requested_genres: eq_(True, genre in new_genre_names) # remove a genre with self.app.test_request_context("/"): requested_genres = ["Drama", "Women's Fiction"] form = MultiDict() for genre in requested_genres: form.add("genres", genre) flask.request.form = form response = self.manager.admin_work_controller.update_genres(lp.data_source.name, lp.identifier.identifier) new_genre_names = [work_genre.genre.name for work_genre in lp.work.work_genres] eq_(len(new_genre_names), len(requested_genres)) for genre in requested_genres: eq_(True, genre in new_genre_names) previous_genres = requested_genres # try to add a nonfiction genre with self.app.test_request_context("/"): requested_genres = ["Drama", "Women's Fiction", "Cooking"] form = MultiDict() for genre in requested_genres: form.add("genres", genre) flask.request.form = form response = self.manager.admin_work_controller.update_genres(lp.data_source.name, lp.identifier.identifier) eq_(response, INCOMPATIBLE_GENRE) new_genre_names = [work_genre.genre.name for work_genre in lp.work.work_genres] eq_(len(new_genre_names), len(previous_genres)) for genre in previous_genres: eq_(True, genre in new_genre_names) # try to add a nonexistent genre with self.app.test_request_context("/"): requested_genres = ["Drama", "Women's Fiction", "Epic Military Memoirs"] form = MultiDict() for genre in requested_genres: form.add("genres", genre) flask.request.form = form response = self.manager.admin_work_controller.update_genres(lp.data_source.name, lp.identifier.identifier) eq_(response, GENRE_NOT_FOUND) new_genre_names = [work_genre.genre.name for work_genre in lp.work.work_genres] eq_(len(new_genre_names), len(previous_genres)) for genre in previous_genres: eq_(True, genre in new_genre_names)