def add_subscription(name, account, filter_, replication_rules, comments, lifetime, retroactive, dry_run, priority=None, issuer=None, vo='def'): """ Adds a new subscription which will be verified against every new added file and dataset :param account: Account identifier :type account: String :param name: Name of the subscription :type: String :param filter_: Dictionary of attributes by which the input data should be filtered **Example**: ``{'dsn': 'data11_hi*.express_express.*,data11_hi*physics_MinBiasOverlay*', 'account': 'tzero'}`` :type filter_: Dict :param replication_rules: Replication rules to be set : Dictionary with keys copies, rse_expression, weight, rse_expression :type replication_rules: Dict :param comments: Comments for the subscription :type comments: String :param lifetime: Subscription's lifetime (seconds); False if subscription has no lifetime :type lifetime: Integer or False :param retroactive: Flag to know if the subscription should be applied on previous data :type retroactive: Boolean :param dry_run: Just print the subscriptions actions without actually executing them (Useful if retroactive flag is set) :type dry_run: Boolean :param priority: The priority of the subscription :type priority: Integer :param issuer: The account issuing this operation. :type issuer: String :param vo: The VO to act on. :type vo: String :returns: subscription_id :rtype: String """ if not has_permission(issuer=issuer, vo=vo, action='add_subscription', kwargs={'account': account}): raise AccessDenied('Account %s can not add subscription' % (issuer)) try: if filter_: if not isinstance(filter_, dict): raise TypeError('filter should be a dict') validate_schema(name='subscription_filter', obj=filter_, vo=vo) if replication_rules: if not isinstance(replication_rules, list): raise TypeError('replication_rules should be a list') else: for rule in replication_rules: validate_schema(name='activity', obj=rule.get('activity', 'default'), vo=vo) else: raise InvalidObject('You must specify a rule') except ValueError as error: raise TypeError(error) account = InternalAccount(account, vo=vo) keys = ['scope', 'account'] types = [InternalScope, InternalAccount] for _key, _type in zip(keys, types): if _key in filter_: if isinstance(filter_[_key], list): filter_[_key] = [_type(val, vo=vo).internal for val in filter_[_key]] else: filter_[_key] = _type(filter_[_key], vo=vo).internal return subscription.add_subscription(name=name, account=account, filter_=dumps(filter_), replication_rules=dumps(replication_rules), comments=comments, lifetime=lifetime, retroactive=retroactive, dry_run=dry_run, priority=priority)
if type(replication_rules) != list: raise TypeError('replication_rules should be a list') else: for rule in replication_rules: validate_schema(name='activity', obj=rule.get('activity', 'default')) else: raise InvalidObject('You must specify a rule') except ValueError, error: raise TypeError(error) return subscription.add_subscription( name=name, account=account, filter=dumps(filter), replication_rules=dumps(replication_rules), comments=comments, lifetime=lifetime, retroactive=retroactive, dry_run=dry_run, priority=priority) def update_subscription(name, account, filter=None, replication_rules=None, comments=None, lifetime=None, retroactive=None, state=None, dry_run=None,
accepted_keys = ['datatype', 'prod_step', 'stream_name', 'project', 'scope', 'pattern', 'type', 'account', 'excluded_pattern', 'grouping', 'group', 'provenance'] try: if filter: if type(filter) != dict: raise TypeError('filter should be a dict') else: for key in filter: if key not in accepted_keys: raise InvalidMetadata('Invalid metadata <%s>' % (key)) validate_schema(name='subscription_filter', obj=filter) if replication_rules and type(replication_rules) != list: raise TypeError('replication_rules should be a list') except ValueError, e: raise TypeError(e) return subscription.add_subscription(name=name, account=account, filter=dumps(filter), replication_rules=dumps(replication_rules), comments=comments, lifetime=lifetime, retroactive=retroactive, dry_run=dry_run) def update_subscription(name, account, filter=None, replication_rules=None, comments=None, lifetime=None, retroactive=None, dry_run=None): """ Updates a subscription :param name: Name of the subscription :type: String :param account: Account identifier :type account: String :param filter: Dictionary of attributes by which the input data should be filtered **Example**: ``{'dsn': 'data11_hi*.express_express.*,data11_hi*physics_MinBiasOverlay*', 'account': 'tzero'}`` :type filter: Dict :param replication_rules: Replication rules to be set : Dictionary with keys copies, rse_expression, weight, rse_expression :type replication_rules: Dict