Best Python code snippet using playwright-python
gnrobjectregister.py
Source:gnrobjectregister.py
1#-*- coding: UTF-8 -*-2#--------------------------------------------------------------------------3# package : GenroPy web - see LICENSE for details4# module gnrwebcore : core module for genropy web framework5# Copyright (c) : 2004 - 2007 Softwell sas - Milano 6# Written by : Giovanni Porcari, Michele Bertoldi7# Saverio Porcari, Francesco Porcari , Francesco Cavazzana8#--------------------------------------------------------------------------9#This library is free software; you can redistribute it and/or10#modify it under the terms of the GNU Lesser General Public11#License as published by the Free Software Foundation; either12#version 2.1 of the License, or (at your option) any later version.13#This library is distributed in the hope that it will be useful,14#but WITHOUT ANY WARRANTY; without even the implied warranty of15#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16#Lesser General Public License for more details.17#You should have received a copy of the GNU Lesser General Public18#License along with this library; if not, write to the Free Software19#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA20# 21from __future__ import print_function22from builtins import str23from past.builtins import basestring24#from builtins import object25from datetime import datetime26from gnr.core.gnrbag import Bag, BagResolver27from gnr.web.gnrwebpage import ClientDataChange28BAG_INSTANCE = Bag()29import logging30import re31logger = logging.getLogger(__name__)32import time33def lock_item(func):34 def decore(self, obj, *args, **kwargs):35 key = obj if isinstance(obj, basestring) else obj['register_item_id']36 with self.locked(self.item_key(key), caller=func.__name__):37 result = func(self, obj, *args, **kwargs)38 return result39 return decore40def lock_page(func):41 def decore(self, key, *args, **kwargs):42 register = self.p_register43 with register.locked(register.item_key(key), caller=func.__name__):44 result = func(self, key, *args, **kwargs)45 return result46 return decore47def lock_connection(func):48 def decore(self, key, *args, **kwargs):49 register = self.c_register50 with register.locked(register.item_key(key), caller=func.__name__):51 result = func(self, key, *args, **kwargs)52 return result53 return decore54def lock_user(func):55 def decore(self, key, *args, **kwargs):56 register = self.u_register57 with register.locked(register.item_key(key), caller=func.__name__):58 result = func(self, key, *args, **kwargs)59 return result60 return decore61def lock_index(func):62 def decore(self, *args, **kwargs):63 index_key = self._get_index_key(index_name=kwargs.get('index_name'))64 with self.locked(index_key):65 result = func(self, *args, **kwargs)66 return result67 return decore68class ExpiredItemException(Exception):69 pass70class ServerStore(object):71 def __init__(self, parent, register_item_id=None, triggered=True):72 self.parent = parent73 self.register_item_id = register_item_id74 self.triggered = triggered75 self._register_item = '*'76 def __enter__(self):77 self.parent.lock_register_item(self.register_item_id)78 return self79 def __exit__(self, type, value, tb):80 self.parent.unlock_register_item(self.register_item_id)81 if tb:82 return83 if not self.register_item:84 return85 data = self.data86 if data is not None:87 data.unsubscribe('datachanges', any=True)88 self.parent.write(self.register_item)89 def reset_datachanges(self):90 if self.register_item:91 self.register_item['datachanges'] = list()92 self.register_item['datachanges_idx'] = 093 def set_datachange(self, path, value=None, attributes=None, fired=False, reason=None, replace=False, delete=False):94 if not self.register_item:95 return96 datachanges = self.datachanges97 self.register_item['datachanges_idx'] = self.register_item.get('datachanges_idx', 0)98 self.register_item['datachanges_idx'] += 199 datachange = ClientDataChange(path, value, attributes=attributes, fired=fired,100 reason=reason, change_idx=self.register_item['datachanges_idx'],101 delete=delete)102 if replace and datachange in datachanges:103 datachanges.pop(datachanges.index(datachange))104 datachanges.append(datachange)105 def drop_datachanges(self, path):106 self.datachanges[:] = [dc for dc in self.datachanges if not dc.path.startswith(path)]107 def subscribe_path(self, path):108 if self.register_item:109 self.subscribed_paths.add(path)110 def _on_data_trigger(self, node=None, ind=None, evt=None, pathlist=None, **kwargs):111 if evt == 'ins':112 pathlist.append(node.label)113 path = '.'.join(pathlist)114 for subscribed in self.subscribed_paths:115 if path.startswith(subscribed):116 self.datachanges.append(117 ClientDataChange(path=path, value=node.value, reason='serverChange', attributes=node.attr))118 break119 def __getattr__(self, fname):120 if hasattr(BAG_INSTANCE, fname):121 return getattr(self.data, fname)122 else:123 raise AttributeError("register_item has no attribute '%s'" % fname)124 @property125 def data(self):126 """TODO"""127 if self.register_item:128 return self.register_item['data']129 else:130 return Bag()131 @property132 def register_item(self):133 """TODO"""134 if self._register_item != '*':135 return self._register_item136 self._register_item = register_item = self.parent.read(self.register_item_id)137 if not register_item:138 return139 data = register_item.get('data')140 if data is None:141 data = Bag()142 register_item['data'] = data143 register_item['datachanges'] = list()144 register_item['datachanges_idx'] = 0145 register_item['subscribed_paths'] = set()146 if self.triggered and register_item['subscribed_paths']:147 data.subscribe('datachanges', any=self._on_data_trigger)148 return register_item149 @property150 def datachanges(self):151 """TODO"""152 datachanges = []153 if self.register_item:154 datachanges = self.register_item.setdefault('datachanges', [])155 return datachanges156 @property157 def subscribed_paths(self):158 """TODO"""159 if self.register_item:160 return self.register_item['subscribed_paths']161class SiteRegister(object):162 """TODO"""163 prefix = 'SITE'164 def __init__(self, site):165 self.site = site166 self.sd = self.site.shared_data167 self.p_register = PageRegister(site)168 self.c_register = ConnectionRegister(site)169 self.u_register = UserRegister(site)170 self.cleanup_key = '%s_CLEANUP_LAST_TS'%self.prefix171 @lock_connection172 def new_connection(self, connection_id, connection):173 assert not self.c_register.exists(174 connection_id), 'SITEREGISTER ERROR: connection_id %s already registered' % connection_id175 connection_item = self.c_register.create(connection_id, connection)176 self.attach_connections_to_user(connection_item['user'], connection_item)177 self.c_register.write(connection_item)178 @lock_user179 def attach_connections_to_user(self, user, connection_items):180 if not isinstance(connection_items, list):181 connection_items = [connection_items]182 user_item = self.u_register.read(user)183 if not user_item:184 user_item = self.u_register.create(user, connection_items[0])185 for connection_item in connection_items:186 connection_id = connection_item['register_item_id']187 user_item['connections'][connection_id] = connection_item['connection_name']188 self.u_register.write(user_item)189 @lock_user190 def pop_connections_from_user(self, user, connection_items, delete_if_empty=True):191 user_item = self.u_register.read(user)192 result = {}193 if not user_item:194 return195 if connection_items == '*':196 result = user_item['connections']197 user_item['connections'] = {}198 else:199 if not isinstance(connection_items, list):200 connection_items = [connection_items]201 for connection_item in connection_items:202 connection_id = connection_item['register_item_id']203 result[connection_id] = user_item['connections'].pop(connection_id, None)204 if not user_item['connections'] and delete_if_empty:205 self.u_register.pop(user)206 else:207 self.u_register.write(user_item)208 return result209 def change_connection_user(self, connection_id, user=None, user_tags=None, user_id=None, user_name=None,210 avatar_extra=None):211 connection_item = self.c_register.read(connection_id)212 self.pop_connections_from_user(connection_item['user'], connection_item, delete_if_empty=True)213 connection_item['user'] = user214 connection_item['user_tags'] = user_tags215 connection_item['user_name'] = user_name216 connection_item['user_id'] = user_id217 connection_item['avatar_extra'] = avatar_extra218 self.attach_connections_to_user(connection_item['user'], connection_item)219 self.c_register.write(connection_item)220 if connection_item['pages']:221 for page_id in connection_item['pages']:222 page_item = self.p_register.read(page_id)223 page_item['user'] = user224 self.p_register.write(page_item)225 @lock_connection226 def attach_pages_to_connection(self, connection_id, page_items):227 if not isinstance(page_items, list):228 page_items = [page_items]229 connection_item = self.c_register.read(connection_id)230 for page_item in page_items:231 page_id = page_item['register_item_id']232 connection_item['pages'][page_id] = page_item['pagename']233 self.c_register.write(connection_item)234 @lock_connection235 def pop_pages_from_connection(self, connection_id, page_items, delete_if_empty=False):236 connection_item = self.c_register.read(connection_id)237 result = {}238 if not connection_item:239 return240 if page_items == '*':241 result = connection_item['pages']242 connection_item['pages'] = {}243 else:244 if not isinstance(page_items, list):245 page_items = [page_items]246 for page_item in page_items:247 page_id = page_item['register_item_id']248 result[page_id] = connection_item['pages'].pop(page_id, None)249 if not connection_item['pages'] and (delete_if_empty or self.c_register.is_guest(connection_item)):250 self.drop_connection(connection_id)251 else:252 self.c_register.write(connection_item)253 return result254 @lock_page255 def new_page(self, page_id, page, data=None):256 page_item = self.p_register.create(page_id, page, data)257 self.attach_pages_to_connection(page_item['connection_id'], page_item)258 self.p_register.write(page_item)259 start_ts = datetime.now()260 self.c_register.update_lastused(page_item['connection_id'],start_ts,lastRpc=start_ts)261 return page_item262 def cleanup(self):263 lastSiteCleanup = getattr(self.site,'_lastCleanUp',None)264 if lastSiteCleanup and (time.time()-lastSiteCleanup < self.site.cleanup_interval):265 return266 with self.sd.locked(self.cleanup_key):267 lastCleanupTs = self.sd.get(self.cleanup_key)268 thisCleanupTs = time.time()269 if not lastCleanupTs or ((thisCleanupTs - lastCleanupTs) > self.site.cleanup_interval):270 for page_id, page in list(self.pages().items()):271 page_last_refresh_age = page.get('last_refresh_age')272 if (page_last_refresh_age and (page_last_refresh_age > self.site.page_max_age)):273 self.drop_page(page_id)274 for connection_id, connection in list(self.connections().items()):275 connection_last_refresh_age = connection.get('last_refresh_age')276 if (connection_last_refresh_age and connection_last_refresh_age > self.site.connection_max_age):277 self.drop_connection(connection_id,cascade=True)278 self.sd.set(self.cleanup_key, thisCleanupTs, 0)279 self.site._lastCleanUp = thisCleanupTs280 def cleanup_page_connection(self, max_age=300):281 for page_id, page in list(self.pages().items()):282 page_last_refresh_age = page.get('last_refresh_age')283 if (page_last_refresh_age and (page_last_refresh_age > max_age)):284 self.drop_page(page_id)285 for connection_id, connection in list(self.connections().items()):286 connection_last_refresh_age = connection.get('last_refresh_age')287 if (connection_last_refresh_age and connection_last_refresh_age > max_age):288 self.drop_connection(connection_id)289 def get_user(self, user):290 return self.u_register.read(user)291 def connection(self, connection_id):292 return self.c_register.read(connection_id)293 def page(self, page_id):294 return self.p_register.read(page_id)295 def user(self, user):296 return self.u_register.read(user)297 def stores(self, storename):298 return299 @lock_connection300 def drop_connection(self, connection_id, cascade=None):301 connection_item = self.c_register.pop(connection_id)302 if not connection_item:303 return304 if connection_item['pages']:305 for page_id in connection_item['pages']:306 self.p_register.pop(page_id)307 user = connection_item['user']308 self.pop_connections_from_user(user, connection_item, delete_if_empty=cascade or self.c_register.is_guest(connection_item))309 def log_drop_page(self,page_id=None,page=None,page_last_rpc_age=None,page_max_age=None):310 print('\n\n IT SHOULD DROP THE PAGE ',page_id,page.get('pagename',''),'\n',page,'page_last_rpc_age ',page_last_rpc_age,'page_max_age ',page_max_age)311 312 @lock_page313 def drop_page(self, page_id, cascade=None):314 """TODO315 316 :param page_id: the id of the page317 :param cascade: specifies the cascade policy - True to drop empty connection"""318 page_item = self.p_register.pop(page_id)319 if not page_item:320 return321 self.pop_pages_from_connection(page_item['connection_id'], page_item, delete_if_empty=cascade)322 def connectionStore(self, connection_id, triggered=False):323 return self.c_register.make_store(connection_id, triggered=triggered)324 def userStore(self, user, triggered=False):325 return self.u_register.make_store(user, triggered=triggered)326 def pageStore(self, page_id, triggered=False):327 return self.p_register.make_store(page_id, triggered=triggered)328 def refresh(self, page_id, ts=None,lastRpc=None,pageProfilers=None):329 page_item = self.p_register.read(page_id)330 if page_item:331 self.p_register.update_lastused(page_id, ts,lastRpc=lastRpc,pageProfilers=pageProfilers)332 self.c_register.update_lastused(page_item['connection_id'], ts,lastRpc=lastRpc)333 self.u_register.update_lastused(page_item['user'], ts,lastRpc=lastRpc)334 return page_item335 def users(self, *args, **kwargs):336 return self.u_register.users(*args, **kwargs)337 def user_connections(self, user):338 result = {}339 item = self.u_register.read(user)340 if item:341 result = self.c_register.get_multi_items(list(item['connections'].keys()))342 return result343 def connection_pages(self, connection_id):344 result = {}345 item = self.c_register.read(connection_id)346 if item:347 result = self.p_register.get_multi_items(list(item['pages'].keys()))348 return result349 def connections(self, *args, **kwargs):350 return self.c_register.connections(*args, **kwargs)351 def pages(self, *args, **kwargs):352 return self.p_register.pages(*args, **kwargs)353 def tree(self):354 return PagesTreeResolver()355 def getPageProfile(self,page_id):356 lskey = self.site.register.lastused_key(page_id)357 if lskey:358 last_used = self.site.register.sd.get(lskey)359 if last_used and len(last_used)==3:360 return last_used[2]361 def full_cleanup(self, max_age=30, cascade=False):362 with self.u_register as user_register:363 with self.c_register as connection_register:364 with self.p_register as page_register:365 for page_id, page in list(self.pages().items()):366 if page['last_refresh_age'] > max_age:367 self.drop_page(page_id, page_register=page_register,368 connection_register=connection_register,369 user_register=user_register, cascade=cascade)370 for connection_id, connection in list(self.connections().items()):371 if connection['last_refresh_age'] > max_age:372 self._drop_connection(connection_id, connection_register=connection_register,373 user_register=user_register, cascade=cascade)374class BaseRegister(object):375 def __init__(self, site, **kwargs):376 self.site = site377 self.sd = self.site.shared_data378 self.init(**kwargs)379 380 def __enter__(self):381 self.sd.lock(self.prefix)382 return self383 384 def __exit__(self, type, value, tb):385 self.sd.unlock(self.prefix)386 387 def init(self, **kwargs):388 pass389 390 def make_store(self, register_item_id, triggered=None):391 return ServerStore(self, register_item_id=register_item_id, triggered=triggered)392 393 def create(self, obj):394 pass395 396 def item_key(self, register_item_id):397 return '%s_IT_%s' % (self.prefix, register_item_id)398 399 def lastused_key(self, register_item_id):400 return '%s_LU_%s' % (self.prefix, register_item_id)401 402 @lock_item403 def update_lastused(self, register_item_id, ts=None,lastRpc=None,pageProfilers=None):404 last_used_key = self.lastused_key(register_item_id)405 last_used = self.sd.get(last_used_key)406 if last_used:407 ts = max(last_used[1], ts) if ts else last_used[1]408 self.sd.set(last_used_key, (datetime.now(), ts,lastRpc,pageProfilers), 0)409 410 def read(self, register_item_id):411 register_item = self.sd.get(self.item_key(register_item_id))412 if register_item:413 self._set_last_ts_in_item(register_item)414 return register_item415 416 def exists(self, register_item_id):417 return self.sd.get(self.item_key(register_item_id)) is not None418 419 @lock_item420 def write(self, register_item):421 sd = self.sd422 self.log('write', register_item=register_item)423 register_item_id = register_item['register_item_id']424 is_new_item = register_item.pop('_new', None)425 sd.set(self.item_key(register_item_id), register_item, 0)426 if is_new_item:427 self.update_lastused(register_item_id, register_item['start_ts'])428 self.set_index(register_item)429 self.on_write(register_item)430 431 def on_write(self, register_item):432 pass433 434 def _get_index_key(self, index_name=None):435 if index_name == '*':436 ind_key = '%s_MASTERINDEX' % self.prefix437 elif index_name:438 ind_key = '%s_INDEX_%s' % (self.prefix, index_name)439 else:440 ind_key = '%s_INDEX' % self.prefix441 return ind_key442 443 @lock_index444 def set_index(self, register_item, index_name=None):445 sd = self.sd446 register_item_id = register_item['register_item_id']447 ind_key = self._get_index_key(index_name)448 self.log('set_index', register_item_id=register_item['register_item_id'], index_name=index_name,449 ind_key=ind_key)450 index = sd.get(ind_key)451 if not index:452 self.log('set_index (create new)')453 index = {}454 if index_name and index_name != '*':455 self.set_index({'register_item_id': index_name}, index_name='*')456 if self.parent_index and (self.parent_index in register_item):457 index[register_item_id] = register_item[self.parent_index]458 else:459 index[register_item_id] = True460 sd.set(ind_key, index, 0)461 self.log('set_index:writing', index=index)462 463 @lock_index464 def _remove_index(self, register_item_id, index_name=None):465 """Private. It must be called only in locked mode"""466 sd = self.sd467 ind_key = self._get_index_key(index_name)468 index = sd.get(ind_key)469 if index:470 self.log('_remove_index', register_item_id=register_item_id, index_name=index_name, ind_key=ind_key)471 index.pop(register_item_id, None)472 self._index_rewrite(index_name, index)473 474 def _index_rewrite(self, index_name, index):475 self.log('_index_rewrite', index_name=index_name, index=index)476 sd = self.sd477 ind_key = self._get_index_key(index_name)478 if index == {}:479 if index_name and index_name != '*':480 self._remove_index(register_item_id=index_name, index_name='*')481 sd.delete(ind_key)482 self.log('_index_rewrite:index empty: deleted', ind_key=ind_key)483 return484 sd.set(ind_key, index, 0)485 self.log('_index_rewrite:index updated', ind_key=ind_key)486 487 @lock_item488 def pop(self, register_item_id):489 sd = self.sd490 item_key = self.item_key(register_item_id)491 register_item = sd.get(item_key)492 self.log('pop', register_item=register_item)493 sd.delete(item_key)494 sd.delete(self.lastused_key(register_item_id))495 self._remove_index(register_item_id)496 self.on_pop(register_item_id, register_item)497 return register_item498 499 def on_pop(self, register_item_id, register_item):500 pass501 def _set_last_ts_in_item(self, register_item, last_used=None, now=None):502 now = now or datetime.now()503 def age(label):504 return (now - register_item[label]).seconds505 last_used = last_used or self.sd.get(self.lastused_key(register_item['register_item_id']))506 if not last_used:507 return508 # print 'last_used: ',last_used This is 4 pars returned not three509 register_item['last_ts'], register_item['last_user_ts'],register_item['last_rpc_ts'],register_item['profile'] = last_used510 register_item['age'] = age('start_ts')511 if register_item['last_rpc_ts']:512 register_item['last_rpc_age'] = age('last_rpc_ts')513 register_item['last_refresh_age'] = age('last_ts')514 register_item['last_event_age'] = age('last_user_ts')515 @lock_item516 def upd_register_item(self, register_item_id, **kwargs):517 sd = self.sd518 self.log('set_register_item', register_item_id=register_item_id)519 item_key = self.item_key(register_item_id)520 register_item = sd.get(item_key)521 self.log('upd_register_item', register_item_id=register_item_id, register_item=register_item, updates=kwargs)522 if register_item:523 register_item.update(kwargs)524 self.write(register_item)525 def locked(self, key, **kwargs):526 return self.sd.locked(key, **kwargs)527 def lock_register_item(self, register_item_id, max_retry=None,528 lock_time=None,529 retry_time=None):530 return self.sd.lock(self.item_key(register_item_id), max_retry=max_retry, lock_time=lock_time,531 retry_time=retry_time)532 def unlock_register_item(self, register_item_id):533 return self.sd.unlock(self.item_key(register_item_id))534 def items(self, index_name=None):535 """Registered register_items"""536 index = self.sd.get(self._get_index_key(index_name)) or {}537 return self.get_multi_items(list(index.keys()))538 def get_multi_items(self, keys):539 sd = self.sd540 items = sd.get_multi(keys, '%s_IT_' % self.prefix)541 items_lastused = sd.get_multi(keys, '%s_LU_' % self.prefix)542 now = datetime.now()543 for k, register_item in list(items.items()):544 oldlastused = items_lastused.get(k)545 if oldlastused:546 self._set_last_ts_in_item(register_item, oldlastused, now=now)547 return items548 def log(self, command, **kwargs):549 if False:550 print('-->%s:%s\n (%s)' % (self.name, command, str(kwargs)))551class PageRegister(BaseRegister):552 name = 'page'553 prefix = 'PREG'554 parent_index = 'connection_id'555 def create(self, page_id, page, data=None):556 register_item_id = page_id557 start_ts = datetime.now()558 subscribed_tables = getattr(page, 'subscribed_tables', None)559 if subscribed_tables:560 subscribed_tables = subscribed_tables.split(',')561 register_item = dict(562 register_item_id=register_item_id,563 pagename=page.pagename,564 connection_id=page.connection_id,565 start_ts=start_ts,566 _new=True,567 subscribed_tables=subscribed_tables or [],568 user=page.user,569 user_ip=page.user_ip,570 user_agent=page.user_agent,571 datachanges=list(),572 subscribed_paths=set()573 )574 if data:575 register_item['data'] = Bag(data)576 return register_item577 def on_write(self, register_item):578 for table in register_item['subscribed_tables']:579 self.set_index(register_item, index_name=table)580 def on_pop(self, register_item_id, register_item):581 for table in register_item and register_item['subscribed_tables'] or []:582 self._remove_index(register_item['register_item_id'], index_name=table)583 def pages(self, connection_id=None, index_name=None, filters=None):584 """returns a list of page_id and pages.585 if no index is specified all pages are returned.586 if filters return anly pages matching with filters587 filters is a string with the propname and a regex"""588 pages = self.items(index_name=index_name)589 if not filters or filters == '*':590 return pages591 fltdict = dict()592 for flt in filters.split(' AND '):593 fltname, fltvalue = flt.split(':', 1)594 fltdict[fltname] = fltvalue595 filtered = dict()596 def checkpage(page, fltname, fltval):597 value = page[fltname]598 if not value:599 return600 if not isinstance(value, basestring):601 return fltval == value602 try:603 return re.match(fltval, value)604 except:605 return False606 for page_id, page in list(pages.items()):607 page = Bag(page)608 for fltname, fltval in list(fltdict.items()):609 if checkpage(page, fltname, fltval):610 filtered[page_id] = page611 return filtered612class ConnectionRegister(BaseRegister):613 name = 'connection'614 prefix = 'CREG'615 parent_index = 'user'616 def init(self, onAddConnection=None, onRemoveConnection=None):617 self.onAddConnection = onAddConnection618 self.onRemoveConnection = onRemoveConnection619 def create(self, connection_id, connection):620 register_item = dict(621 register_item_id=connection_id,622 start_ts=datetime.now(),623 _new=True,624 connection_name=connection.connection_name,625 user=connection.user,626 user_id=connection.user_id,627 user_name=connection.user_name,628 user_tags=connection.user_tags,629 user_ip=connection.ip,630 user_agent=connection.user_agent,631 browser_name=connection.browser_name,632 pages={}633 )634 return register_item635 def on_write(self, register_item):636 pass637 def on_pop(self, register_item_id, register_item):638 if hasattr(self.onRemoveConnection, '__call__'): # why not callable??? TOTEST639 self.onRemoveConnection(register_item_id)640 def connections(self, user=None, index_name=None):641 return self.items(index_name=index_name)642 def is_guest(self, register_item):643 return register_item['user']=='guest_%s'%register_item['register_item_id']644class UserRegister(BaseRegister):645 name = 'user'646 prefix = 'UREG'647 parent_index = None648 def create(self, user, connection_item):649 register_item = dict(650 register_item_id=user,651 start_ts=datetime.now(),652 _new=True,653 user=user,654 user_id=connection_item['user_id'],655 user_name=connection_item['user_name'],656 user_tags=connection_item['user_tags'],657 avatar_extra=connection_item.get('avatar_extra'),658 connections={}659 )660 return register_item661 def on_write(self, register_item):662 pass663 def on_pop(self, register_item_id, register_item):664 pass665 def users(self, index_name=None):666 return self.items(index_name=index_name)667class PagesTreeResolver(BagResolver):668 classKwargs = {'cacheTime': 1,669 'readOnly': False,670 'user': None,671 'connection_id': None,672 'page': None673 }674 classArgs = ['user']675 def load(self):676 if not self.user:677 return self.list_users()678 elif not self.connection_id:679 return self.list_connections(user=self.user)680 else:681 return self.list_pages(connection_id=self.connection_id)682 def list_users(self):683 usersDict = self._page.site.register.users()684 result = Bag()685 for user, item_user in list(usersDict.items()):686 item = Bag()687 data = item_user.pop('data', None)688 item_user.pop('datachanges', None)689 item_user.pop('datachanges_idx', None)690 item_user.pop('connections')691 item['info'] = Bag([('%s:%s' % (k, str(v).replace('.', '_')), v) for k, v in list(item_user.items())])692 item['data'] = data693 item.setItem('connections', PagesTreeResolver(user=user), cacheTime=3)694 result.setItem(user, item, user=user)695 return result696 def list_connections(self, user):697 connectionsDict = self._page.site.register.user_connections(user)698 result = Bag()699 for connection_id, connection in list(connectionsDict.items()):700 delta = (datetime.now() - connection['start_ts']).seconds701 user = connection['user'] or 'Anonymous'702 connection_name = connection['connection_name']703 itemlabel = '%s (%i)' % (connection_name, delta)704 item = Bag()705 connection.pop('pages', None)706 data = connection.pop('data', None)707 item['info'] = Bag([('%s:%s' % (k, str(v).replace('.', '_')), v) for k, v in list(connection.items())])708 item['data'] = data709 item.setItem('pages', PagesTreeResolver(user=user, connection_id=connection_id), cacheTime=2)710 result.setItem(itemlabel, item, user=user, connection_id=connection_id)711 return result712 def list_pages(self, connection_id):713 pagesDict = self._page.site.register.connection_pages(connection_id)714 result = Bag()715 for page_id, page in list(pagesDict.items()):716 delta = (datetime.now() - page['start_ts']).seconds717 pagename = page['pagename'].replace('.py', '')718 itemlabel = '%s (%i)' % (pagename, delta)719 item = Bag()720 data = page.pop('data', None)721 item['info'] = Bag([('%s:%s' % (k, str(v).replace('.', '_')), v) for k, v in list(page.items())])722 item['data'] = data723 result.setItem(itemlabel, item, user=item['user'], connection_id=item['connection_id'], page_id=page_id)724 return result ...
__init__.py
Source:__init__.py
1from gym.envs.registration import registry, register, make, spec2# Adversarial MuJoCo3# ----------------------------------------4# 2D5#register(6# id='ReacherAdv-v1',7# entry_point='gym.envs.adversarial.mujoco:ReacherEnv',8# timestep_limit=50,9# reward_threshold=-3.75,10#)11register(12 id='InvertedPendulumAdv-v1',13 entry_point='gym.envs.adversarial.mujoco:InvertedPendulumEnv',14 reward_threshold=950.0,15)16register(17 id='InvertedDoublePendulumAdv-v1',18 entry_point='gym.envs.adversarial.mujoco:InvertedDoublePendulumEnv',19 reward_threshold=9100.0,20)21register(22 id='HalfCheetahAdv-v1',23 entry_point='gym.envs.adversarial.mujoco:HalfCheetahEnv',24 reward_threshold=4800.0,25)26register(27 id='HalfCheetahHeelAdv-v1',28 entry_point='gym.envs.adversarial.mujoco:HalfCheetahHeelEnv',29 reward_threshold=4800.0,30)31register(32 id='HalfCheetahTorsoAdv-v1',33 entry_point='gym.envs.adversarial.mujoco:HalfCheetahTorsoEnv',34 reward_threshold=4800.0,35)36register(37 id='HopperAdv-v1',38 entry_point='gym.envs.adversarial.mujoco:HopperEnv',39 reward_threshold=3800.0,40)41register(42 id='Hopper6Adv-v1',43 entry_point='gym.envs.adversarial.mujoco:Hopper6Env',44 reward_threshold=3800.0,45)46register(47 id='HopperHeelAdv-v1',48 entry_point='gym.envs.adversarial.mujoco:HopperHeelEnv',49 reward_threshold=3800.0,50)51register(52 id='HopperHeel6Adv-v1',53 entry_point='gym.envs.adversarial.mujoco:HopperHeel6Env',54 reward_threshold=3800.0,55)56register(57 id='HopperTorso6Adv-v1',58 entry_point='gym.envs.adversarial.mujoco:HopperTorso6Env',59 reward_threshold=3800.0,60)61register(62 id='SwimmerAdv-v1',63 entry_point='gym.envs.adversarial.mujoco:SwimmerEnv',64 reward_threshold=360.0,65)66register(67 id='Walker2dAdv-v1',68 entry_point='gym.envs.adversarial.mujoco:Walker2dEnv',69)70register(71 id='Walker2dHeelAdv-v1',72 entry_point='gym.envs.adversarial.mujoco:Walker2dHeelEnv',73)74register(75 id='Walker2dTorsoAdv-v1',76 entry_point='gym.envs.adversarial.mujoco:Walker2dTorsoEnv',77)78#register(79# id='AntAdv-v1',80# entry_point='gym.envs.adversarial.mujoco:AntEnv',81# reward_threshold=6000.0,82#)83#84#register(85# id='AntHeelAdv-v1',86# entry_point='gym.envs.adversarial.mujoco:AntHeelEnv',87# reward_threshold=6000.0,88#)89#90#register(91# id='HumanoidAdv-v1',92# entry_point='gym.envs.adversarial.mujoco:HumanoidEnv',93#)94#95#register(96# id='HumanoidHeelAdv-v1',97# entry_point='gym.envs.adversarial.mujoco:HumanoidHeelEnv',98#)99#100#register(101# id='HumanoidStandupAdv-v1',102# entry_point='gym.envs.adversarial.mujoco:HumanoidStandupEnv',103#)104## Adversarial Classic105## ----------------------------------------106#107#register(108# id='CartPoleAdv-v0',109# entry_point='gym.envs.adversarial.classic_control:CartPoleEnv',110# timestep_limit=200,111# reward_threshold=195.0,112#)113#114#register(115# id='CartPoleAdv-v1',116# entry_point='gym.envs.adversarial.classic_control:CartPoleEnv',117# timestep_limit=500,118# reward_threshold=475.0,119#)120#121#register(122# id='MountainCarAdv-v0',123# entry_point='gym.envs.adversarial.classic_control:MountainCarEnv',124# timestep_limit=200,125# reward_threshold=-110.0,126#)127#128#register(129# id='MountainCarContinuousAdv-v0',130# entry_point='gym.envs.adversarial.classic_control:Continuous_MountainCarEnv',131# timestep_limit=999,132# reward_threshold=90.0,133#)134#135#register(136# id='PendulumAdv-v0',137# entry_point='gym.envs.adversarial.classic_control:PendulumEnv',138# timestep_limit=200,139#)140#141#register(142# id='AcrobotAdv-v1',143# entry_point='gym.envs.adversarial.classic_control:AcrobotEnv',144# timestep_limit=500,145#)146## Algorithmic147## ----------------------------------------148#149#register(150# id='Copy-v0',151# entry_point='gym.envs.algorithmic:CopyEnv',152# timestep_limit=200,153# reward_threshold=25.0,154#)155#156#register(157# id='RepeatCopy-v0',158# entry_point='gym.envs.algorithmic:RepeatCopyEnv',159# timestep_limit=200,160# reward_threshold=75.0,161#)162#163#register(164# id='ReversedAddition-v0',165# entry_point='gym.envs.algorithmic:ReversedAdditionEnv',166# kwargs={'rows' : 2},167# timestep_limit=200,168# reward_threshold=25.0,169#)170#171#register(172# id='ReversedAddition3-v0',173# entry_point='gym.envs.algorithmic:ReversedAdditionEnv',174# kwargs={'rows' : 3},175# timestep_limit=200,176# reward_threshold=25.0,177#)178#179#register(180# id='DuplicatedInput-v0',181# entry_point='gym.envs.algorithmic:DuplicatedInputEnv',182# timestep_limit=200,183# reward_threshold=9.0,184#)185#186#register(187# id='Reverse-v0',188# entry_point='gym.envs.algorithmic:ReverseEnv',189# timestep_limit=200,190# reward_threshold=25.0,191#)192#193## Classic194## ----------------------------------------195#196#register(197# id='CartPole-v0',198# entry_point='gym.envs.classic_control:CartPoleEnv',199# timestep_limit=200,200# reward_threshold=195.0,201#)202#203#register(204# id='CartPole-v1',205# entry_point='gym.envs.classic_control:CartPoleEnv',206# timestep_limit=500,207# reward_threshold=475.0,208#)209#210#register(211# id='MountainCar-v0',212# entry_point='gym.envs.classic_control:MountainCarEnv',213# timestep_limit=200,214# reward_threshold=-110.0,215#)216#217#register(218# id='MountainCarContinuous-v0',219# entry_point='gym.envs.classic_control:Continuous_MountainCarEnv',220# timestep_limit=999,221# reward_threshold=90.0,222#)223#224#register(225# id='Pendulum-v0',226# entry_point='gym.envs.classic_control:PendulumEnv',227# timestep_limit=200,228#)229#230#register(231# id='Acrobot-v1',232# entry_point='gym.envs.classic_control:AcrobotEnv',233# timestep_limit=500,234#)235#236## Box2d237## ----------------------------------------238#239#register(240# id='LunarLander-v2',241# entry_point='gym.envs.box2d:LunarLander',242# timestep_limit=1000,243# reward_threshold=200,244#)245#246#register(247# id='LunarLanderContinuous-v2',248# entry_point='gym.envs.box2d:LunarLanderContinuous',249# timestep_limit=1000,250# reward_threshold=200,251#)252#253#register(254# id='BipedalWalker-v2',255# entry_point='gym.envs.box2d:BipedalWalker',256# timestep_limit=1600,257# reward_threshold=300,258#)259#260#register(261# id='BipedalWalkerHardcore-v2',262# entry_point='gym.envs.box2d:BipedalWalkerHardcore',263# timestep_limit=2000,264# reward_threshold=300,265#)266#267#register(268# id='CarRacing-v0',269# entry_point='gym.envs.box2d:CarRacing',270# timestep_limit=1000,271# reward_threshold=900,272#)273#274## Toy Text275## ----------------------------------------276#277#register(278# id='Blackjack-v0',279# entry_point='gym.envs.toy_text:BlackjackEnv',280#)281#282#register(283# id='FrozenLake-v0',284# entry_point='gym.envs.toy_text:FrozenLakeEnv',285# kwargs={'map_name' : '4x4'},286# timestep_limit=100,287# reward_threshold=0.78, # optimum = .8196288#)289#290#register(291# id='FrozenLake8x8-v0',292# entry_point='gym.envs.toy_text:FrozenLakeEnv',293# kwargs={'map_name' : '8x8'},294# timestep_limit=200,295# reward_threshold=0.99, # optimum = 1296#)297#298#register(299# id='NChain-v0',300# entry_point='gym.envs.toy_text:NChainEnv',301# timestep_limit=1000,302#)303#304#register(305# id='Roulette-v0',306# entry_point='gym.envs.toy_text:RouletteEnv',307# timestep_limit=100,308#)309#310#register(311# id='Taxi-v1',312# entry_point='gym.envs.toy_text.taxi:TaxiEnv',313# timestep_limit=200,314# reward_threshold=9.7, # optimum = 10.2315#)316#317#register(318# id='GuessingGame-v0',319# entry_point='gym.envs.toy_text.guessing_game:GuessingGame',320# timestep_limit=200,321#)322#323#register(324# id='HotterColder-v0',325# entry_point='gym.envs.toy_text.hotter_colder:HotterColder',326# timestep_limit=200,327#)328#329## Mujoco330## ----------------------------------------331#332## 2D333#334#register(335# id='Reacher-v1',336# entry_point='gym.envs.mujoco:ReacherEnv',337# timestep_limit=50,338# reward_threshold=-3.75,339#)340#341#register(342# id='InvertedPendulum-v1',343# entry_point='gym.envs.mujoco:InvertedPendulumEnv',344# reward_threshold=950.0,345#)346#347#register(348# id='InvertedDoublePendulum-v1',349# entry_point='gym.envs.mujoco:InvertedDoublePendulumEnv',350# reward_threshold=9100.0,351#)352#353#register(354# id='HalfCheetah-v1',355# entry_point='gym.envs.mujoco:HalfCheetahEnv',356# reward_threshold=4800.0,357#)358#359#register(360# id='Hopper-v1',361# entry_point='gym.envs.mujoco:HopperEnv',362# reward_threshold=3800.0,363#)364#365#register(366# id='Swimmer-v1',367# entry_point='gym.envs.mujoco:SwimmerEnv',368# reward_threshold=360.0,369#)370#371#register(372# id='Walker2d-v1',373# entry_point='gym.envs.mujoco:Walker2dEnv',374#)375#376#register(377# id='Ant-v1',378# entry_point='gym.envs.mujoco:AntEnv',379# reward_threshold=6000.0,380#)381#382#register(383# id='Humanoid-v1',384# entry_point='gym.envs.mujoco:HumanoidEnv',385#)386#register(387# id='HumanoidStandup-v1',388# entry_point='gym.envs.mujoco:HumanoidStandupEnv',389#)390#391## Atari392## ----------------------------------------393#394## # print ', '.join(["'{}'".format(name.split('.')[0]) for name in atari_py.list_games()])395#for game in ['air_raid', 'alien', 'amidar', 'assault', 'asterix', 'asteroids', 'atlantis',396# 'bank_heist', 'battle_zone', 'beam_rider', 'berzerk', 'bowling', 'boxing', 'breakout', 'carnival',397# 'centipede', 'chopper_command', 'crazy_climber', 'demon_attack', 'double_dunk',398# 'elevator_action', 'enduro', 'fishing_derby', 'freeway', 'frostbite', 'gopher', 'gravitar',399# 'ice_hockey', 'jamesbond', 'journey_escape', 'kangaroo', 'krull', 'kung_fu_master',400# 'montezuma_revenge', 'ms_pacman', 'name_this_game', 'phoenix', 'pitfall', 'pong', 'pooyan',401# 'private_eye', 'qbert', 'riverraid', 'road_runner', 'robotank', 'seaquest', 'skiing',402# 'solaris', 'space_invaders', 'star_gunner', 'tennis', 'time_pilot', 'tutankham', 'up_n_down',403# 'venture', 'video_pinball', 'wizard_of_wor', 'yars_revenge', 'zaxxon']:404# for obs_type in ['image', 'ram']:405# # space_invaders should yield SpaceInvaders-v0 and SpaceInvaders-ram-v0406# name = ''.join([g.capitalize() for g in game.split('_')])407# if obs_type == 'ram':408# name = '{}-ram'.format(name)409#410# nondeterministic = False411# if game == 'elevator_action' and obs_type == 'ram':412# # ElevatorAction-ram-v0 seems to yield slightly413# # non-deterministic observations about 10% of the time. We414# # should track this down eventually, but for now we just415# # mark it as nondeterministic.416# nondeterministic = True417#418# register(419# id='{}-v0'.format(name),420# entry_point='gym.envs.atari:AtariEnv',421# kwargs={'game': game, 'obs_type': obs_type, 'repeat_action_probability': 0.25},422# timestep_limit=10000,423# nondeterministic=nondeterministic,424# )425#426# register(427# id='{}-v3'.format(name),428# entry_point='gym.envs.atari:AtariEnv',429# kwargs={'game': game, 'obs_type': obs_type},430# timestep_limit=100000,431# nondeterministic=nondeterministic,432# )433#434# # Standard Deterministic (as in the original DeepMind paper)435# if game == 'space_invaders':436# frameskip = 3437# else:438# frameskip = 4439#440# # Use a deterministic frame skip.441# register(442# id='{}Deterministic-v0'.format(name),443# entry_point='gym.envs.atari:AtariEnv',444# kwargs={'game': game, 'obs_type': obs_type, 'frameskip': frameskip, 'repeat_action_probability': 0.25},445# timestep_limit=100000,446# nondeterministic=nondeterministic,447# )448#449# register(450# id='{}Deterministic-v3'.format(name),451# entry_point='gym.envs.atari:AtariEnv',452# kwargs={'game': game, 'obs_type': obs_type, 'frameskip': frameskip},453# timestep_limit=100000,454# nondeterministic=nondeterministic,455# )456#457# register(458# id='{}NoFrameskip-v0'.format(name),459# entry_point='gym.envs.atari:AtariEnv',460# kwargs={'game': game, 'obs_type': obs_type, 'frameskip': 1, 'repeat_action_probability': 0.25}, # A frameskip of 1 means we get every frame461# timestep_limit=frameskip * 100000,462# nondeterministic=nondeterministic,463# )464#465# # No frameskip. (Atari has no entropy source, so these are466# # deterministic environments.)467# register(468# id='{}NoFrameskip-v3'.format(name),469# entry_point='gym.envs.atari:AtariEnv',470# kwargs={'game': game, 'obs_type': obs_type, 'frameskip': 1}, # A frameskip of 1 means we get every frame471# timestep_limit=frameskip * 100000,472# nondeterministic=nondeterministic,473# )474#475## Board games476## ----------------------------------------477#478#register(479# id='Go9x9-v0',480# entry_point='gym.envs.board_game:GoEnv',481# kwargs={482# 'player_color': 'black',483# 'opponent': 'pachi:uct:_2400',484# 'observation_type': 'image3c',485# 'illegal_move_mode': 'lose',486# 'board_size': 9,487# },488# # The pachi player seems not to be determistic given a fixed seed.489# # (Reproduce by running 'import gym; h = gym.make('Go9x9-v0'); h.seed(1); h.reset(); h.step(15); h.step(16); h.step(17)' a few times.)490# #491# # This is probably due to a computation time limit.492# nondeterministic=True,493#)494#495#register(496# id='Go19x19-v0',497# entry_point='gym.envs.board_game:GoEnv',498# kwargs={499# 'player_color': 'black',500# 'opponent': 'pachi:uct:_2400',501# 'observation_type': 'image3c',502# 'illegal_move_mode': 'lose',503# 'board_size': 19,504# },505# nondeterministic=True,506#)507#508#register(509# id='Hex9x9-v0',510# entry_point='gym.envs.board_game:HexEnv',511# kwargs={512# 'player_color': 'black',513# 'opponent': 'random',514# 'observation_type': 'numpy3c',515# 'illegal_move_mode': 'lose',516# 'board_size': 9,517# },518#)519#520## Debugging521## ----------------------------------------522#523#register(524# id='OneRoundDeterministicReward-v0',525# entry_point='gym.envs.debugging:OneRoundDeterministicRewardEnv',526# local_only=True527#)528#529#register(530# id='TwoRoundDeterministicReward-v0',531# entry_point='gym.envs.debugging:TwoRoundDeterministicRewardEnv',532# local_only=True533#)534#535#register(536# id='OneRoundNondeterministicReward-v0',537# entry_point='gym.envs.debugging:OneRoundNondeterministicRewardEnv',538# local_only=True539#)540#541#register(542# id='TwoRoundNondeterministicReward-v0',543# entry_point='gym.envs.debugging:TwoRoundNondeterministicRewardEnv',544# local_only=True,545#)546#547## Parameter tuning548## ----------------------------------------549#register(550# id='ConvergenceControl-v0',551# entry_point='gym.envs.parameter_tuning:ConvergenceControl',552#)553#554#register(555# id='CNNClassifierTraining-v0',556# entry_point='gym.envs.parameter_tuning:CNNClassifierTraining',557#)558#559## Safety560## ----------------------------------------561#562## interpretability envs563#register(564# id='PredictActionsCartpole-v0',565# entry_point='gym.envs.safety:PredictActionsCartpoleEnv',566# timestep_limit=200,567#)568#569#register(570# id='PredictObsCartpole-v0',571# entry_point='gym.envs.safety:PredictObsCartpoleEnv',572# timestep_limit=200,573#)574#575## semi_supervised envs576# # probably the easiest:577#register(578# id='SemisuperPendulumNoise-v0',579# entry_point='gym.envs.safety:SemisuperPendulumNoiseEnv',580# timestep_limit=200,581#)582# # somewhat harder because of higher variance:583#register(584# id='SemisuperPendulumRandom-v0',585# entry_point='gym.envs.safety:SemisuperPendulumRandomEnv',586# timestep_limit=200,587#)588# # probably the hardest because you only get a constant number of rewards in total:589#register(590# id='SemisuperPendulumDecay-v0',591# entry_point='gym.envs.safety:SemisuperPendulumDecayEnv',592# timestep_limit=200,593#)594#595## off_switch envs596#register(597# id='OffSwitchCartpole-v0',598# entry_point='gym.envs.safety:OffSwitchCartpoleEnv',599# timestep_limit=200,600#)601#602#register(603# id='OffSwitchCartpoleProb-v0',604# entry_point='gym.envs.safety:OffSwitchCartpoleProbEnv',605# timestep_limit=200,...
cin_functions.py
Source:cin_functions.py
1#! /usr/bin/python2# -*- coding: utf-8 -*-3import time4import socket5import cin_constants6import cin_register_map7#import argparse 8# ============================================================================9# Socket10# ============================================================================11try:12 cin_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)13 socket.setdefaulttimeout(0.1)14except socket.error, msg:15 cin_sock = None16 print 'could not open socket'17 sys.exit(1)18# ============================================================================19# Functions20# ============================================================================21# ------------------------------------------------------< common functions >22def ByteToHex( byteStr ):23 """24 Convert a byte string to it's hex string representation e.g. for output.25 """26 27 # Uses list comprehension which is a fractionally faster implementation than28 # the alternative, more readable, implementation below29 # 30 # hex = []31 # for aChar in byteStr:32 # hex.append( "%02X " % ord( aChar ) )33 #34 # return ''.join( hex ).strip() 35 return ''.join( [ "%02X" % ord( x ) for x in byteStr ] ).strip()36def HexToByte( hexStr ):37 """38 Convert a string hex byte values into a byte string. The Hex Byte values may39 or may not be space separated.40 """41 # The list comprehension implementation is fractionally slower in this case42 #43 # hexStr = ''.join( hexStr.split(" ") )44 # return ''.join( ["%c" % chr( int ( hexStr[i:i+2],16 ) ) \45 # for i in range(0, len( hexStr ), 2) ] )46 bytes = []47 hexStr = ''.join( hexStr.split(" ") )48 for i in range(0, len(hexStr), 2):49 bytes.append( chr( int (hexStr[i:i+2], 16 ) ) )50 return ''.join( bytes )51 52def WriteReg( regAddr, value, verify ):53 cin_sock.sendto(HexToByte(regAddr + value ),(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_COMMAND_PORT))54 time.sleep(0.001)55 return 1 # bypass for now56# if verify == 1:57# cin_sock.sendto(HexToByte(cin_register_map.REG_READ_ADDRESS + regAddr ),(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_COMMAND_PORT))58# cin_sock.sendto(HexToByte(cin_register_map.REG_COMMAND + CMD_READ ),(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_COMMAND_PORT))59# cin_sock.settimeout(1.0)60# try:61# data, addr = cin_sock.recvfrom(1024)62# except cin_sock.timeout, msg:63# return 064# 65# if ByteToHex(data) == value and ByteToHex(addr) == regAddr:66# return 167# else:68# return 069# else:70# return 171 72 73def ReadReg( regAddr ):74 cin_sock.sendto(HexToByte(cin_register_map.REG_READ_ADDRESS + regAddr ),(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_COMMAND_PORT))75 time.sleep(0.1)76 cin_sock.sendto(HexToByte(cin_register_map.REG_COMMAND + cin_register_map.CMD_READ_REG ),(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_COMMAND_PORT))77 #time.sleep(0.1)78 cin_sock.settimeout(1.0)79 try:80 data, addr = cin_sock.recvfrom(1024)81 except socket.timeout:82 time.sleep(0.1)83 cin_sock.sendto(HexToByte(cin_register_map.REG_COMMAND + cin_register_map.CMD_READ_REG ),(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_COMMAND_PORT))84 cin_sock.settimeout(1.0)85 data, addr = cin_sock.recvfrom(1024)86 return ByteToHex(data)87# ---------------------------------------------< Connect to QT DAQ88def connect2daq( ):89 cin_sock.sendto(( "dummy data" ),(cin_constants.CIN_FRAME_IP, cin_constants.CIN_STREAM_OUT_PORT))90# ---------------------------------------------< Configuration FPGA functions >91def getFrmDone(frm_done):92 temp = bin((int(ReadReg( cin_register_map.REG_FPGA_STATUS)[4:8],16)))[2:].zfill(16)93 frm_done = int(temp[-16])94 return frm_done95def current_calc(reg_val, current):96 if (int(reg_val[4:8],16) >= int("8000",16)):97# current = 0.000000238*((int("10000",16) - int(reg_val[4:8],16)))/0.00398 current = 0.000000476*((int("10000",16) - int(reg_val[4:8],16)))/0.00399 else:100# current = 0.000000238*(int(reg_val[4:8],16))/0.003101 current = 0.000000476*(int(reg_val[4:8],16))/0.003102 return current103def CINPowerUp():104 print " "105 print "Powering On CIN Board ........ "106 if WriteReg( cin_register_map.REG_PS_ENABLE, "000F", 1) != 1:107 print 'Write register could not be verified. Aborting.'108 sys.exit(1)109 WriteReg( cin_register_map.REG_COMMAND, cin_register_map.CMD_PS_ENABLE, 1)110 111 if WriteReg( cin_register_map.REG_PS_ENABLE, "001F", 1) != 1:112 print 'Write register could not be verified. Aborting.'113 sys.exit(1)114 WriteReg( cin_register_map.REG_COMMAND, cin_register_map.CMD_PS_ENABLE, 0)115 time.sleep(2)116def CINPowerDown():117 print " "118 print "Powering Off CIN Board ........ "119# if WriteReg( REG_PS_ENABLE, "000F", 1) != 1:120# print 'Write register could not be verified. Aborting.'121# sys.exit(1)122# WriteReg( REG_COMMAND, CMD_PS_ENABLE, 1)123# 124# time.sleep(2)125# 126 if WriteReg( cin_register_map.REG_PS_ENABLE, "0000", 1) != 1:127 print 'Write register could not be verified. Aborting.'128 sys.exit(1)129 WriteReg( cin_register_map.REG_COMMAND, cin_register_map.CMD_PS_ENABLE, 0)130 time.sleep(1)131def CIN_FP_PowerUp():132 print " "133 print "Powering On Front Panel Boards ........ "134 if WriteReg( cin_register_map.REG_PS_ENABLE, "003F", 1) != 1:135 print 'Write register could not be verified. Aborting.'136 sys.exit(1)137 WriteReg( cin_register_map.REG_COMMAND, cin_register_map.CMD_PS_ENABLE, 1)138 139 time.sleep(4)140def CIN_FP_PowerDown():141 print " "142 print "Powering Off Front Panel Boards ........ "143 if WriteReg( cin_register_map.REG_PS_ENABLE, "001F", 1) != 1:144 print 'Write register could not be verified. Aborting.'145 sys.exit(1)146 WriteReg( cin_register_map.REG_COMMAND, cin_register_map.CMD_PS_ENABLE, 1)147 148 time.sleep(1)149def setCameraOff():150 print " "151 print "Turning off Bias and Clocks in camera head ........ "152 if WriteReg( cin_register_map.REG_BIASCONFIGREGISTER0_REG, "0000", 1) != 1:153 print 'Write register could not be verified. Aborting.'154 sys.exit(1)155 if WriteReg( cin_register_map.REG_CLOCKCONFIGREGISTER0_REG, "0000", 1) != 1:156 print 'Write register could not be verified. Aborting.'157 sys.exit(1)158 159 time.sleep(1)160 161def clearFocusBit():162 # Get Value from Clock&Bias Control163 reg_val = ReadReg("8205")164 #print reg_val[4:]165 temp = str(hex((int(reg_val[7:],base=16)&0xD)).lstrip("0x"))166 #print temp167 str_val=reg_val[4:5]+reg_val[5:6]+reg_val[6:7]+temp168 WriteReg("8205", str_val, 1)169def setFocusBit():170 # Get Value from Clock&Bias Control171 reg_val = ReadReg("8205")172 #print reg_val[4:]173 174 #temp = str(hex((int(reg_val[7:],base=16)|0x2)).lstrip("0x"))175 #print temp176 177 str_val=reg_val[4:5]+reg_val[5:6]+reg_val[6:7]+"A" #temp178 WriteReg("8205", str_val, 1)179def loadFrmFirmware(filename):180 print " "181 print "Loading Frame (FRM) FPGA Configuration Data ........... "182 print "File: " + filename183 WriteReg( cin_register_map.REG_COMMAND, cin_register_map.CMD_PROGRAM_FRAME, 0)184 time.sleep(1)185 with open(filename, 'rb') as f:186 read_data = f.read(128)187 while read_data != "":188 cin_sock.sendto(read_data,(cin_constants.CIN_CONFIG_IP, cin_constants.CIN_STREAM_IN_PORT))189 time.sleep(0.000125) # For UDP flow control (was 0.002)190 read_data = f.read(128)191 f.closed192 time.sleep(1)193 WriteReg( cin_register_map.REG_FRM_RESET, "0001", 0)194 WriteReg( cin_register_map.REG_FRM_RESET, "0000", 0)195 time.sleep(1)196 # need to verify sucess!197def loadCameraConfigFile(filename):198 print " "199 print "Loading Configuration File to CCD Camera ........... "200 print "File: " + filename201 with open(filename, 'r') as f:202 file_line = f.readline()203 while file_line != "":204 if (file_line[:1] != "#") :205 read_addr = file_line[:4]206 read_data = file_line[5:9]207 #print read_addr + read_data208 WriteReg( read_addr, read_data, 0 )209# time.sleep(0.1)210 file_line = f.readline()211 f.closed212def flashFpCfgLeds():213# Test Front Panel LEDs214 print " "215 print "Flashing CFG FP LEDs ............ "216 WriteReg( cin_register_map.REG_SANDBOX_REG00, "AAAA", 1)217 time.sleep(1)218 WriteReg( cin_register_map.REG_SANDBOX_REG00, "5555", 1)219 time.sleep(1)220 WriteReg( cin_register_map.REG_SANDBOX_REG00, "FFFF", 1)221 time.sleep(1)222 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0001", 1)223 time.sleep(0.4)224 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0002", 1)225 time.sleep(0.4)226 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0004", 1)227 time.sleep(0.4)228 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0008", 1)229 time.sleep(0.4)230 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0010", 1)231 time.sleep(0.4)232 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0020", 1)233 time.sleep(0.4)234 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0040", 1)235 time.sleep(0.4)236 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0080", 1)237 time.sleep(0.4)238 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0100", 1)239 time.sleep(0.4)240 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0200", 1)241 time.sleep(0.4)242 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0400", 1)243 time.sleep(0.4)244 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0800", 1)245 time.sleep(0.4)246 WriteReg( cin_register_map.REG_SANDBOX_REG00, "1000", 1)247 time.sleep(0.4)248 WriteReg( cin_register_map.REG_SANDBOX_REG00, "2000", 1)249 time.sleep(0.4)250 WriteReg( cin_register_map.REG_SANDBOX_REG00, "4000", 1)251 time.sleep(0.4)252 WriteReg( cin_register_map.REG_SANDBOX_REG00, "8000", 1)253 time.sleep(0.4)254 WriteReg( cin_register_map.REG_SANDBOX_REG00, "0000", 1)255# ---------------------------------------------< Frame FPGA functions >256def flashFpFrmLeds():257# Test Front Panel LEDs258 print " "259 print "Flashing FRM FP LEDs ............ "260 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0004", 1)261 print "RED ............ "262 time.sleep(0.5)263 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0008", 1)264 print "GRN ............ "265 time.sleep(0.5)266 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "000C", 1)267 print "YEL ............ "268 time.sleep(0.5)269 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0010", 1)270 print "RED ............ "271 time.sleep(0.5)272 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0020", 1)273 print "GRN ............ "274 time.sleep(0.5)275 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0030", 1)276 print "YEL ............ "277 time.sleep(0.5)278 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0040", 1)279 print "RED ............ "280 time.sleep(0.5)281 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0080", 1)282 print "GRN ............ "283 time.sleep(0.5)284 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "00C0", 1)285 print "YEL ............ "286 time.sleep(0.5)287 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0100", 1)288 print "RED ............ "289 time.sleep(0.5)290 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0200", 1)291 print "GRN ............ "292 time.sleep(0.5)293 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0300", 1)294 print "YEL ............ "295 time.sleep(0.5)296 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0400", 1)297 print "RED ............ "298 time.sleep(0.5)299 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0800", 1)300 print "GRN ............ "301 time.sleep(0.5)302 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0C00", 1)303 print "YEL ............ "304 time.sleep(0.5)305 WriteReg( cin_register_map.REG_FRM_SANDBOX_REG00, "0000", 1)306 print "All OFF ............ "307 time.sleep(0.5)...
urls.py
Source:urls.py
...3from tastypie.api import Api4from iondb.rundb import api5from iondb.rundb import mesh_api6v1_api = Api(api_name="v1")7v1_api.register(api.GlobalConfigResource())8v1_api.register(api.ExperimentResource())9v1_api.register(api.ResultsResource())10v1_api.register(api.ReferenceGenomeResource())11v1_api.register(api.ObsoleteReferenceGenomeResource())12v1_api.register(api.LocationResource())13v1_api.register(api.RigResource())14v1_api.register(api.PluginResource())15v1_api.register(api.PluginResultResource())16v1_api.register(api.PluginResultJobResource())17v1_api.register(api.FileServerResource())18v1_api.register(api.TFMetricsResource())19v1_api.register(api.LibMetricsResource())20v1_api.register(api.AnalysisMetricsResource())21v1_api.register(api.QualityMetricsResource())22v1_api.register(api.RunTypeResource())23v1_api.register(api.dnaBarcodeResource())24v1_api.register(api.PlannedExperimentDbResource())25v1_api.register(api.PlannedExperimentResource())26v1_api.register(api.PublisherResource())27v1_api.register(api.ContentResource())28v1_api.register(api.ContentUploadResource())29v1_api.register(api.UserEventLogResource())30v1_api.register(api.KitInfoResource())31v1_api.register(api.KitPartResource())32v1_api.register(api.SequencingKitInfoResource())33v1_api.register(api.SequencingKitPartResource())34v1_api.register(api.ActiveSequencingKitInfoResource())35v1_api.register(api.ActivePGMSequencingKitInfoResource())36v1_api.register(api.ActiveProtonSequencingKitInfoResource())37v1_api.register(api.LibraryKitInfoResource())38v1_api.register(api.LibraryKitPartResource())39v1_api.register(api.ActiveLibraryKitInfoResource())40v1_api.register(api.ActivePGMLibraryKitInfoResource())41v1_api.register(api.ActiveProtonLibraryKitInfoResource())42v1_api.register(api.LibraryKeyResource())43v1_api.register(api.ThreePrimeadapterResource())44v1_api.register(api.TemplateResource())45v1_api.register(api.MessageResource())46v1_api.register(api.MonitorDataResource())47v1_api.register(api.GetSoftwareInfo())48v1_api.register(api.TorrentSuite())49v1_api.register(api.NetworkResource())50v1_api.register(api.IonReporter())51v1_api.register(api.ProjectResource())52v1_api.register(api.ProjectResultsResource())53v1_api.register(api.UserResource())54v1_api.register(api.CompositeResultResource())55v1_api.register(api.CompositeExperimentResource())56v1_api.register(api.MonitorResultResource())57v1_api.register(api.ApplProductResource())58v1_api.register(api.QCTypeResource())59v1_api.register(api.PlannedExperimentQCResource())60v1_api.register(api.EventLogResource())61v1_api.register(api.EmailAddressResource())62v1_api.register(api.ChipResource())63v1_api.register(api.AccountResource())64v1_api.register(api.SampleResource())65v1_api.register(api.ExperimentAnalysisSettingsResource())66v1_api.register(api.CompositeDataManagementResource())67v1_api.register(api.DataManagementHistoryResource())68v1_api.register(api.ClusterInfoHistoryResource())69v1_api.register(api.IonChefPrepKitInfoResource())70v1_api.register(api.ActiveIonChefPrepKitInfoResource())71v1_api.register(api.ActiveIonChefLibraryPrepKitInfoResource())72v1_api.register(api.AvailableIonChefPlannedExperimentResource())73v1_api.register(api.AvailableIonChefPlannedExperimentSummaryResource())74v1_api.register(api.IonChefPlanTemplateResource())75v1_api.register(api.IonChefPlanTemplateSummaryResource())76v1_api.register(api.GetChefScriptInfoResource())77v1_api.register(api.AvailableOneTouchPlannedExperimentResource())78v1_api.register(api.AvailableOneTouchPlannedExperimentSummaryResource())79v1_api.register(api.OneTouchPlanTemplateResource())80v1_api.register(api.OneTouchPlanTemplateSummaryResource())81v1_api.register(api.AvailablePlannedExperimentSummaryResource())82v1_api.register(api.PlanTemplateSummaryResource())83v1_api.register(api.PlanTemplateBasicInfoResource())84v1_api.register(api.ApplicationGroupResource())85v1_api.register(api.SampleGroupType_CVResource())86v1_api.register(api.SampleAnnotation_CVResource())87v1_api.register(api.SampleSetResource())88v1_api.register(api.SampleSetItemResource())89v1_api.register(api.SampleSetItemInfoResource())90v1_api.register(api.SampleAttributeResource())91v1_api.register(api.SampleAttributeDataTypeResource())92v1_api.register(api.SamplePrepDataResource())93v1_api.register(api.AnalysisArgsResource())94v1_api.register(api.FlowOrderResource())95v1_api.register(api.common_CVResource())96v1_api.register(api.FileMonitorResource())97v1_api.register(api.SupportUploadResource())98v1_api.register(api.GetChefCartridgeUsageResource())99v1_api.register(api.ChefPcrPlateconfigResource())100v1_api.register(api.PrepopulatedPlanningSessionResource())101v1_api.register(api.IonMeshNodeResource())102v1_mesh_api = Api(api_name="v1")103v1_mesh_api.register(mesh_api.MeshCompositeExperimentResource())104v1_mesh_api.register(mesh_api.MeshPrefetchResource())105v1_mesh_api.register(mesh_api.AutoDiscoveredHostsResource())106urlpatterns = patterns(107 "iondb.rundb",108 url(r"^$", "data.views.rundb_redirect"),109 url(r"^metaDataLog/(?P<pkR>.*)/$", "views.viewLog", name="report_metadata_log"),110 (r"^getCSV.csv$", "views.getCSV"),111 (r"^getPDF/(?P<pkR>.*)/$", "views.PDFGen"),112 (r"^getOldPDF/(?P<pkR>.*)/$", "views.PDFGenOld"),113 (r"^tfcsv/$", "views.tf_csv"),114 (r"^getPDF/(?P<pkR>.*)/$", "views.PDFGen"),115 (r"^islive/(\d+)$", "ajax.analysis_liveness"),116 (r"^star/(\d+)/(\d)$", "ajax.starRun"),117 (r"^progress_bar/(\d+)$", "ajax.progress_bar"),118 (r"^api$", "ajax.apibase"),119 (r"^changelibrary/(\d+)$", "ajax.change_library"),...
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!