class LoginUser(graphene.Mutation):
    token = graphene.String()
    errors = GenericScalar()

    class Arguments:
        login = graphene.String()
        password = graphene.String()

    def mutate(self, info, login, password):
        errors = {
            'login': [],
            'password': []
        }
        valid = True
        login_type = 'email' if '@' in login else 'username'
        login = login.strip()
        password = password.strip()

        if len(login) == 0:
            errors['login'].append('Please, enter your login.')
            valid = False
        elif not Siteuser.objects.filter(**{login_type: login}).exists():
            errors['login'].append(login_type.capitalize() + ' does not exist.')
            valid = False
        else:
            hashed = Siteuser.objects.filter(**{login_type: login})[0].password[2:-1]
            if len(password) > 0 and not bcrypt.checkpw(password.encode('utf8'), hashed.encode('utf8')):
                errors['password'].append('Password does not match.')
                valid = False

        if len(password) == 0:
            errors['password'].append('Please, enter your password.')
            valid = False

        if valid:
            user = Siteuser.objects.get(**{login_type: login})

            # refresh_token = jwt.encode({
            #     'id': user.id,
            #     'username': user.username,
            #     'email': user.email,
            #     'exp': int(time.time()) + 31536000
            # }, 'mySuperSecretRefreshKey', algorithm='HS256').decode('utf-8')

            # print(refresh_token)

            auth_token = jwt.encode({
                'id': user.id,
                'username': user.username,
                'email': user.email,
                'added': user.added,
                # 'exp': int(time.time()) + 300
            }, 'myTestKey!noiceone', algorithm='HS256').decode('utf-8')
            return AuthToken(auth_token)
        return ValidationErrors(errors)
Beispiel #2
0
class Power(MongoengineObjectType):
    # powers = graphene.List('levels.types.Power',
    #                          blockchain=graphene.String(required=True),
    #                          host = graphene.String(required=True),
    #                          first=graphene.Int(),
    #                          last=graphene.Int())

    # def resolve_powers(self, info, blockchain, host):

    #     qs = PowerModel.objects(blockchain=blockchain, username = self.username, host=host)
    #     return qs;
    badges = graphene.List(
        'badges.types.Badge',
        first=graphene.Int(),
        last=graphene.Int(),
    )

    json_metadata = GenericScalar()

    avatar = graphene.String()

    def resolve_avatar(self, info):
        user = LevelModel.objects(username=self.author,
                                  blockchain=self.blockchain).first()
        if (user):
            meta = prepare_json(user.meta)
        else:
            meta = {}

        if 'img' in meta:
            return meta['img']
        else:
            return "/ava.png"

    def resolve_json_metadata(self, info):
        User = LevelModel.objects(username=self.username,
                                  blockchain=self.blockchain).first()

        return prepare_json(User.meta)

        # if isinstance(self.meta, BaseDict):
        #     return prepare_json(self.meta)
        # else:
        #     return {}

    def resolve_badges(self, info):

        qs = BadgeModel.objects(blockchain=self.blockchain,
                                username=self.username)
        #TODO find badges and construct
        return qs

    class Meta:
        model = PowerModel
        interfaces = (Node, )
Beispiel #3
0
class OutputType(graphene.ObjectType):
    name = 'Output'
    description = '...'

    condition = GenericScalar()
    public_keys = graphene.List(graphene.String)
    amount = graphene.String()

    @classmethod
    def from_json(cls, output):
        return cls(**output)
Beispiel #4
0
class OrderLineObjectType(DjangoObjectType):
    product_thumbnail_url = graphene.Field(graphene.String)
    product_details = GenericScalar()
    
    def resolve_product_thumbnail_url(self, info, **kwargs):
        if self.product_thumbnail:
            return self.product_thumbnail.url
        return ''

    class Meta:
        model = OrderLine
Beispiel #5
0
class Page(DjangoObjectType):
    body_json = GenericScalar(required=True)

    class Meta:
        model = SitePage

    def resolve_body(self, info):
        return self.body

    def resolve_body_json(self, info):
        return self.body.stream_data
class VerifyMutation(graphene.Mutation):
    payload = GenericScalar(required=True)

    class Arguments:
        token = graphene.String(required=True)

    def mutate(self, info, token):
        payload = get_payload(token)
        if Blacklist.is_blacklisted(payload['refresh_token']):
            raise JSONWebTokenExpired
        return VerifyMutation(payload=payload)
Beispiel #7
0
class UserTokenRefresh(Refresh):
    permission = GenericScalar()
    user = graphene.Field(UserType)

    @classmethod
    def mutate(cls, *arg, **kwargs):
        result = cls.refresh(*arg, **kwargs)
        user = get_user_by_payload(result.payload)
        result.user = user
        result.permission = list(user.get_all_permissions())
        return result
Beispiel #8
0
class TaskActions(Mutation):
    class Meta:
        description = """Task actions:
- Prepare job file for task(s).
- Hold tasks.
- Insert task proxies.
- Kill task jobs.
- Return True if task_id exists (and running).
- Unhold tasks.
- Remove tasks from task pool.
- Reset statuses tasks.
- Spawn tasks.
- Trigger submission of task jobs where possible."""
        resolver = nodes_mutator

    class Arguments:
        workflows = List(String)
        command = String(
            description="""Task actions:
- `dry_run_tasks`
- `hold_tasks`
- `insert_tasks`
- `kill_tasks`
- `poll_tasks`
- `release_tasks`
- `remove_tasks`
- `reset_task_states`
- `spawn_tasks`
- `trigger_tasks`""",
            required=True,
        )
        ids = List(String,
                   description="""Used with:
- All Commands

A list of identifiers (family%glob%id) for matching task proxies, i.e.
```
[
    "owner%workflow%201905*%foo",
    "foo.201901*:failed",
    "201901*%baa:failed",
    "FAM.20190101T0000Z",
    "FAM2",
    "*.20190101T0000Z"
]
```
(where % is the delimiter)

Splits argument into components, creates workflows argument if non-existent.
""",
                   required=True)
        args = TaskArgs()

    result = GenericScalar()
Beispiel #9
0
class Register(graphene.Mutation):
    class Arguments:
        username = graphene.String(required=True)
        password = graphene.String(required=True)
        email = graphene.String(required=True)
        display_name = graphene.String(required=True)
        school = graphene.String()
        company = graphene.String()
        location = graphene.String()

    token = graphene.String()
    payload = GenericScalar()
    permission = GenericScalar()
    user = graphene.Field(UserType)

    def mutate(self, info, **kwargs):
        from .form import UserSignupForm
        SignupForm = UserSignupForm(kwargs)
        if SignupForm.is_valid():
            values = SignupForm.cleaned_data
            new_user = User(
                username=values['username'],
                email=values['email'],
                display_name=values['display_name'],
                school=values['school'],
                company=values['company'],
                location=values['location'],
                is_staff=False,
                is_superuser=False,
            )
            new_user.set_password(values['password'])
            new_user.save()
            new_user.set_group(Group.NORMAL_USER)
            token = get_token(new_user)
            payload = get_payload(token, info.context)
            return Register(payload=payload,
                            token=token,
                            permission=list(new_user.get_all_permissions()),
                            user=new_user)
        else:
            raise RuntimeError(SignupForm.errors.as_json())
Beispiel #10
0
class ExternalTrigger(Mutation):
    class Meta:
        description = """Server-side external event trigger interface."""
        resolver = mutator

    class Arguments:
        workflows = List(String, required=True)
        command = String(default_value='put_external_trigger')
        event_message = String(required=True)
        event_id = String(required=True)

    result = GenericScalar()
Beispiel #11
0
class UserLogin(graphene.Mutation):
    class Arguments:
        username = graphene.String(required=True)
        password = graphene.String(required=True)

    token = graphene.String()
    payload = GenericScalar()
    permission = GenericScalar()
    user = graphene.Field(UserType)

    def mutate(self, info: ResolveInfo, **kwargs):
        login_form = UserLoginForm(kwargs)
        if login_form.is_valid():
            values = login_form.cleaned_data
            usr = User.objects.get(username=values.get('username'))
            token = get_token(usr)
            payload = get_payload(token, info.context)
            update_last_login(None, usr)
            return UserLogin(payload=payload, token=token, permission=list(usr.get_all_permissions()), user=usr)
        else:
            raise RuntimeError(login_form.errors.as_json())
Beispiel #12
0
class StructBlock(graphene.ObjectType):
    class Meta:
        interfaces = (StreamFieldInterface, )

    value = GenericScalar()
    items = graphene.List(StreamFieldInterface)

    def resolve_items(self, info, **kwargs):
        return [
            StructBlockItem(name, self.block.child_blocks[name], value)
            for name, value in self.value.items()
        ]
Beispiel #13
0
class ExpireBroadcast(Mutation):
    class Meta:
        description = """Clear settings globally,
or for listed namespaces and/or points."""
        resolver = mutator

    class Arguments:
        workflows = List(String, required=True)
        command = String(default_value='expire_broadcast')
        cutoff = String(description="""String""")

    result = GenericScalar()
Beispiel #14
0
class AssignmentType(DjangoObjectType):
    """
    Object type for each Assignment
    """
    class Meta:
        model = Assignment
        fields = ('assignment_id', )
        filter_fields = ['assignment_id']

    problems_below = graphene.List(ProblemType)
    # statistic = graphene.Field(StatisticType)
    assignment_name = graphene.String()

    aggregate_errors = graphene.Int()
    problem_errors = GenericScalar()
    type_of_errors = GenericScalar()
    students_by_errors = GenericScalar()

    def resolve_problems_below(parent, info):
        return parent.problems.all()

    def resolve_aggregate_errors(parent, info):
        return aggregate_errors(parent)

    def resolve_problem_errors(parent, info):
        return problem_errors(parent)

    def resolve_type_of_errors(parent, info):
        return type_of_errors(parent)

    def resolve_students_by_errors(parent, info):
        return students_by_errors(parent)

    def resolve_assignment_name(parent, info):
        name = parent.assignment_name
        if name:
            return name
        else:
            return ""
Beispiel #15
0
class SetVerbosity(Mutation):
    class Meta:
        description = """Set workflow verbosity to new level."""
        resolver = mutator

    class Arguments:
        workflows = List(String, required=True)
        command = String(default_value='set_verbosity')
        level = String(description="""levels:
`INFO`, `WARNING`, `NORMAL`, `CRITICAL`, `ERROR`, `DEBUG`""",
                       required=True)

    result = GenericScalar()
Beispiel #16
0
class TakeCheckpoint(Mutation):
    class Meta:
        description = """Checkpoint current task pool."""
        resolver = mutator

    class Arguments:
        workflows = List(String, required=True)
        command = String(default_value='take_checkpoints')
        name = String(
            description="""The checkpoint name""",
            required=True,)

    result = GenericScalar()
Beispiel #17
0
class ServicePageStepLocationBlock(graphene.ObjectType):
    # This uses graphene ObjectType resolvers, see:
    # https://docs.graphene-python.org/en/latest/types/objecttypes/#resolvers
    value = GenericScalar()
    location_page = graphene.Field(LocationPageNode)

    def resolve_location_page(self, info):
        page = None
        try:
            page = LocationPage.objects.get(id=self.value)
        except ObjectDoesNotExist:
            pass
        return page
Beispiel #18
0
def _add_form(cls: Type[AbstractForm], node: str, dict_params: dict) -> Type[graphene.Mutation]:
    if node in registry.forms:  # pragma: no cover
        return registry.forms[node]

    registry.page_prefetch_fields.add(cls.__name__.lower())
    dict_params['Meta'].interfaces += (Page,)
    dict_params['form_fields'] = graphene.List(FormField)

    def form_fields(self, _info):
        return list(FormField(name=field_.clean_name, field_type=field_.field_type,
                              label=field_.label, required=field_.required,
                              help_text=field_.help_text, choices=field_.choices,
                              default_value=field_.default_value)
                    for field_ in self.form_fields.all())

    dict_params['resolve_form_fields'] = form_fields
    registry.pages[cls] = type(node, (DjangoObjectType,), dict_params)

    args = type("Arguments", (), {'values': GenericScalar(),
                                  "url": graphene.String(required=True),
                                  "token": graphene.String(required=True)})
    _node = node

    @login_required
    def mutate(_self, info, token, url, values):
        url_prefix = url_prefix_for_site(info)
        query = wagtailPage.objects.filter(url_path=url_prefix + url.rstrip('/') + '/')
        instance = with_page_permissions(
            info.context,
            query.specific()
        ).live().first()
        user = info.context.user
        # convert camelcase to dashes
        values = {camel_case_to_spaces(k).replace(' ', '-'): v for k, v in values.items()}
        form = instance.get_form(values, None, page=instance, user=user)
        if form.is_valid():
            # form_submission
            instance.process_form_submission(form)
            return registry.forms[_node](result="OK")
        else:
            return registry.forms[_node](result="FAIL", errors=[FormError(*err) for err in form.errors.items()])

    dict_params = {
        "Arguments": args,
        "mutate": mutate,
        "result": graphene.String(),
        "errors": graphene.List(FormError),
    }
    tp = type(node + "Mutation", (graphene.Mutation,), dict_params)  # type: Type[graphene.Mutation]
    registry.forms[node] = tp
    return tp
Beispiel #19
0
class UserRegister(graphene.Mutation):
    class Arguments:
        username = graphene.String(required=True)
        password = graphene.String(required=True)
        email = graphene.String(required=True)
        school = graphene.String()
        company = graphene.String()
        location = graphene.String()
        about = graphene.String()
        codeforces = graphene.String()
        atcoder = graphene.String()
        studentid = graphene.String()
        gender = graphene.Boolean()
        

    token = graphene.String()
    payload = GenericScalar()
    permission = GenericScalar()
    user = graphene.Field(UserType)

    def mutate(self, info: ResolveInfo, **kwargs):
        signup_form = UserSignupForm(kwargs)
        if signup_form.is_valid():
            values = signup_form.cleaned_data
            usr = User()
            attach_info = AttachInfo()
            assign(usr, **values)
            assign(attach_info, **values)
            usr.set_password(usr.password)
            attach_info.save()
            usr.attach_info = attach_info
            usr.save()
            token = get_token(usr)
            payload = get_payload(token, info.context)
            return UserRegister(payload=payload, token=token, permission=list(usr.get_all_permissions()), user=usr)
        else:
            raise RuntimeError(signup_form.errors.as_json())
Beispiel #20
0
class Parameters(ObjectType):
    class Meta:
        interfaces = relay.Node,

    name = String(description="The true path to the parameter file. Internal use only")
    path = String(description="The true path to the parameter file. Internal use only")
    keys = List(String, description="list of parameter keys")
    value = GenericScalar(description="the json value for the parameters")
    raw = GenericScalar(description="the raw data object for the parameters")
    flat = GenericScalar(description="the raw data object for the parameters")

    def resolve_name(self, info):
        return basename(self.id)

    def resolve_path(self, info):
        return self.id

    def resolve_keys(self, info):
        value = reduce(assign, read_json(join(Args.logdir, self.id[1:])) or [{}])
        return dot_keys(value)

    def resolve_value(self, info, **kwargs):
        return reduce(assign, read_json(join(Args.logdir, self.id[1:])) or [{}])

    def resolve_raw(self, info, **kwargs):
        return read_json(join(Args.logdir, self.id[1:]))

    def resolve_flat(self, info, **kwargs):
        value = reduce(assign, read_json(join(Args.logdir, self.id[1:])) or [{}])
        return dot_flatten(value)

    # description = String(description='string serialized data')
    # experiments = List(lambda: schema.Experiments)

    @classmethod
    def get_node(cls, info, id):
        return get_parameters(id)
Beispiel #21
0
def arguments_from_fields(fields, model):
    PeeweeModelField = Dynamic
    arguments = {}
    for name, field in fields.items():
        if isinstance(field, PeeweeModelField):
            if get_backref_by_name(model, name):
                arg = GenericScalar().Argument()
            else:
                arg = Int().Argument()
        elif isinstance(field.type, NonNull):
            arg = field.type.of_type().Argument()
        else:
            arg = field.type().Argument() # TODO: get rid of strange `NotNull is not callable` warning
        arguments[name] = arg
    return arguments
Beispiel #22
0
class ServicePageStep(graphene.ObjectType):
    value = GenericScalar()
    locations = graphene.List(ServicePageStepLocationBlock)
    step_type = graphene.String()

    def resolve_locations(self, info):
        repr_locations = []
        # since we still want to be able to use value, we need to see
        # if it's a string before grabbing locations to avoid errors
        if self.step_type == "step_with_locations":
            for location in self.value['locations']:
                repr_locations.append(
                    ServicePageStepLocationBlock(value=location))

        return repr_locations
Beispiel #23
0
class JSONWebTokenMixin:
    payload = GenericScalar(required=True)
    refresh_expires_in = graphene.Int(required=True)

    @classmethod
    def Field(cls, *args, **kwargs):
        if not jwt_settings.JWT_HIDE_TOKEN_FIELDS:
            cls._meta.fields['token'] =\
                graphene.Field(graphene.String, required=True)

            if jwt_settings.JWT_LONG_RUNNING_REFRESH_TOKEN:
                cls._meta.fields['refresh_token'] =\
                    graphene.Field(graphene.String, required=True)

        return super().Field(*args, **kwargs)
Beispiel #24
0
class Workflow(ObjectType):
    class Meta:
        description = """Global workflow info."""

    id = ID(required=True)
    name = String()
    status = String()
    status_msg = String()
    host = String()
    port = Int()
    owner = String()
    tasks = List(lambda: Task,
                 description="""Task definitions.""",
                 args=def_args,
                 resolver=get_nodes_by_ids)
    families = List(lambda: Family,
                    description="""Family definitions.""",
                    args=def_args,
                    resolver=get_nodes_by_ids)
    task_proxies = List(lambda: TaskProxy,
                        description="""Task cycle instances.""",
                        args=proxy_args,
                        resolver=get_nodes_by_ids)
    family_proxies = List(lambda: FamilyProxy,
                          description="""Family cycle instances.""",
                          args=proxy_args,
                          resolver=get_nodes_by_ids)
    edges = Field(lambda: Edges, args=edge_args, description="""Graph edges""")
    nodes_edges = Field(lambda: NodesEdges,
                        args=nodes_edges_args,
                        resolver=get_nodes_edges)
    api_version = Int()
    cylc_version = String()
    last_updated = Float()
    meta = Field(DefMeta)
    newest_runahead_cycle_point = String()
    newest_cycle_point = String()
    oldest_cycle_point = String()
    reloaded = Boolean()
    run_mode = String()
    is_held_total = Int()
    state_totals = GenericScalar(resolver=resolve_state_totals)
    workflow_log_dir = String()
    time_zone_info = Field(TimeZone)
    tree_depth = Int()
    ns_defn_order = List(String)
    job_log_names = List(String)
    states = List(String)
Beispiel #25
0
class PersonalType(DjangoObjectType):
    info = GenericScalar()
    persona_str = graphene.String()
    can_delete = graphene.Boolean()

    class Meta:
        model = Personal

    def resolve_persona_str(self: Personal, info):
        return self.persona.__str__()

    def resolve_can_delete(self: Personal, info):
        return validate_can_delete(self.aula_set.count()) \
               and validate_can_delete(self.coordinador.count()) \
               and validate_can_delete(self.sub_coordinador.count()) \
               and validate_can_delete(self.director.count())
Beispiel #26
0
class Account(MongoengineObjectType):
    meta = graphene.Field(AccountMeta)
    json_metadata = GenericScalar()

    def resolve_json_metadata(self, info):
        return prepare_json(self.json_metadata)

    class Meta:
        model = AccountModel
        interfaces = (Node, )

    def resolve_meta(self, info):
        if isinstance(self.json_metadata, BaseDict):
            return self.json_metadata
        else:
            return {}
Beispiel #27
0
class HoldWorkflow(Mutation):
    class Meta:
        description = """Hold workflow.
- hold on workflow. (default)
- hold point of workflow."""
        resolver = mutator

    class Arguments:
        command = String(description="""options:
- `hold_suite` (default)
- `hold_after_point_string`""",
                         default_value='hold_suite')
        point_string = String()
        workflows = List(String, required=True)

    result = GenericScalar()
Beispiel #28
0
def _add_form(cls: Type[AbstractForm], node: str, dict_params: dict,
              url_prefix: str) -> Type[graphene.Mutation]:
    registry.page_prefetch_fields.add(cls.__name__.lower())
    dict_params['Meta'].interfaces = (PageInterface, )
    dict_params['form_fields'] = graphene.List(FormField)

    def form_fields(self, _info):
        return list(
            FormField(name=field_.clean_name, field_type=field_.field_type)
            for field_ in self.form_fields.all())

    dict_params['resolve_form_fields'] = form_fields
    tp = type(node, (DjangoObjectType, ), dict_params)
    registry.pages[cls] = tp

    args = type("Arguments", (), {
        'values': GenericScalar(),
        "url": graphene.String(required=True)
    })
    _node = node

    def mutate(_self, info, url, values):
        query = wagtailPage.objects.filter(url_path=url_prefix +
                                           url.rstrip('/') + '/')
        instance = with_page_permissions(info.context,
                                         query.specific()).live().first()
        user = info.context.user
        form = instance.get_form(values, None, page=instance, user=user)
        if form.is_valid():
            # form_submission
            instance.process_form_submission(form)
            return registry.forms[_node](result="OK")
        else:
            return registry.forms[_node](
                result="FAIL",
                errors=[FormError(*err) for err in form.errors.items()])

    dict_params = {
        "Arguments": args,
        "mutate": mutate,
        "result": graphene.String(),
        "errors": graphene.List(FormError),
    }
    tp = type(node + "Mutation", (graphene.Mutation, ),
              dict_params)  # type: Type[Mutation]
    registry.forms[node] = tp
    return tp
Beispiel #29
0
class Metrics(ObjectType):
    class Meta:
        interfaces = relay.Node,

    path = String(description="path to the file")
    name = String(description="path to the file")
    stem = String(description="stem of the file name")

    def resolve_path(self, info):
        return self.id

    def resolve_stem(
        self,
        info,
    ):
        return self.name.split('.')[0]

    keys = List(String, description="list of keys for the metrics")

    # value = List(GenericScalar, description="the raw value")
    value = GenericScalar(description="The value of the metrics file",
                          keys=List(String),
                          k=Int(required=False),
                          last=Int(required=False),
                          window=Int(required=False))

    def resolve_keys(self, info):
        df = read_dataframe(join(Args.logdir, self.id[1:]))
        keys = df.dropna().keys()
        return list(keys)

    # todo: add more complex queries.
    def resolve_value(self, info, keys=None, k=None, last=None, window=None):
        path = join(Args.logdir, self.id[1:])
        realpath(path)
        _ = read_dataframe(path)
        if keys:
            df = _[keys].dropna()
            return {k: df[k].values.tolist() for k in keys}
        else:
            df = _.dropna()
            return {k: v.values.tolist() for k, v in df.items()}

    @classmethod
    def get_node(cls, info, id):
        return Metrics(id, )
def arguments_from_fields(fields, model):
    PeeweeModelField = Dynamic
    arguments = {}
    for name, field in fields.items():
        if isinstance(field, PeeweeModelField):
            if name in model._meta.reverse_rel:
                arg = GenericScalar().Argument()
            else:
                arg = Int().Argument()
        elif isinstance(field.type, type):
            arg = field.type().Argument()
        else:
            if isinstance(field.type, NonNull):
                arg = field.type.of_type().Argument()
            else:
                arg = field.type.Argument()
        arguments[name] = arg
    return arguments