Ejemplo n.º 1
0
    def refresh(self, payload):
        """
        Refresh the textarea content with a new payload, if present

        :param payload:
        :return: None
        """
        self._refresh_queries(payload)
        self._refresh_raw(payload)
        inherits_popup_menu(self.this)
Ejemplo n.º 2
0
    def _refresh_queries(self, payload):
        """
        Refresh the textarea content with a new payload, if present

        :param payload:
        :return: None
        """
        graphql_tabs = []
        for i in range(0, self.this.getTabCount()):
            if self.this.getTitleAt(i).startswith("GraphQL #"):
                graphql_tabs.append(self.this.getTitleAt(i))

        if payload:
            # Check if the payload contains a GraphQL query object
            queries = self._graphql_queries(payload)
            if queries:
                # Generate and append GraphQL tab to the tabs
                for query_key in queries.keys():
                    qname = "gql_query#%s" % query_key
                    vname = "gql_variables#%s" % query_key
                    tname = "GraphQL #%s" % query_key
                    queryeditor = self._create_texteditor(name=qname,
                                                          label="Query:")
                    self._textareas[qname].setText(queries[query_key]['query'])
                    variableseditor = self._create_texteditor(
                        name=vname, label="Variables:")
                    this = self._get_tab_component_by_name(tname)
                    if tname in graphql_tabs:
                        graphql_tabs.remove(tname)
                    if not this:
                        this = JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                          queryeditor, variableseditor)
                    self.this.addTab(tname, this)
                    this.setOneTouchExpandable(True)
                    this.setDividerLocation(0.66)
                    if 'variables' in queries[query_key]:
                        this.getBottomComponent().setVisible(True)
                        self._textareas[vname].setText(
                            json.dumps(queries[query_key]['variables'],
                                       indent=4))
                    else:
                        this.getBottomComponent().setVisible(False)
                        self._textareas[vname].setText("{}")

        # Remove empty graphql tabs
        try:
            for tab in graphql_tabs:
                for i in range(0, self.this.getTabCount()):
                    if self.this.getTitleAt(i) == tab:
                        self.this.remove(i)
        except:
            # Do nothing if you cannot remove an entry
            pass

        inherits_popup_menu(self.this)
Ejemplo n.º 3
0
    def __private_init__(self,
                         text="Property Editor",
                         columns=None,
                         data=None,
                         empty=None,
                         add_actions=True,
                         actions=None):
        if not actions: actions = []
        if not columns: columns = []
        if data == None: data = []
        if not empty: empty = []

        self._text = text
        self.this = JFrame(text)
        self._table = JTable()
        self._dtm = DefaultTableModel(0, 0)
        self._dtm.setColumnIdentifiers(columns)
        self._table.setModel(self._dtm)
        self._data = data
        for d in data:
            self._dtm.addRow(d)
        self._pane = JScrollPane(self._table)
        self.this.add(self._pane)
        self._empty = empty

        self.this.addWindowListener(self)

        self._dtm.addTableModelListener(lambda _: self._update_model())
        self.this.setLocation(PropertyEditor.NEW_WINDOW_OFFSET,
                              PropertyEditor.NEW_WINDOW_OFFSET)

        if add_actions:
            self._popup = JPopupMenu()
            self._pane.setComponentPopupMenu(self._popup)
            inherits_popup_menu(self._pane)

            self._actions = actions
            self._actions.append(
                ExecutorAction('Remove Selected Rows',
                               action=lambda e: self._remove_row()))
            self._actions.append(
                ExecutorAction('Add New Row',
                               action=lambda e: self._add_row()))

            for action in self._actions:
                self._popup.add(action.menuitem)

        self.this.setForeground(Color.black)
        self.this.setBackground(Color.lightGray)
        self.this.pack()
        self.this.setVisible(True)
        self.this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)

        return self
Ejemplo n.º 4
0
    def _refresh_raw(self, payload):
        """
        Refresh the textarea content with a new payload, if present

        :param payload:
        :return: None
        """

        if payload:
            self.this.addTab("Raw", self._create_texteditor(name="raw", label='Raw'))
            self._textareas['raw'].setText(payload)
            if self._listener:
                self.add_listener(self._listener)
            inherits_popup_menu(self.this)
Ejemplo n.º 5
0
    def __init__(self,
                 actions=[],
                 restore=None,
                 proxy=None,
                 http_mutator=None,
                 texteditor_factory=None,
                 requests=None,
                 stub_responses=None):
        self._requests = requests if requests is not None else {}
        self._stub_responses = stub_responses if stub_responses is not None else {}
        self._actions = actions
        self._load_headers = []
        self._run_config = [['Proxy', proxy], ['Authorization Key', None],
                            ['Load Placeholders', True],
                            ['Generate HTML DOC', True],
                            ['Generate Schema DOC', False],
                            ['Generate Stub Queries', True],
                            ['Accept Invalid SSL Certificate', True],
                            ['Generate Cycles Report', False],
                            ['Cycles Report Timeout', 60],
                            ['Generate TSV', False]]
        self._init_config = json.loads(json.dumps(self._run_config))
        self._default_config = {}
        for k, v in self._run_config:
            self._default_config[k] = v
        self._old_config_hash = None
        self._actions.insert(0, BrowserAction())
        self._actions.insert(
            0, ExecutorAction("Configure", lambda _: self._setup()))
        self._actions.insert(0, ExecutorAction("Load", self._loadurl))
        self._http_mutator = http_mutator

        self.this = JPanel()
        self.this.setLayout(BorderLayout())
        self._omnibar = Omnibar(hint=DEFAULT_LOAD_URL,
                                label="Load",
                                action=self._loadurl)
        self.this.add(BorderLayout.PAGE_START, self._omnibar.this)
        self._fileview = FileView(
            dir=os.getcwd(),
            filetree_label="Queries, Mutations and Subscriptions",
            texteditor_factory=texteditor_factory)
        self.this.add(BorderLayout.CENTER, self._fileview.this)
        self._fileview.addTreeListener(self._tree_listener)
        self._fileview.addPayloadListener(self._payload_listener)

        self._popup = JPopupMenu()
        self.this.setComponentPopupMenu(self._popup)
        inherits_popup_menu(self.this)

        for action in self._actions:
            self._popup.add(action.menuitem)

        self._state = {'runs': []}
        try:
            if restore:
                cfg = json.loads(restore)
                if 'runs' in cfg:
                    for target, key, proxy, headers, load_placeholer, generate_html, generate_schema, generate_queries, generate_cycles, cycles_timeout, generate_tsv, accept_invalid_certificate, flag in cfg[
                            'runs']:
                        self._run(target=target,
                                  key=key,
                                  proxy=proxy,
                                  headers=headers,
                                  load_placeholer=load_placeholer,
                                  generate_html=generate_html,
                                  generate_schema=generate_schema,
                                  generate_queries=generate_queries,
                                  generate_cycles=generate_cycles,
                                  cycles_timeout=cycles_timeout,
                                  generate_tsv=generate_tsv,
                                  accept_invalid_certificate=
                                  accept_invalid_certificate,
                                  flag=flag)
                self._run_config = cfg['config']
        except Exception as ex:
            print(
                "Cannot Load old configuration: starting with a clean state: %s"
                % ex)
            sys.stdout.flush()
        self._state['config'] = self._run_config
Ejemplo n.º 6
0
    def __init__(self, actions=[], restore=None):
        self._actions = actions
        self._load_headers = []
        self._run_config = [['Proxy', None], ['Authorization Key', None],
                            ['Load Placeholders', True],
                            ['Generate HTML DOC', False],
                            ['Generate Schema DOC', False],
                            ['Generate Stub Queries', True],
                            ['Accept Invalid SSL Certificate', False]]
        self._default_config = {}
        for k, v in self._run_config:
            self._default_config[k] = v
        self._old_config_hash = None
        self._actions.append(BrowserAction())
        self._actions.append(
            ExecutorAction("Configure", lambda _: self._setup()))
        self._actions.append(ExecutorAction("Load", self._loadurl))
        self._actions = [a for a in reversed(self._actions)]

        self.this = JPanel()
        self.this.setLayout(BorderLayout())
        self._omnibar = Omnibar(hint=DEFAULT_LOAD_URL,
                                label="Load",
                                action=self._loadurl)
        self.this.add(BorderLayout.PAGE_START, self._omnibar.this)
        self._fileview = FileView(
            dir=os.getcwd(),
            filetree_label="Queries, Mutations and Subscriptions",
            payloadview_label="Query Template")
        self.this.add(BorderLayout.CENTER, self._fileview.this)
        self._fileview.addTreeListener(self._tree_listener)
        self._fileview.addPayloadListener(self._payload_listener)

        self._popup = JPopupMenu()
        self.this.setComponentPopupMenu(self._popup)
        inherits_popup_menu(self.this)

        for action in self._actions:
            self._popup.add(action.menuitem)

        self._state = {'runs': []}
        try:
            if restore:
                cfg = json.loads(restore)
                for target, key, proxy, headers, load_placeholer, generate_html, generate_schema, generate_queries, accept_invalid_certificate, flag in cfg[
                        'runs']:
                    self._run(
                        target=target,
                        key=key,
                        proxy=proxy,
                        headers=headers,
                        load_placeholer=load_placeholer,
                        generate_html=generate_html,
                        generate_schema=generate_schema,
                        generate_queries=generate_queries,
                        accept_invalid_certificate=accept_invalid_certificate,
                        flag=flag)
                self._run_config = cfg['config']
        except Exception as ex:
            print(
                "Cannot Load old configuration: starting with a clean state: %s"
                % ex)
            sys.stdout.flush()
        self._state['config'] = self._run_config