def dao_create_service( service, user, service_id=None, service_permissions=None, ): # the default property does not appear to work when there is a difference between the sqlalchemy schema and the # db schema (ie: during a migration), so we have to set sms_sender manually here. After the GOVAU sms_sender # migration is completed, this code should be able to be removed. if not user: raise ValueError("Can't create a service without a user") if service_permissions is None: service_permissions = DEFAULT_SERVICE_PERMISSIONS from app.dao.permissions_dao import permission_dao service.users.append(user) permission_dao.add_default_service_permissions_for_user(user, service) service.id = service_id or uuid.uuid4( ) # must be set now so version history model can use same id service.active = True service.research_mode = False service.crown = service.organisation_type == 'central' service.count_as_live = not user.platform_admin for permission in service_permissions: service_permission = ServicePermission(service_id=service.id, permission=permission) service.permissions.append(service_permission) # do we just add the default - or will we get a value from FE? insert_service_sms_sender(service, current_app.config['FROM_NUMBER']) db.session.add(service)
def format_for_data_model(self, in_data): if isinstance(in_data, dict) and 'permissions' in in_data: str_permissions = in_data['permissions'] permissions = [] for p in str_permissions: permission = ServicePermission(service_id=in_data["id"], permission=p) permissions.append(permission) in_data['permissions'] = permissions
def dao_create_service( service, user, service_id=None, service_permissions=None, ): # the default property does not appear to work when there is a difference between the sqlalchemy schema and the # db schema (ie: during a migration), so we have to set sms_sender manually here. After the GOVUK sms_sender # migration is completed, this code should be able to be removed. if not user: raise ValueError("Can't create a service without a user") if service_permissions is None: service_permissions = DEFAULT_SERVICE_PERMISSIONS organisation = dao_get_organisation_by_email_address(user.email_address) from app.dao.permissions_dao import permission_dao service.users.append(user) permission_dao.add_default_service_permissions_for_user(user, service) service.id = service_id or uuid.uuid4( ) # must be set now so version history model can use same id service.active = True service.research_mode = False for permission in service_permissions: service_permission = ServicePermission(service_id=service.id, permission=permission) service.permissions.append(service_permission) # do we just add the default - or will we get a value from FE? insert_service_sms_sender(service, current_app.config["FROM_NUMBER"]) if organisation: service.organisation_id = organisation.id service.organisation_type = organisation.organisation_type if organisation.email_branding: service.email_branding = organisation.email_branding if organisation.letter_branding and not service.letter_branding: service.letter_branding = organisation.letter_branding elif service.organisation_type in NHS_ORGANISATION_TYPES or email_address_is_nhs( user.email_address): service.email_branding = dao_get_email_branding_by_name("NHS") service.letter_branding = dao_get_letter_branding_by_name("NHS") if organisation: service.crown = organisation.crown elif service.organisation_type in CROWN_ORGANISATION_TYPES: service.crown = True elif service.organisation_type in NON_CROWN_ORGANISATION_TYPES: service.crown = False service.count_as_live = not user.platform_admin db.session.add(service)
def test_update_service_permission_creates_a_history_record_with_current_data( notify_db_session, ): user = create_user() assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 service = Service( name="service_name", email_from="email_from", message_limit=1000, restricted=False, created_by=user, ) dao_create_service( service, user, service_permissions=[ SMS_TYPE, EMAIL_TYPE, INTERNATIONAL_SMS_TYPE, ], ) service.permissions.append( ServicePermission(service_id=service.id, permission="letter")) dao_update_service(service) assert Service.query.count() == 1 assert Service.get_history_model().query.count() == 2 service_from_db = Service.query.first() assert service_from_db.version == 2 _assert_service_permissions( service.permissions, (SMS_TYPE, EMAIL_TYPE, INTERNATIONAL_SMS_TYPE, LETTER_TYPE)) permission = [p for p in service.permissions if p.permission == "sms"][0] service.permissions.remove(permission) dao_update_service(service) assert Service.query.count() == 1 assert Service.get_history_model().query.count() == 3 service_from_db = Service.query.first() assert service_from_db.version == 3 _assert_service_permissions( service.permissions, (EMAIL_TYPE, INTERNATIONAL_SMS_TYPE, LETTER_TYPE)) assert len(Service.get_history_model().query.filter_by( name="service_name").all()) == 3 assert Service.get_history_model().query.filter_by( name="service_name").all()[2].version == 3
def dao_create_service( service, user, service_id=None, service_permissions=None, ): if not user: raise ValueError("Can't create a service without a user") if service_permissions is None: service_permissions = DEFAULT_SERVICE_PERMISSIONS organisation = dao_get_organisation_by_email_address(user.email_address) from app.dao.permissions_dao import permission_dao service.users.append(user) permission_dao.add_default_service_permissions_for_user(user, service) service.id = service_id or uuid.uuid4( ) # must be set now so version history model can use same id service.active = True service.research_mode = False for permission in service_permissions: service_permission = ServicePermission(service_id=service.id, permission=permission) service.permissions.append(service_permission) # do we just add the default - or will we get a value from FE? insert_service_sms_sender(service, current_app.config['FROM_NUMBER']) if organisation: service.organisation_id = organisation.id service.organisation_type = organisation.organisation_type if organisation.email_branding: service.email_branding = organisation.email_branding if organisation.letter_branding and not service.letter_branding: service.letter_branding = organisation.letter_branding elif service.organisation_type in NHS_ORGANISATION_TYPES or email_address_is_nhs( user.email_address): service.email_branding = dao_get_email_branding_by_name('NHS') service.letter_branding = dao_get_letter_branding_by_name('NHS') if organisation: service.crown = organisation.crown elif service.organisation_type in CROWN_ORGANISATION_TYPES: service.crown = True elif service.organisation_type in NON_CROWN_ORGANISATION_TYPES: service.crown = False service.count_as_live = not user.platform_admin db.session.add(service)
def set_broadcast_service_type(service, service_mode, broadcast_channel, provider_restriction): insert_or_update_service_broadcast_settings( service, channel=broadcast_channel, provider_restriction=provider_restriction) # Remove all permissions and add broadcast permission if not service.has_permission(BROADCAST_TYPE): service_permission = ServicePermission(service_id=service.id, permission=BROADCAST_TYPE) db.session.add(service_permission) ServicePermission.query.filter( ServicePermission.service_id == service.id, ServicePermission.permission != BROADCAST_TYPE, # Email auth is an exception to the other service permissions (which relate to what type # of notifications a service can send) where a broadcast service is allowed to have the # email auth permission (but doesn't have to) ServicePermission.permission != EMAIL_AUTH_TYPE).delete() # Refresh the service object as it has references to the service permissions but we don't yet # want to commit the permission changes incase all of this needs to rollback db.session.refresh(service) # Set service count as live false always service.count_as_live = False # Set service into training mode or live mode if service_mode == "live": if service.restricted: # Only update the go live at timestamp if this if moving from training mode # to live mode, not if it's moving from one type of live mode service to another service.go_live_at = datetime.utcnow() service.restricted = False else: service.restricted = True service.go_live_at = None # Add service to organisation organisation = Organisation.query.filter_by( id=current_app.config['BROADCAST_ORGANISATION_ID']).one() service.organisation_id = organisation.id service.organisation_type = organisation.organisation_type service.crown = organisation.crown db.session.add(service)
def dao_add_service_permission(service_id, permission): service_permission = ServicePermission(service_id=service_id, permission=permission) db.session.add(service_permission)