Best Python code snippet using playwright-python
remote.py
Source:remote.py
...81 proto = project_cfg[CONFIG_PROTOCOL]82 host = project_cfg[CONFIG_HOST]83 self._project = ProjectService(host, version)84 self._project.base_protocol = proto85 self._project.set_auth(self._token_project)86 def _init_metadata_service(self, version):87 """88 Method to initialize the Metadata Service from the config data89 Args:90 version (string): Version of Boss API to use.91 Returns:92 None93 Raises:94 (KeyError): if given invalid version.95 """96 metadata_cfg = self._load_config_section(CONFIG_METADATA_SECTION)97 self._token_metadata = metadata_cfg[CONFIG_TOKEN]98 proto = metadata_cfg[CONFIG_PROTOCOL]99 host = metadata_cfg[CONFIG_HOST]100 self._metadata = MetadataService(host, version)101 self._metadata.base_protocol = proto102 self._metadata.set_auth(self._token_metadata)103 def _init_volume_service(self, version):104 """105 Method to initialize the Volume Service from the config data106 Args:107 version (string): Version of Boss API to use.108 Returns:109 None110 Raises:111 (KeyError): if given invalid version.112 """113 volume_cfg = self._load_config_section(CONFIG_VOLUME_SECTION)114 self._token_volume = volume_cfg[CONFIG_TOKEN]115 proto = volume_cfg[CONFIG_PROTOCOL]116 host = volume_cfg[CONFIG_HOST]117 self._volume = VolumeService(host, version)118 self._volume.base_protocol = proto119 self._volume.set_auth(self._token_volume)120 def _load_config_section(self, section_name):121 """122 Method to load the specific Service section from the config file if it123 exists, or fall back to the default124 Args:125 section_name (str): The desired service section name126 Returns:127 (dict): the section parameters128 """129 if self._config.has_section(section_name):130 # Load specific section131 section = dict(self._config.items(section_name))132 elif self._config.has_section("Default"):133 # Load Default section134 section = dict(self._config.items("Default"))135 else:136 raise KeyError((137 "'{}' was not found in the configuration file and no default " +138 "configuration was provided."139 ).format(section_name))140 # Make sure section is valid141 if "protocol" in section and "host" in section and "token" in section:142 return section143 else:144 raise KeyError(145 "Missing values in configuration data. " +146 "Must contain: protocol, host, token"147 )148 @property149 def token_project(self):150 """151 Returns the current token152 """153 return self._token_project154 @token_project.setter155 def token_project(self, value):156 self._token_project = value157 self.project_service.set_auth(self._token_project)158 @property159 def token_metadata(self):160 """161 Returns metadata for the current token162 """163 return self._token_metadata164 @token_metadata.setter165 def token_metadata(self, value):166 self._token_metadata = value167 self.metadata_service.set_auth(self._token_metadata)168 @property169 def token_volume(self):170 """171 Get the current token volume172 """173 return self._token_volume174 @token_volume.setter175 def token_volume(self, value):176 self._token_volume = value177 self.volume_service.set_auth(self._token_volume)178 def list_groups(self, filtr=None):179 """180 Get the groups the logged in user is a member of.181 Optionally filter by 'member' or 'maintainer'.182 Args:183 filtr (optional[string|None]): ['member'|'maintainer']184 Returns:185 (list[string]): List of group names.186 Raises:187 requests.HTTPError on failure.188 """189 self.project_service.set_auth(self._token_project)190 return self.project_service.list_groups(filtr)191 def get_group(self, name, user_name=None):192 """193 Get information on the given group or whether or not a user is a member194 of the group.195 Args:196 name (string): Name of group to query.197 user_name (optional[string]): Supply None if not interested in198 determining if user is a member of the given group.199 Returns:200 (mixed): Dictionary if getting group information or bool if a user201 name is supplied.202 Raises:203 requests.HTTPError on failure.204 """205 self.project_service.set_auth(self._token_project)206 return self.project_service.get_group(name, user_name)207 def create_group(self, name):208 """209 Create a new group.210 Args:211 name (string): Name of the group to create.212 Returns:213 (bool): True on success.214 Raises:215 requests.HTTPError on failure.216 """217 self.project_service.set_auth(self._token_project)218 return self.project_service.create_group(name)219 def delete_group(self, name):220 """221 Delete given group.222 Args:223 name (string): Name of group.224 Returns:225 (bool): True on success.226 Raises:227 requests.HTTPError on failure.228 """229 self.project_service.set_auth(self._token_project)230 return self.project_service.delete_group(name)231 def list_group_members(self, name):232 """233 Get the members of a group.234 Args:235 name (string): Name of group to query.236 Returns:237 (list[string]): List of member names.238 Raises:239 requests.HTTPError on failure.240 """241 self.project_service.set_auth(self._token_project)242 return self.project_service.list_group_members(name)243 def add_group_member(self, grp_name, user):244 """245 Add the given user to the named group.246 Both group and user must already exist for this to succeed.247 Args:248 name (string): Name of group.249 user_name (string): User to add to group.250 Raises:251 requests.HTTPError on failure.252 """253 self.project_service.set_auth(self._token_project)254 self.project_service.add_group_member(grp_name, user)255 def delete_group_member(self, grp_name, user):256 """257 Delete the given user to the named group.258 Both group and user must already exist for this to succeed.259 Args:260 name (string): Name of group.261 user_name (string): User to delete from the group.262 Raises:263 requests.HTTPError on failure.264 """265 self.project_service.set_auth(self._token_project)266 self.project_service.delete_group_member(grp_name, user)267 def get_is_group_member(self, grp_name, user):268 """269 Check if the given user is a member of the named group.270 Note that a group maintainer is not considered a member unless the271 user is also explicitly added as a member.272 Args:273 name (string): Name of group.274 user_name (string): User of interest.275 Returns:276 (bool): False if user not a member.277 """278 self.project_service.set_auth(self._token_project)279 return self.project_service.get_is_group_member(grp_name, user)280 def list_group_maintainers(self, name):281 """282 Get the maintainers of a group.283 Args:284 name (string): Name of group to query.285 Returns:286 (list[string]): List of maintainer names.287 Raises:288 requests.HTTPError on failure.289 """290 self.project_service.set_auth(self._token_project)291 return self.project_service.list_group_maintainers(name)292 def add_group_maintainer(self, name, user):293 """294 Add the given user to the named group.295 Both group and user must already exist for this to succeed.296 Args:297 name (string): Name of group.298 user (string): User to add to group.299 Raises:300 requests.HTTPError on failure.301 """302 self.project_service.set_auth(self._token_project)303 self.project_service.add_group_maintainer(name, user)304 def delete_group_maintainer(self, grp_name, user):305 """306 Delete the given user to the named group.307 Both group and user must already exist for this to succeed.308 Args:309 name (string): Name of group.310 user (string): User to add to group.311 Raises:312 requests.HTTPError on failure.313 """314 self.project_service.set_auth(self._token_project)315 self.project_service.delete_group_maintainer(grp_name, user)316 def get_is_group_maintainer(self, grp_name, user):317 """318 Check if the given user is a member of the named group.319 Args:320 name (string): Name of group.321 user (string): User of interest.322 Returns:323 (bool): False if user not a member.324 """325 self.project_service.set_auth(self._token_project)326 return self.project_service.get_is_group_maintainer(grp_name, user)327 def list_permissions(self, group_name=None, resource=None):328 """329 List permission sets associated filtering by group and/or resource.330 Args:331 group_name (string): Name of group.332 resource (intern.resource.boss.Resource): Identifies which data333 model object to operate on.334 Returns:335 (list): List of permissions.336 Raises:337 requests.HTTPError on failure.338 """339 self.project_service.set_auth(self._token_project)340 return self.project_service.list_permissions(group_name, resource)341 def get_permissions(self, grp_name, resource):342 """343 Get permissions associated the group has with the given resource.344 Args:345 grp_name (string): Name of group.346 resource (intern.resource.boss.Resource): Identifies which data347 model object to operate on.348 Returns:349 (list): List of permissions.350 Raises:351 requests.HTTPError on failure.352 """353 self.project_service.set_auth(self._token_project)354 return self.project_service.get_permissions(grp_name, resource)355 def add_permissions(self, grp_name, resource, permissions):356 """357 Add additional permissions for the group associated with the resource.358 Args:359 grp_name (string): Name of group.360 resource (intern.resource.boss.Resource): Identifies which data361 model object to operate on.362 permissions (list): List of permissions to add to the given resource363 Raises:364 requests.HTTPError on failure.365 """366 self.project_service.set_auth(self._token_project)367 self.project_service.add_permissions(grp_name, resource, permissions)368 def update_permissions(self, grp_name, resource, permissions):369 """370 Update permissions for the group associated with the given resource.371 Args:372 grp_name (string): Name of group.373 resource (intern.resource.boss.Resource): Identifies which data374 model object to operate on375 permissions (list): List of permissions to add to the given resource376 Raises:377 requests.HTTPError on failure.378 """379 self.project_service.set_auth(self._token_project)380 self.project_service.update_permissions(grp_name, resource, permissions)381 def delete_permissions(self, grp_name, resource):382 """383 Removes permissions from the group for the given resource.384 Args:385 grp_name (string): Name of group.386 resource (intern.resource.boss.Resource): Identifies which data387 model object to operate on.388 Raises:389 requests.HTTPError on failure.390 """391 self.project_service.set_auth(self._token_project)392 self.project_service.delete_permissions(grp_name, resource)393 def get_user_roles(self, user):394 """395 Get roles associated with the given user.396 Args:397 user (string): User name.398 Returns:399 (list): List of roles that user has.400 Raises:401 requests.HTTPError on failure.402 """403 self.project_service.set_auth(self._token_project)404 return self.project_service.get_user_roles(user)405 def add_user_role(self, user, role):406 """407 Add role to given user.408 Args:409 user (string): User name.410 role (string): Role to assign.411 Raises:412 requests.HTTPError on failure.413 """414 self.project_service.set_auth(self._token_project)415 self.project_service.add_user_role(user, role)416 def delete_user_role(self, user, role):417 """418 Remove role from given user.419 Args:420 user (string): User name.421 role (string): Role to remove.422 Raises:423 requests.HTTPError on failure.424 """425 self.project_service.set_auth(self._token_project)426 self.project_service.delete_user_role(user, role)427 def get_user(self, user):428 """429 Get user's data (first and last name, email, etc).430 Args:431 user (string): User name.432 Returns:433 (dictionary): User's data encoded in a dictionary.434 Raises:435 requests.HTTPError on failure.436 """437 self.project_service.set_auth(self._token_project)438 return self.project_service.get_user(user)439 def get_user_groups(self, user):440 """441 Get user's group memberships.442 Args:443 user (string): User name.444 Returns:445 (list): User's groups.446 Raises:447 requests.HTTPError on failure.448 """449 self.project_service.set_auth(self._token_project)450 return self.project_service.get_user_groups(user)451 def add_user(452 self, user,453 first_name=None, last_name=None,454 email=None, password=None455 ):456 """457 Add a new user.458 Args:459 user (string): User name.460 first_name (optional[string]): User's first name. Defaults to None.461 last_name (optional[string]): User's last name. Defaults to None.462 email: (optional[string]): User's email address. Defaults to None.463 password: (optional[string]): User's password. Defaults to None.464 Raises:465 requests.HTTPError on failure.466 """467 self.project_service.set_auth(self._token_project)468 self.project_service.add_user(469 user, first_name, last_name, email, password)470 def delete_user(self, user):471 """472 Delete the given user.473 Args:474 user (string): User name.475 Raises:476 requests.HTTPError on failure.477 """478 self.project_service.set_auth(self._token_project)479 self.project_service.delete_user(user)480 def _list_resource(self, resource):481 """482 List all instances of the given resource type.483 Use the specific list_<resource>() methods instead:484 list_collections()485 list_experiments()486 list_channels()487 list_coordinate_frames()488 Args:489 resource (intern.resource.boss.BossResource): resource.name may be490 an empty string.491 Returns:492 (list)493 Raises:494 requests.HTTPError on failure.495 """496 self.project_service.set_auth(self._token_project)497 return super(BossRemote, self).list_project(resource=resource)498 def list_collections(self):499 """500 List all collections.501 Returns:502 (list)503 Raises:504 requests.HTTPError on failure.505 """506 coll = CollectionResource(name='')507 return self._list_resource(coll)508 def list_experiments(self, collection_name):509 """510 List all experiments that belong to a collection.511 Args:512 collection_name (string): Name of the parent collection.513 Returns:514 (list)515 Raises:516 requests.HTTPError on failure.517 """518 exp = ExperimentResource(519 name='', collection_name=collection_name, coord_frame='foo')520 return self._list_resource(exp)521 def list_channels(self, collection_name, experiment_name):522 """523 List all channels belonging to the named experiment that is part524 of the named collection.525 Args:526 collection_name (string): Name of the parent collection.527 experiment_name (string): Name of the parent experiment.528 Returns:529 (list)530 Raises:531 requests.HTTPError on failure.532 """533 dont_care = 'image'534 chan = ChannelResource(535 name='', collection_name=collection_name,536 experiment_name=experiment_name, type=dont_care)537 return self._list_resource(chan)538 def list_coordinate_frames(self):539 """540 List all coordinate_frames.541 Returns:542 (list)543 Raises:544 requests.HTTPError on failure.545 """546 cf = CoordinateFrameResource(name='')547 return self._list_resource(cf)548 def get_channel(self, chan_name, coll_name, exp_name):549 """550 Helper that gets a fully initialized ChannelResource for an *existing* channel.551 Args:552 chan_name (str): Name of channel.553 coll_name (str): Name of channel's collection.554 exp_name (str): Name of channel's experiment.555 Returns:556 (intern.resource.boss.ChannelResource)557 """558 chan = ChannelResource(chan_name, coll_name, exp_name)559 return self.get_project(chan)560 def create_project(self, resource):561 """562 Create the entity described by the given resource.563 Args:564 resource (intern.resource.boss.BossResource)565 Returns:566 (intern.resource.boss.BossResource): Returns resource of type567 requested on success.568 Raises:569 requests.HTTPError on failure.570 """571 self.project_service.set_auth(self._token_project)572 return self.project_service.create(resource)573 def get_project(self, resource):574 """575 Get attributes of the data model object named by the given resource.576 Args:577 resource (intern.resource.boss.BossResource): resource.name as well578 as any parents must be identified to succeed.579 Returns:580 (intern.resource.boss.BossResource): Returns resource of type581 requested on success.582 Raises:583 requests.HTTPError on failure.584 """585 self.project_service.set_auth(self._token_project)586 return self.project_service.get(resource)587 def update_project(self, resource_name, resource):588 """589 Updates an entity in the data model using the given resource.590 Args:591 resource_name (string): Current name of the resource (in case the592 resource is getting its name changed).593 resource (intern.resource.boss.BossResource): New attributes for594 the resource.595 Returns:596 (intern.resource.boss.BossResource): Returns updated resource of597 given type on success.598 Raises:599 requests.HTTPError on failure.600 """601 self.project_service.set_auth(self._token_project)602 return self.project_service.update(resource_name, resource)603 def delete_project(self, resource):604 """605 Deletes the entity described by the given resource.606 Args:607 resource (intern.resource.boss.BossResource)608 Raises:609 requests.HTTPError on a failure.610 """611 self.project_service.set_auth(self._token_project)612 self.project_service.delete(resource)613 def list_metadata(self, resource):614 """615 List all keys associated with the given resource.616 Args:617 resource (intern.resource.boss.BossResource)618 Returns:619 (list)620 Raises:621 requests.HTTPError on a failure.622 """623 self.metadata_service.set_auth(self._token_metadata)624 return self.metadata_service.list(resource)625 def create_metadata(self, resource, keys_vals):626 """627 Associates new key-value pairs with the given resource.628 Will attempt to add all key-value pairs even if some fail.629 Args:630 resource (intern.resource.boss.BossResource)631 keys_vals (dictionary): Collection of key-value pairs to assign to632 given resource.633 Raises:634 HTTPErrorList on failure.635 """636 self.metadata_service.set_auth(self._token_metadata)637 self.metadata_service.create(resource, keys_vals)638 def get_metadata(self, resource, keys):639 """640 Gets the values for given keys associated with the given resource.641 Args:642 resource (intern.resource.boss.BossResource)643 keys (list)644 Returns:645 (dictionary)646 Raises:647 HTTPErrorList on failure.648 """649 self.metadata_service.set_auth(self._token_metadata)650 return self.metadata_service.get(resource, keys)651 def update_metadata(self, resource, keys_vals):652 """653 Updates key-value pairs with the given resource.654 Will attempt to update all key-value pairs even if some fail.655 Keys must already exist.656 Args:657 resource (intern.resource.boss.BossResource)658 keys_vals (dictionary): Collection of key-value pairs to update on659 the given resource.660 Raises:661 HTTPErrorList on failure.662 """663 self.metadata_service.set_auth(self._token_metadata)664 self.metadata_service.update(resource, keys_vals)665 def delete_metadata(self, resource, keys):666 """667 Deletes the given key-value pairs associated with the given resource.668 Will attempt to delete all key-value pairs even if some fail.669 Args:670 resource (intern.resource.boss.BossResource)671 keys (list)672 Raises:673 HTTPErrorList on failure.674 """675 self.metadata_service.set_auth(self._token_metadata)676 self.metadata_service.delete(resource, keys)677 def parse_bossURI(self, uri): # type: (str) -> Resource678 """679 Parse a bossDB URI and handle malform errors.680 Arguments:681 uri (str): URI of the form bossdb://<collection>/<experiment>/<channel>682 Returns:683 Resource684 """685 t = uri.split("://")[1].split("/")686 if len(t) == 3:687 return self.get_channel(t[2], t[0], t[1])688 raise ValueError("Cannot parse URI " + uri + ".")689 def get_cutout(self, resource, resolution, x_range, y_range, z_range, time_range=None, id_list=[], no_cache=None, access_mode=CacheMode.no_cache, parallel: bool = True, **kwargs):...
test_app.py
Source:test_app.py
...13database_path = "sqlite:///{}".format(os.path.join(project_dir, database_name))14assistant_token = os.getenv('ASSISTANT_JWT')15director_token = os.getenv('DIRECTOR_JWT')16producer_token = os.getenv('PRODUCER_JWT')17def set_auth(role):18 if role == 'assistant':19 return {20 "Content-Type": "application/json",21 "Authorization": "Bearer {}".format(assistant_token)22 }23 elif role == 'director':24 return {25 "Content-Type": "application/json",26 'Authorization': 'Bearer {}'.format(director_token)27 }28 elif role == 'producer':29 return {30 "Content-Type": "application/json",31 'Authorization': 'Bearer {}'.format(producer_token)32 }33class testCase(unittest.TestCase):34 def setUp(self):35 app.config['TESTING'] = True36 app.config['WTF_CSRF_ENABLED'] = False37 app.config['DEBUG'] = False38 app.config['SQLALCHEMY_DATABASE_URI'] = database_path39 self.app = app.test_client()40 db.drop_all()41 db.create_all()42 def tearDown(self):43 """Executed after reach test"""44 pass45 def test_get_movies_assistant(self):46 res = self.app.get('/movies', headers=set_auth('assistant'))47 self.assertEqual(res.status_code, 200)48 def test_get_movies_director(self):49 res = self.app.get('/movies', headers=set_auth('director'))50 self.assertEqual(res.status_code, 200)51 def test_get_movies_producer(self):52 res = self.app.get('/movies', headers=set_auth('producer'))53 self.assertEqual(res.status_code, 200)54 def test_get_movies_fail(self):55 res = self.app.get('/movies', headers=set_auth(''))56 self.assertEqual(res.status_code, 401)57 def test_post_movie_assistant(self):58 data = {59 "title": "test_title"60 }61 res = self.app.post('/movies', json=data,62 headers=set_auth('assistant'))63 self.assertEqual(res.status_code, 401)64 def test_post_movie_director(self):65 data = {66 "title": "test_title"67 }68 res = self.app.post('/movies', json=data, headers=set_auth('director'))69 self.assertEqual(res.status_code, 401)70 def test_post_movie_producer(self):71 data = {72 "title": "test_title"73 }74 res = self.app.post('/movies', json=data, headers=set_auth('producer'))75 self.assertEqual(res.status_code, 200)76 self.assertEqual(res.get_json()['success'], True)77 def test_post_movie_fail(self):78 res = self.app.post('/movies', json={}, headers=set_auth('producer'))79 self.assertEqual(res.status_code, 422)80 self.assertEqual(res.get_json()['success'], False)81 def test_patch_movie_assistant(self):82 data = {83 "title": "test_title"84 }85 res = self.app.post('/movies', json=data, headers=set_auth('producer'))86 updated_data = {87 "title": "updated_title"88 }89 res = self.app.patch('/movies/1', json=updated_data,90 headers=set_auth('assistant'))91 self.assertEqual(res.status_code, 401)92 def test_patch_movie_director(self):93 data = {94 "title": "test_title"95 }96 res = self.app.post('/movies', json=data, headers=set_auth('producer'))97 updated_data = {98 "title": "updated_title"99 }100 res = self.app.patch('/movies/1', json=updated_data,101 headers=set_auth('director'))102 self.assertEqual(res.status_code, 200)103 def test_patch_movie_producer(self):104 data = {105 "title": "test_title"106 }107 res = self.app.post('/movies', json=data, headers=set_auth('producer'))108 updated_data = {109 "title": "updated_title"110 }111 res = self.app.patch('/movies/1', json=updated_data,112 headers=set_auth('producer'))113 self.assertEqual(res.status_code, 200)114 self.assertEqual(res.get_json()['success'], True)115 def test_patch_movie_fail(self):116 data = {117 "title": "test_title"118 }119 res = self.app.post('/movies', json=data, headers=set_auth('producer'))120 res = self.app.patch('/movies/100000', json={},121 headers=set_auth('producer'))122 self.assertEqual(res.status_code, 404)123 self.assertEqual(res.get_json()['success'], False)124 def test_delete_movie_fail(self):125 res = self.app.delete('/movies/1000000', headers=set_auth('producer'))126 self.assertEqual(res.status_code, 404)127 def test_delete_movie_assistant(self):128 data = {129 "title": "test_title"130 }131 res = self.app.post('/movies', json=data, headers=set_auth('producer'))132 res = self.app.delete('/movies/1', headers=set_auth('assistant'))133 self.assertEqual(res.status_code, 401)134 def test_delete_movie_director(self):135 data = {136 "title": "test_title"137 }138 res = self.app.post('/movies', json=data, headers=set_auth('producer'))139 res = self.app.delete('/movies/1', headers=set_auth('director'))140 self.assertEqual(res.status_code, 401)141 def test_delete_movie_producer(self):142 data = {143 "title": "test_title"144 }145 res = self.app.post('/movies', json=data, headers=set_auth('producer'))146 res = self.app.delete('/movies/1', headers=set_auth('producer'))147 self.assertEqual(res.status_code, 200)148 def test_delete_movies_fail(self):149 res = self.app.delete('/movies/1', headers=set_auth(''))150 self.assertEqual(res.status_code, 401)151 # Actor Tests152 def test_get_actors_assistant(self):153 res = self.app.get('/actors', headers=set_auth('assistant'))154 self.assertEqual(res.status_code, 200)155 def test_get_actors_director(self):156 res = self.app.get('/actors', headers=set_auth('director'))157 self.assertEqual(res.status_code, 200)158 def test_get_actors_producer(self):159 res = self.app.get('/actors', headers=set_auth('producer'))160 self.assertEqual(res.status_code, 200)161 def test_get_actor_fail(self):162 res = self.app.get('/actors', headers=set_auth(''))163 self.assertEqual(res.status_code, 401)164 def test_post_actor_assistant(self):165 data = {166 "name": "updated_name",167 "gender": "female",168 "age": 30169 }170 res = self.app.post('/actors', json=data,171 headers=set_auth('assistant'))172 self.assertEqual(res.status_code, 401)173 def test_post_actor_director(self):174 data = {175 "name": "updated_name",176 "gender": "female",177 "age": 30178 }179 res = self.app.post('/actors', json=data, headers=set_auth('director'))180 self.assertEqual(res.status_code, 200)181 def test_post_actor_producer(self):182 data = {183 "name": "updated_name",184 "gender": "female",185 "age": 30186 }187 res = self.app.post('/actors', json=data, headers=set_auth('producer'))188 self.assertEqual(res.status_code, 200)189 self.assertEqual(res.get_json()['success'], True)190 def test_post_actors_fail(self):191 res = self.app.post('/actors', json={}, headers=set_auth('producer'))192 self.assertEqual(res.status_code, 422)193 self.assertEqual(res.get_json()['success'], False)194 def test_patch_actor_assistant(self):195 data = {196 "name": "test_name",197 "gender": "female",198 "age": 30199 }200 res = self.app.post('/actors', json=data, headers=set_auth('producer'))201 updated_data = {202 "name": "updated_name",203 "gender": "female",204 "age": 35205 }206 res = self.app.patch('/actors/1', json=updated_data,207 headers=set_auth('assistant'))208 self.assertEqual(res.status_code, 401)209 def test_patch_actor_director(self):210 data = {211 "name": "test_name",212 "gender": "female",213 "age": 30214 }215 res = self.app.post('/actors', json=data, headers=set_auth('director'))216 updated_data = {217 "name": "updated_name",218 "gender": "female",219 "age": 35220 }221 res = self.app.patch('/actors/1', json=updated_data,222 headers=set_auth('director'))223 self.assertEqual(res.status_code, 200)224 self.assertEqual(res.get_json()['success'], True)225 def test_patch_actor_producer(self):226 data = {227 "name": "test_name",228 "gender": "female",229 "age": 30230 }231 res = self.app.post('/actors', json=data, headers=set_auth('producer'))232 updated_data = {233 "name": "updated_name",234 "gender": "female",235 "age": 35236 }237 res = self.app.patch('/actors/1', json=updated_data,238 headers=set_auth('producer'))239 self.assertEqual(res.status_code, 200)240 self.assertEqual(res.get_json()['success'], True)241 def test_patch_actor_fail(self):242 data = {243 "name": "test_name",244 "gender": "female",245 "age": 30246 }247 res = self.app.post('/actors', json=data, headers=set_auth('producer'))248 res = self.app.patch('/actors/100000', json={},249 headers=set_auth('producer'))250 self.assertEqual(res.status_code, 404)251 self.assertEqual(res.get_json()['success'], False)252 def test_delete_actor_assistant(self):253 data = {254 "name": "test_name",255 "gender": "female",256 "age": 30257 }258 res = self.app.post('/actors', json=data,259 headers=set_auth('assistant'))260 res = self.app.delete('/actors/1', headers=set_auth('assistant'))261 self.assertEqual(res.status_code, 401)262 def test_delete_actor_director(self):263 data = {264 "name": "test_name",265 "gender": "female",266 "age": 30267 }268 res = self.app.post('/actors', json=data, headers=set_auth('director'))269 res = self.app.delete('/actors/1', headers=set_auth('director'))270 self.assertEqual(res.status_code, 200)271 def test_delete_actor_producer(self):272 data = {273 "name": "test_name",274 "gender": "female",275 "age": 30276 }277 res = self.app.post('/actors', json=data, headers=set_auth('producer'))278 res = self.app.delete('/actors/1', headers=set_auth('producer'))279 self.assertEqual(res.status_code, 200)280 def test_delete_actor_fail(self):281 logging.info("Intentionally Missing Auth Header (see below)")282 res = self.app.delete('/actors/1', headers=set_auth(''))283 self.assertEqual(res.status_code, 401)284if __name__ == '__main__':...
botlists.py
Source:botlists.py
...100class DiscordLists(commands.Cog):101 def __init__(self, bot):102 self.bot = bot103 self.api = discordlists.Client(self.bot)104 self.api.set_auth("discord.bots.gg", bot.config.DBGG_TOKEN)105 self.api.set_auth("discord.boats", bot.config.DBOATS_TOKEN)106 self.api.set_auth("voidbots.net", bot.config.GLENN_TOKEN)107 self.api.set_auth("mythicalbots.xyz", bot.config.MYTH_TOKEN)108 self.api.set_auth("botsfordiscord.com", bot.config.BFD_TOKEN)109 self.api.set_auth("botlist.space", bot.config.BOTSPACE_TOKEN)110 self.api.set_auth("discordbots.co", bot.config.DISCORD_BOTS_TOKEN)111 self.api.set_auth('bladebotlist.xyz', bot.config.BBL_TOKEN)112 self.api.set_auth('blist.xyz', bot.config.BLIST_TOKEN)113 self.api.set_auth('space-bot-list.xyz', bot.config.SBL_TOKEN)114 self.api.set_auth('infinitybotlist.com', bot.config.INFINITY_TOKEN)115 self.api.start_loop()116 self.help_icon = ''117 self.big_icon = ''118 @commands.command(hidden=True)119 async def post(self, ctx):120 """121 Manually posts guild count using discordlists.py (BotBlock)122 """123 try:124 result = await self.api.post_count()125 except Exception as e:126 try:127 await ctx.send("Request failed: `{}`".format(e))128 return...
test_unread_comments_counters.py
Source:test_unread_comments_counters.py
1import pytest2from . import factories3from art17 import models4from .conftest import create_user5@pytest.fixture6def setup_common(app):7 factories.EtcDataSpeciesRegionFactory(8 assesment_speciesname="Canis lupus",9 speciesname="Canis lupus",10 group="Mammals",11 )12 factories.SpeciesManualAssessmentFactory(region="ALP")13 factories.SpeciesManualAssessmentFactory(region="ALP", user_id="conclusion_user")14 factories.EtcDicBiogeoregFactory()15 factories.EtcDicHdHabitat()16 factories.HabitattypesManualAssessmentsFactory(region="ALP")17 factories.HabitattypesManualAssessmentsFactory(18 region="ALP", user_id="conclusion_user"19 )20 models.db.session.commit()21@pytest.fixture22def setup(app):23 factories.CommentFactory(region="ALP")24 factories.CommentFactory(id=2, author_id="user2", region="ALP")25 factories.CommentFactory(26 id=3, author_id="user3", region="ALP", user_id="conclusion_user"27 )28 factories.WikiFactory(region_code="ALP")29 factories.WikiChangeFactory()30 factories.WikiCommentFactory()31 factories.HabitatCommentFactory(region="ALP")32 factories.HabitatCommentFactory(id=2, author_id="user2", region="ALP")33 factories.HabitatCommentFactory(34 id=3, author_id="user3", region="ALP", user_id="conclusion_user"35 )36 factories.WikiFactory(37 id=2,38 region_code="ALP",39 habitatcode=1110,40 assesment_speciesname=None,41 )42 factories.WikiChangeFactory(43 id=2,44 wiki_id=2,45 body="The conservation status in the marine Baltic region",46 )47 factories.WikiCommentFactory(id=2, wiki_id=2)48 models.db.session.commit()49@pytest.fixture50def setup_deleted(app):51 factories.CommentFactory(id=4, author_id="user4", region="ALP", deleted=1)52 factories.CommentFactory(53 id=5, author_id="user4", region="ALP", deleted=1, user_id="conclusion_user"54 )55 factories.WikiCommentFactory(id=3, author_id="user3", deleted=1)56 factories.HabitatCommentFactory(id=4, author_id="user4", region="ALP", deleted=1)57 factories.HabitatCommentFactory(58 id=5, author_id="user4", region="ALP", deleted=1, user_id="conclusion_user"59 )60 factories.WikiCommentFactory(id=4, wiki_id=2, author_id="user4", deleted=1)61@pytest.mark.xfail62@pytest.mark.parametrize(63 "user, path, args",64 [65 (66 "someuser",67 "/species/progress/",68 {"period": "1", "group": "Mammals", "conclusion": "population"},69 ),70 (71 "someuser",72 "/habitat/progress/",73 {"period": "1", "group": "coastal habitats", "conclusion": "area"},74 ),75 ],76)77def test_unread_conclusion_comments(78 app, client, set_auth, setup_common, setup, user, path, args79):80 create_user(user, app)81 set_auth.update({"user_id": user})82 resp = client.get(path, args)83 assert resp.status_code == 20084 assert "Unread comments for my conclusions: 2" in resp.text85 assert "Unread comments for all conclusions: 3" in resp.text86 assert "Unread comments for data sheet info: 1" in resp.text87@pytest.mark.xfail88@pytest.mark.parametrize(89 "path, args",90 [91 (92 "/species/progress/",93 {"period": "1", "group": "Mammals", "conclusion": "population"},94 ),95 (96 "/habitat/progress/",97 {"period": "1", "group": "coastal habitats", "conclusion": "area"},98 ),99 ],100)101def test_unread_conclusion_comments_anonymous_user(102 app, client, set_auth, setup, path, args103):104 resp = client.get(path, args)105 assert resp.status_code == 200106 assert "Unread comments for my conclusions:" not in resp.text107 assert "Unread comments for all conclusions:" not in resp.text108 assert "Unread comments for data sheet info:" not in resp.text109@pytest.mark.xfail110@pytest.mark.parametrize(111 "user, path, args",112 [113 (114 "someuser",115 "/species/progress/",116 {"period": "1", "group": "Mammals", "conclusion": "population"},117 ),118 (119 "someuser",120 "/habitat/progress/",121 {"period": "1", "group": "coastal habitats", "conclusion": "area"},122 ),123 ],124)125def test_unread_conclusion_comments_zero_comments(126 app, client, set_auth, setup_common, user, path, args127):128 create_user(user, app)129 set_auth.update({"user_id": user})130 resp = client.get(path, args)131 assert resp.status_code == 200132 assert "Unread comments for my conclusions: 0" in resp.text133 assert "Unread comments for all conclusions: 0" in resp.text134 assert "Unread comments for data sheet info: 0" in resp.text135@pytest.mark.xfail136@pytest.mark.parametrize(137 "user, path, args",138 [139 (140 "someuser",141 "/species/progress/",142 {"period": "1", "group": "Mammals", "conclusion": "population"},143 ),144 (145 "someuser",146 "/habitat/progress/",147 {"period": "1", "group": "coastal habitats", "conclusion": "area"},148 ),149 ],150)151def test_unread_conclusion_comments_deleted_comments(152 app, client, set_auth, setup_common, setup, setup_deleted, user, path, args153):154 create_user(user, app)155 set_auth.update({"user_id": user})156 resp = client.get(path, args)157 assert resp.status_code == 200158 assert "Unread comments for my conclusions: 2" in resp.text159 assert "Unread comments for all conclusions: 3" in resp.text160 assert "Unread comments for data sheet info: 1" in resp.text161@pytest.mark.xfail162@pytest.mark.parametrize(163 "username, path, args, comment_cls, wiki_id, read, unread_comments",164 [165 (166 "someuser",167 "/species/progress/",168 {"period": "1", "group": "Mammals", "conclusion": "population"},169 factories.CommentFactory,170 1,171 True,172 (2, 3, 1),173 ),174 (175 "someuser",176 "/habitat/progress/",177 {"period": "1", "group": "coastal habitats", "conclusion": "area"},178 factories.HabitatCommentFactory,179 2,180 True,181 (2, 3, 1),182 ),183 (184 "someuser",185 "/species/progress/",186 {"period": "1", "group": "Mammals", "conclusion": "population"},187 factories.CommentFactory,188 1,189 False,190 (3, 5, 2),191 ),192 (193 "someuser",194 "/habitat/progress/",195 {"period": "1", "group": "coastal habitats", "conclusion": "area"},196 factories.HabitatCommentFactory,197 2,198 False,199 (3, 5, 2),200 ),201 ],202)203def test_unread_conclusion_comments_read_comments(204 app,205 client,206 set_auth,207 setup_common,208 setup,209 username,210 path,211 args,212 comment_cls,213 wiki_id,214 read,215 unread_comments,216):217 user = create_user(username, app)218 set_auth.update({"user_id": username})219 comment = comment_cls(id=10, author_id="user10", region="ALP")220 comment_other_conclusion = comment_cls(221 id=11, author_id="user11", region="ALP", user_id="conclusion_user"222 )223 wiki_comment = factories.WikiCommentFactory(224 id=10, author_id="user10", wiki_id=wiki_id225 )226 models.db.session.commit()227 if read:228 comment.readers.append(user)229 comment_other_conclusion.readers.append(user)230 wiki_comment.readers.append(user)231 models.db.session.commit()232 resp = client.get(path, args)233 assert resp.status_code == 200234 mine, all, dsi = unread_comments235 assert "Unread comments for my conclusions: {0}".format(mine) in resp.text236 assert "Unread comments for all conclusions: {0}".format(all) in resp.text...
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!!