How to use has_hook method in Lemoncheesecake

Best Python code snippet using lemoncheesecake

find_errors.py

Source:find_errors.py Github

copy

Full Screen

1#!/usr/bin/env python2# -*- coding: utf-8 -*-3"""4Find raw_datasets which are not accepted by the administrator and look5different than other known datasets with the same accepted_formula_id.6(So: Find outliers)7"""8import sys9import logging10logging.basicConfig(level=logging.INFO,11 stream=sys.stdout,12 format='%(asctime)s %(levelname)s: %(message)s')13logger = logging.getLogger(__name__)14# Database stuff15import pymysql16import pymysql.cursors17# Other18import webbrowser19# My modules20from hwrt.handwritten_data import HandwrittenData21from distance_metric import handwritten_data_greedy_matching_distance as dtw22from hwrt import preprocessing23from hwrt import utils24def update_data(cfg, a, unaccept=False):25 mysql = cfg['mysql_online']26 connection_local = pymysql.connect(host=mysql['host'],27 user=mysql['user'],28 passwd=mysql['passwd'],29 db=mysql['db'],30 cursorclass=pymysql.cursors.DictCursor)31 cursor_local = connection_local.cursor()32 if unaccept:33 sql = ("UPDATE `wm_raw_draw_data` "34 "SET `administrator_edit` = now(), "35 "`missing_line` = %i, "36 "`has_hook` = %i, "37 "`has_too_long_line` = %i, "38 "`is_image` = %i, "39 "`other_problem` = %i, "40 "`has_interrupted_line` = %i, "41 "`accepted_formula_id` = NULL "42 "WHERE `wm_raw_draw_data`.`id` =%i "43 "LIMIT 1;") % \44 (int(a.missing_line),45 int(a.has_hook),46 int(a.has_too_long_line),47 int(a.is_image),48 int(a.other_problem),49 int(a.has_interrupted_line),50 a.raw_data_id)51 elif a.istrash:52 sql = ("UPDATE `wm_raw_draw_data` "53 "SET `administrator_edit` = now(), "54 "`missing_line` = %i, "55 "`has_hook` = %i, "56 "`has_too_long_line` = %i, "57 "`is_image` = %i, "58 "`other_problem` = %i, "59 "`has_interrupted_line` = %i, "60 "`accepted_formula_id` = 1 "61 "WHERE `wm_raw_draw_data`.`id` =%i "62 "LIMIT 1;") % \63 (int(a.missing_line),64 int(a.has_hook),65 int(a.has_too_long_line),66 int(a.is_image),67 int(a.other_problem),68 int(a.has_interrupted_line),69 a.raw_data_id)70 else:71 sql = ("UPDATE `wm_raw_draw_data` "72 "SET `administrator_edit` = now(), "73 "`missing_line` = %i, "74 "`has_hook` = %i, "75 "`has_too_long_line` = %i, "76 "`is_image` = %i, "77 "`other_problem` = %i, "78 "`has_interrupted_line` = %i "79 "WHERE `wm_raw_draw_data`.`id` =%i "80 "LIMIT 1;") % \81 (int(a.missing_line),82 int(a.has_hook),83 int(a.has_too_long_line),84 int(a.is_image),85 int(a.other_problem),86 int(a.has_interrupted_line),87 a.raw_data_id)88 cursor_local.execute(sql)89 connection_local.commit()90 cursor_local.close()91 connection_local.close()92 connection_online = pymysql.connect(host=mysql['host'],93 user=mysql['user'],94 passwd=mysql['passwd'],95 db=mysql['db'],96 cursorclass=pymysql.cursors.DictCursor)97 cursor_online = connection_online.cursor()98 cursor_online.execute(sql)99 connection_online.commit()100 cursor_online.close()101 connection_online.close()102class HandwrittenDataM(HandwrittenData):103 def __init__(self,104 raw_data_json,105 formula_id,106 wild_point_count,107 missing_line,108 has_hook,109 has_too_long_line,110 is_image,111 other_problem,112 has_interrupted_line,113 raw_data_id,114 latex):115 HandwrittenData.__init__(self, raw_data_json, formula_id)116 self.wild_point_count = wild_point_count117 self.missing_line = missing_line118 self.has_hook = has_hook119 self.has_too_long_line = has_too_long_line120 self.is_image = is_image121 self.other_problem = other_problem122 self.has_interrupted_line = has_interrupted_line123 self.unaccept = False124 self.ok = False125 self.raw_data_id = raw_data_id126 self.latex = latex127 self.istrash = False128 def show(self):129 import matplotlib.pyplot as plt130 from matplotlib.widgets import CheckButtons131 from matplotlib.widgets import Button132 fig, ax = plt.subplots()133 ax.set_title('Raw data id: %i, LaTeX: %s' % (self.raw_data_id,134 self.latex))135 plt.subplots_adjust(bottom=0.3)136 for line in self.get_pointlist():137 xs, ys = [], []138 for p in line:139 xs.append(p['x'])140 ys.append(p['y'])141 ax.plot(xs, ys, '-o')142 ax.axis((0, 1, 0, 1))143 plt.gca().invert_yaxis()144 ax.set_aspect('equal')145 def handle_checkboxes(label):146 if label == 'other_problem':147 self.other_problem = not self.other_problem148 elif label == 'missing_line':149 self.missing_line = not self.missing_line150 elif label == 'has_hook':151 self.has_hook = not self.has_hook152 elif label == 'has_too_long_line':153 self.has_too_long_line = not self.has_too_long_line154 elif label == 'is_image':155 self.is_image = not self.is_image156 elif label == 'has_interrupted_line':157 self.has_interrupted_line = not self.has_interrupted_line158 plt.draw()159 checkpos = plt.axes([0.01, 0.05, 0.45, 0.2])160 check = CheckButtons(checkpos,161 ('other_problem',162 'has_interrupted_line',163 'missing_line',164 'has_hook',165 'has_too_long_line',166 'is_image'),167 (self.other_problem,168 self.has_interrupted_line,169 self.missing_line,170 self.has_hook,171 self.has_too_long_line,172 self.is_image))173 check.on_clicked(handle_checkboxes)174 def ok_function(a):175 self.ok = True176 plt.close()177 okpos = plt.axes([0.7, 0.05, 0.1, 0.075])178 ok_button = Button(okpos, 'OK')179 ok_button.on_clicked(ok_function)180 def unaccept_function(a):181 self.unaccept = True182 logger.info("unaccept raw_data_id %i" % self.raw_data_id)183 plt.close()184 unacceptpos = plt.axes([0.81, 0.05, 0.1, 0.075])185 unaccept_button = Button(unacceptpos, 'unaccept')186 unaccept_button.on_clicked(unaccept_function)187 def is_trash_function(a):188 a.istrash = True189 logger.info("trash raw_data_id %i" % self.raw_data_id)190 plt.close()191 is_trash_pos = plt.axes([0.7, 0.2, 0.1, 0.075])192 is_trash_button = Button(is_trash_pos, 'is_trash')193 is_trash_button.on_clicked(is_trash_function)194 # maximise height195 mng = plt.get_current_fig_manager()196 width, height = mng.window.maxsize()197 mng.resize(500, height)198 plt.axis('equal')199 plt.show()200def main(cfg, raw_data_start_id):201 mysql = cfg['mysql_online']202 connection = pymysql.connect(host=mysql['host'],203 user=mysql['user'],204 passwd=mysql['passwd'],205 db=mysql['db'],206 cursorclass=pymysql.cursors.DictCursor)207 cursor = connection.cursor()208 # Get formulas209 logger.info("Get formulas")210 print("get formulas")211 sql = ("SELECT `id`, `formula_in_latex` FROM `wm_formula` "212 "WHERE `id` > %s ORDER BY `id`")213 cursor.execute(sql, (raw_data_start_id, ))214 formulas = cursor.fetchall()215 formulaid2latex = {}216 for el in formulas:217 formulaid2latex[el['id']] = el['formula_in_latex']218 preprocessing_queue = [preprocessing.ScaleAndShift(),219 # preprocessing.Douglas_peucker(EPSILON=0.2),220 # preprocessing.Space_evenly(number=100,221 # kind='cubic')222 ]223 checked_formulas = 0224 checked_raw_data_instances = 0225 for formula_id in formulaid2latex.keys():226 alread_shown_in_browser = False227 if formula_id == 1:228 # This formula id is for trash. No need to look at it.229 continue230 # Get data231 logger.info("Get data for formula_id %i (%s)" %232 (formula_id, formulaid2latex[formula_id]))233 sql = ("SELECT `id`, `data`, `accepted_formula_id`, "234 "`wild_point_count`, `missing_line`, `has_hook`, "235 "`has_too_long_line`, `is_image`, `administrator_edit`, "236 "`other_problem`, `has_interrupted_line` "237 "FROM `wm_raw_draw_data` "238 "WHERE `accepted_formula_id` = %i "239 "ORDER BY `administrator_edit` DESC, "240 "`creation_date` ASC;") % formula_id241 cursor.execute(sql)242 raw_datasets = cursor.fetchall()243 logger.info("Raw datasets: %i" % len(raw_datasets))244 checked_raw_data_instances += len(raw_datasets)245 checked_formulas += 1246 if len(raw_datasets) < 100:247 continue248 As = []249 for i, data in enumerate(raw_datasets):250 if data['data'] == "[]":251 continue252 B = HandwrittenDataM(data['data'],253 data['accepted_formula_id'],254 data['wild_point_count'],255 data['missing_line'],256 data['has_hook'],257 data['has_too_long_line'],258 data['is_image'],259 data['other_problem'],260 data['has_interrupted_line'],261 data['id'],262 formulaid2latex[formula_id])263 B.preprocessing(preprocessing_queue)264 B_pll = B.get_pointlist()265 distance = float('inf')266 for A_pll in As:267 distance = min(distance, dtw(A_pll, B_pll))268 if distance > 100:269 if data['administrator_edit'] is not None:270 As.append(B.get_pointlist())271 else:272 if not alread_shown_in_browser:273 alread_shown_in_browser = True274 webbrowser.open("http://www.martin-thoma.de/"275 "write-math/view/?"276 "raw_data_id=%i" % data['id'], 2)277 B.show()278 if B.ok:279 As.append(B.get_pointlist())280 update_data(cfg, B)281 else:282 update_data(cfg, B, True)283 logger.info("[Status] Checked formulas: %i of %i" %284 (checked_formulas, len(formulaid2latex)))285 logger.info("[Status] Checked raw_data_instances: %i" %286 checked_raw_data_instances)287 logger.info("done")288if __name__ == '__main__':289 from argparse import ArgumentParser290 parser = ArgumentParser(description=__doc__)291 # Add more options if you like292 parser.add_argument("-i", dest="i",293 help="at which raw_data_id should it start?",294 metavar="RAW_DATA_ID")295 args = parser.parse_args()296 cfg = utils.get_database_configuration()...

Full Screen

Full Screen

app.py

Source:app.py Github

copy

Full Screen

...73 """74 if not self.has_controller(name):75 raise KeyError("No controller registered under: {}".format(name))76 self.controllers.pop(name)77 def has_hook(self, name):78 return name in self._hooks.keys()79 def create_hook(self, name):80 """Create a hook to which functions can be registered"""81 if self.has_hook(name):82 raise KeyError("Hook %s already exists" % name)83 self._hooks[name] = []84 def register_hook(self, name, f):85 """Register a function to a hook86 - Use lambda to register a parametrized function87 - Functions should return a boolean to report their success88 """89 if not self.has_hook(name):90 self.create_hook(name)91 self._hooks[name].append(f)92 return self93 def remove_hook(self, name, f):94 """Remove the function registration from a hook"""95 if self.has_hook(name):96 hooks = self._hooks[name]97 if f in hooks:98 hooks.remove(f)99 return self100 def empty_hook(self, name):101 """Remove all function registrations from a hook"""102 if self.has_hook(name):103 self._hooks[name] = []104 return self105 def process_hook(self, name):106 """Run all functions registered to the hook107 :return: Whether all functions ran successful108 :rtype: bool109 """110 hooks = []111 if self.has_hook(name):112 hooks = self._hooks[name]113 result = True114 for f in hooks:115 result = f() and result116 return result117 def prepare(self):118 self._prepare()119 self._configured = True120 return self121 def _prepare(self):122 """Configures the application and loads at least one controller"""123 raise NotImplementedError124 def run(self):125 """Start the application"""...

Full Screen

Full Screen

course.py

Source:course.py Github

copy

Full Screen

1"""2Runs checks for whether a course is setup properly in github.3Checks branchs, repo, hooks, team, etc4"""5from will.plugin import WillPlugin6from will.decorators import respond_to7from plugins.git.base import GithubBaseMixIn8class CoursePlugin(WillPlugin, GithubBaseMixIn):9 DEPLOYMENT_TEAMS = ['mitx-content-deployment', 'mitx-studio-export', ]10 STAGING_HOST = 'gr-rp'11 PROD_HOST = 'prod-gr-rp'12 INATOR_HOST = 'gr-inator'13 def check_hook(self, use_ghe, owner, repo, host):14 """15 Checks that the git hook is in place for the16 hostname specified and is the form type17 """18 has_hook = False19 correct_type = False20 base_dns = '.mitx.mit.edu'21 hooks, err = self.get_all(22 use_ghe,23 'repos/{}/{}/hooks'.format(owner, repo)24 )25 if not hooks:26 return (False, False)27 for hook in hooks:28 url = hook['config'].get('url', None)29 if url:30 if '{0}{1}'.format(host, base_dns) in url:31 has_hook = True32 if 'form' == hook['config']['content_type'].lower():33 correct_type = True34 break35 return (has_hook, correct_type)36 def add_check_row(self, is_good, item):37 """38 Makes a tr with a checkmark or x mark39 """40 if is_good:41 status = '&#x2713;'42 else:43 status = '&#x2718;'44 return '<tr><td>{0}</td><td>{1}</td></tr>'.format(status, item)45 @respond_to('(github)? course check for '46 '(?P<owner>[\w\-_\d]+)/(?P<repo>[\d\w\-_]+)')47 def course_check(self, message, owner, repo):48 """49 github: github course check for &lt;owner&gt;/&lt;repo&gt;50 """51 # Find the repo first52 url = 'repos/{0}/{1}'.format(owner, repo)53 is_ghe = True54 repo_dict, err = self.get_all(True, url)55 if not repo_dict:56 repo_dict, err = self.get_all(False, url)57 is_ghe = False58 if not repo_dict:59 self.reply(60 message,61 "All my searching for nothing, that repo doesn't exist for me."62 )63 return64 # Make start of reply table65 table = [('<table><thead><tr>'66 '<td>Status</td>'67 '<td>Item</td>'68 '</tr></thead><tbody>'), ]69 # Check privacy70 table.append(self.add_check_row(71 repo_dict['private'], 'Repo is private'72 ))73 # Find out if it is studio74 if 'studio' in url.lower():75 table.append(self.add_check_row(76 True, 'Studio course and has github repo'77 ))78 else:79 table.append(self.add_check_row(80 True, 'XML based course'81 ))82 # Check that it has live branch83 branch, err = self.get_all(84 is_ghe,85 'repos/{0}/{1}/branches/live'.format(owner, repo)86 )87 has_live = False88 if branch:89 has_live = True90 table.append(self.add_check_row(has_live, 'Has live branch'))91 # Check hook to staging92 has_hook, type_check = self.check_hook(93 is_ghe, owner, repo, self.STAGING_HOST94 )95 table.append(self.add_check_row(96 has_hook, 'Has hook to staging.mitx.mit.edu'97 ))98 table.append(self.add_check_row(99 type_check, 'Correct hook type (form) for staging'100 ))101 # Check hook to inator102 has_hook, type_check = self.check_hook(103 is_ghe, owner, repo, self.INATOR_HOST104 )105 table.append(self.add_check_row(106 has_hook, 'Has hook to my beloved lms-inator.mitx.mit.edu'107 ))108 table.append(self.add_check_row(109 type_check, 'Correct hook type (form) for inator'110 ))111 # All repos need to have hook to prod112 has_hook, type_check = self.check_hook(113 is_ghe, owner, repo, self.PROD_HOST114 )115 table.append(self.add_check_row(116 has_hook, 'Has hook to lms.mitx.mit.edu'117 ))118 table.append(self.add_check_row(119 type_check, 'Correct hook type (form) for lms'120 ))121 # Get the teams to check for deploy122 team_list, err = self.get_all(123 is_ghe,124 'repos/{0}/{1}/teams'.format(owner, repo)125 )126 has_deploy_team = False127 html_team_list = ['<ul>', ]128 if team_list:129 for team in team_list:130 html_team_list.append('<li>{}</li>'.format(team['name']))131 if team['name'].lower() in self.DEPLOYMENT_TEAMS:132 has_deploy_team = True133 html_team_list.append('</ul>')134 table.append(self.add_check_row(135 has_deploy_team,136 'Has deployment team'137 ))138 table.append('</tbody></table>')139 self.reply(140 message,141 ('<b>{0}-inator checklist:</b><br />{1}<br />'142 '<b>Teams:</b><br />{2}').format(143 repo,144 ''.join(table),145 ''.join(html_team_list)146 ),147 html=True...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Lemoncheesecake automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful