AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-7169895

David Frick's questions

Martin Hope
David Frick
Asked: 2023-09-03 23:24:00 +0800 CST

A corrotina não é executada ao clicar no botão no Pyside6

  • 5

Estou tentando executar uma corrotina que obtém dados com um clique de botão. Ele usa aiohttppara obter os dados. O botão é decorado com @asyncSlot()from qasyncPorém, quando clico no botão, nada acontece, nem mesmo um print. Não acho que os exemplos de asyncio correspondam ao meu caso de uso. Eu tentei me mover quando o asyncio corre para ver se isso ajuda. Estou um pouco perplexo porque não tenho erros para trabalhar. Por que minha função não está funcionando?

Meu código:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.container = QWidget()  # Controls container widget.
        self.controlsLayout = QVBoxLayout()

        # -- Search bar and settings button
        self.search_layout = QHBoxLayout()
        self.search_bar = QLineEdit()
        self.search_button = QPushButton("Search")     
        self.search_button.clicked.connect(self.update_data)  # search by entered text
        self.search_layout.addWidget(self.search_button)
        self.controlsLayout.addLayout(self.search_layout)

        # Our tab container with adjustable number of tabs
        self.tab_container = TabContainer()
        # Add out tabs widget
        self.controlsLayout.addWidget(self.tab_container)
        self.container.setLayout(self.controlsLayout)
        self.setCentralWidget(self.container

    @asyncSlot()
    async def update_data(self):
        stock_tickers = self.search_bar.text()

        print("Entered tickers: ", stock_tickers)

        short_interest = asyncio.create_task(self.setup_data(stock))
        short_interest = await short_interest
        print('SHORT INTEREST:', short_interest)

        # Make a table in a new tab here
        # ..............................


    async def setup_data(self, stock):
        short_interest = await get_data(stock)   # this function is our main coroutine
        # process the data here ...... as previous method return json


async def main():
    app = QApplication(sys.argv)
    loop = qasync.QEventLoop(app)
    asyncio.set_event_loop(loop)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec())


if __name__ == '__main__':
    asyncio.run(main())

onde my get_data(stock), que podemos considerar uma chamada aiohttp json básica , é definido como

async def get_data(stock_ticker):
    async with aiohttp.ClientSession() as session:
        async with session.get('https://www.finra.org/finra-data/browse-catalog/equity-short-interest/data') as response:
            cfruid = session.cookie_jar.filter_cookies('https://www.finra.org/')["__cfruid"].value
            print("CFRUID", cfruid)
            five_months_date = date.today() + relativedelta(months=-5)

            headers = {
                'authority': 'services-dynarep.ddwa.finra.org',
                'accept': 'application/json, text/plain, */*',
                'accept-language': 'en-US,en;q=0.6',
                'content-type': 'application/json',
                'cookie': f'XSRF-TOKEN={cfruid};',
                'origin': 'https://www.finra.org',
                'referer': 'https://www.finra.org/',
                'x-xsrf-token': cfruid,
            }

            json_data = {
                'fields': [
                    'settlementDate',
                    'issueName',
                    'symbolCode',
                    'marketClassCode',
                    'currentShortPositionQuantity',
                    'previousShortPositionQuantity',
                    'changePreviousNumber',
                    'changePercent',
                    'averageDailyVolumeQuantity',
                    'daysToCoverQuantity',
                    'revisionFlag',
                ],
                'dateRangeFilters': [],
                'domainFilters': [],
                'compareFilters': [
                    {
                        'fieldName': 'symbolCode',
                        'fieldValue': 'GME',
                        'compareType': 'EQUAL',
                    },
                    {
                        'fieldName': 'settlementDate',
                        'fieldValue': str(five_months_date),
                        'compareType': 'GREATER',
                    },
                ],
                'multiFieldMatchFilters': [],
                'orFilters': [],
                'aggregationFilter': None,
                'sortFields': [
                    '-settlementDate',
                    '+issueName',
                ],
                'limit': 50,
                'offset': 0,
                'delimiter': None,
                'quoteValues': False,
            }

            async with session.post('https://services-dynarep.ddwa.finra.org/public/reporting/v2/data/group/OTCMarket/name/ConsolidatedShortInterest',
                              headers=headers, json=json_data) as response2:
                short_interest_data = await response2.json()
                return short_interest_data

Consegui fazer a corrotina funcionar e retornar dados em seu próprio arquivo criando uma tarefa e aguardando-a. Eu também tentei usar o loopem vez disso. o que estou perdendo? Observe que outros métodos regulares funcionam quando o botão é clicado, então sei que é apenas um asyncio que se recusa a ser executado.

Editar: parece travar no início da aiohttpparte, não executando a instrução print que tenho dentroget_data

python
  • 1 respostas
  • 32 Views
Martin Hope
David Frick
Asked: 2023-08-29 01:30:16 +0800 CST

Por que minha segunda iteração sobre as chaves de um JSONObject não está em execução?

  • 5

Eu tenho um JSONObjectque estou usando para criar uma tabela. Porém, quando uso as teclas uma segunda vez para criar cada uma das células, nada acontece. Incluí instruções de log para testar isso. Nenhum keys singular é impresso. Me chame de perplexo.

class MovieFragment : Fragment(), FinraDataInterface {

    private lateinit var binding: MovieFragmentBinding

    val finraDataInterface: FinraDataInterface = this

    override fun drawTable(jsonArrayData: JSONArray) {
//         ------ Draw the table -----
//         Draw the keys first
        val headerRow = TableRow(requireActivity())
        Log.d("jsonArray", jsonArrayData[0].toString())
        val firstRecord = jsonArrayData[0] as JSONObject
        val keys = firstRecord.keys()

        for (key in keys) {
            val textView = TextView(requireActivity())
            textView.text = key
            headerRow.addView(textView)
        }
        binding.table.addView(headerRow)

        // Draw the data second
        for (i in 0 until jsonArrayData.length()) {
            val record = jsonArrayData[i] as JSONObject
            Log.d("Record", record.toString())
            val tableRow = TableRow(requireActivity())
            Log.d("Table Row", "Table Row created")
            Log.d("Keys", listOf(keys).toString())

            // Error is right here.
            for (key in keys) {
                Log.d("key", key)
                val textView = TextView(requireActivity())
                val cellText = record[key] as String
                textView.text = cellText
                tableRow.addView(textView)
            }
            binding.table.addView(tableRow)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = MovieFragmentBinding.inflate(layoutInflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        finraGetBondInfo("AMC")
    }




    private fun finraGetBondInfo(companyName: String) {
        val url = "https://www.finra.org/finra-data/fixed-income/corp-and-agency"

        val queue = Volley.newRequestQueue(requireActivity())
        var cfruid = ""

        val stringRequest = object: StringRequest(Request.Method.GET, url,
            { response ->
                Log.d("A", "Response is: " + response.substring(0,500))
            },
            { error ->
                Log.e("Error", error.toString())
            })
        {
            override fun  parseNetworkResponse(response : NetworkResponse) : Response<String> {
                // since we don't know which of the two underlying network vehicles
                // will Volley use, we have to handle and store session cookies manually
                Log.i("response", response.headers.toString());
                val cookies = HttpCookie.parse(response.headers?.get("Set-Cookie"))
                Log.d("Cookies:", cookies[0].toString())
                val indexOfEqualSign = cookies[0].toString().indexOf('=')
                cfruid = cookies[0].toString().substring(indexOfEqualSign + 1)
                Log.d("Cfruid:", cfruid)


                return super.parseNetworkResponse(response)
            }
        }

        queue.add(stringRequest)

        // Create our JSON Object for the finra call
        val json = JSONObject()
        val fieldsArray = JSONArray()
        fieldsArray.put("issueSymbolIdentifier")
        fieldsArray.put("issuerName")
        fieldsArray.put("isCallable")
        fieldsArray.put("productSubTypeCode")
        fieldsArray.put("couponRate")
        fieldsArray.put("maturityDate")
        fieldsArray.put("industryGroup")
        fieldsArray.put("moodysRating")
        fieldsArray.put("standardAndPoorsRating")
        fieldsArray.put("lastSalePrice")
        fieldsArray.put("lastSaleYield")
        json.put("fields", fieldsArray)

        json.put("dateRangeFilters", JSONArray())
        json.put("domainFilters", JSONArray())
        json.put("compareFilters", JSONArray())

        val multiJson = JSONObject()
        multiJson.put("fuzzy", false)
        multiJson.put("searchValue", companyName)
        multiJson.put("synonym", true)
        val subfieldsJson = JSONObject()
        subfieldsJson.put("name", "issuerName")
        subfieldsJson.put("boost", 1)
        val fieldsArray2 = JSONArray()
        fieldsArray2.put(subfieldsJson)
        multiJson.put("fields", fieldsArray2)
        val multiArray = JSONArray()
        multiArray.put(multiJson)

        json.put("multiFieldMatchFilters", multiArray)
        json.put("orFilters", JSONArray())
        json.put("aggregationFilter", JSONObject.NULL)
        val sortFieldsArray = JSONArray()
        sortFieldsArray.put("+issuerName")
        json.put("sortFields", sortFieldsArray)
        json.put("limit", 50)
        json.put("offset", 0)
        json.put("delimiter", JSONObject.NULL)
        json.put("quoteValues", false)

        Log.d("JSON", json.toString())


        val url2 = "https://services-dynarep.ddwa.finra.org/public/reporting/v2/data/group/FixedIncomeMarket/name/CorporateAndAgencySecurities"
        val request2 = object: JsonObjectRequest(Request.Method.POST, url2, json,
            { response ->
                // TODO replace this with our calls to make tab2 display bond data
                val returnBody =  response["returnBody"] as JSONObject
                var stringData = returnBody["data"] as String
                stringData = stringData.replace("\\n", "").replace("\\", "")
                val jsonArrayData = JSONArray(stringData)

                finraDataInterface.drawTable(jsonArrayData)
            },
            { error ->
                Log.e("Error", error.toString())
            })
        {
            override fun getHeaders(): MutableMap<String, String> {
                val headers = HashMap<String, String>()
                headers["Authority"] = "services-dynarep.ddwa.finra.org"
                headers["Accept"] = "application/json, text/plain, */*"
                headers["Cookie"] = "XSRF-TOKEN=$cfruid;"
                headers["Origin"] = "https://www.finra.org"
                headers["Referer"] = "https://www.finra.org/"
                headers["X-XSRF-token"] = cfruid
                headers["user-agent"] =  "python-requests/2.31.0"
                Log.d("headers:", headers.toString())
                return headers
            }

            override fun getBodyContentType(): String {
                return "application/json"
            }
        }
        queue.add(request2)

    }

}

O que me deixou particularmente confuso é que o primeiro loop for de uso das teclas para criar a linha do cabeçalho funciona bem. Tentei transmitir coisas para tipos diferentes para ver se era algum erro de tipo. No entanto, é apenas o segundo loop for que não está em execução. Não recebo nenhuma mensagem de erro. o que estou perdendo? Obrigado.

android
  • 1 respostas
  • 31 Views
Martin Hope
David Frick
Asked: 2023-08-27 08:29:11 +0800 CST

Kotlin - Como processar dados em paralelo corretamente?

  • 5

Estou vasculhando um site em busca de informações. Um fragmento contém dois métodos que recuperam os dados e depois os desenha. Tive que processar os dados de forma assíncrona para evitar que o thread principal fosse bloqueado. No entanto, quando executo meu código, fica claro que o processamento assíncrono de dados está ocorrendo fora de ordem e isso está fazendo com que algum índice fique fora dos limites. Não tenho certeza do que fazer. Tentei limitar o paralelismo que não ajudou. o que estou perdendo?

 private fun openinsiderGetData(): DataFrame<Any> {
        val doc = Jsoup.connect("http://openinsider.com/search?q=TSLA").get()
        val table = doc.select(".tinytable")
        val dataMap =  HashMap<String, ArrayList<String>>()


        table.select("thead").select("tr").forEach {row ->
            row.getElementsByTag("th").forEach { cell ->
                dataMap[cell.text()] = ArrayList<String>()
            }
        }
        // Get the table body cells
        val keys = dataMap.keys.toList()
        Log.d("Keys", keys.toString())

        table.select("tbody").select("tr").forEach {row ->
            var index = 0
            for (i in 0..row.getElementsByTag("td").size) {
                val key = keys[index]
                Log.d("Key", key)
                index += 1
                Log.d("CELL TEXT:", row.getElementsByTag("td")[i].text())
                dataMap[key]?.add(row.getElementsByTag("td")[i].text())
                Log.d("DATA SO FAR", dataMap.toString())
            }
        }
        Log.d("Map:", dataMap.toString())

        val df = emptyDataFrame<Any>()
        for (key in dataMap.keys) {
            val column = columnOf(dataMap[key]) named key
            df.add(column)
        }
        Log.d("Dataframe:", df.toString())
 
        // process the data further
        return df
    }

}

  private fun setupData() {
        lifecycleScope.launch {
            withContext(Dispatchers.Default.limitedParallelism(1)) {
                data = openinsiderGetData()
                val rows = data.values(byRows=true)
                Log.d("ROWS:", rows.toString())
            }
// TODO - Refactor Draw the table

Meu registro dos meus dados fornece:

{Insider Name=[D], Filing Date=[2023-08-08 20:01:17], 1w=[2023-08-04], Ticker=[TSLA], Title=[Taneja Vaibhav], Trade Type=[CFO, CAO], ΔOwn=[S - Sale+OE], 1d=[$261.00], Owned=[-4,000], Price=[104,504], Qty=[-4%], 6m=[-$1,044,000], X=[], Value=[], Trade Date=[], 1m=[]}

o que está claramente fora de ordem. Estou perplexo sobre como isso acontece e como evitá-lo.

kotlin
  • 2 respostas
  • 25 Views
Martin Hope
David Frick
Asked: 2023-08-26 05:43:48 +0800 CST

Como a `atividade` funciona em um Runnable? Minha tabela Android não está sendo exibida

  • 6

Estou usando o JSoup para analisar um site (tive que configurá-lo para usar solicitações de texto não criptografado, pois https não é compatível). É uma forma Runnablede evitar o bloqueio do thread da rede principal. No entanto, ele não parece ser exibido quando executo meu código. Suspeito que tenha algo a ver activity(já que tive problemas para configurá-lo) e que estou usando uma classe interna, mas nenhum erro ou aviso é retornado. O que estou fazendo de errado?

package com.example.investmenthuntermobile


import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TableRow
import android.widget.TextView
import androidx.fragment.app.Fragment
import com.example.investmenthuntermobile.databinding.InsiderFragmentBinding
import org.jsoup.Jsoup


class InsiderFragment : Fragment() {

    private lateinit var binding: InsiderFragmentBinding


    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = InsiderFragmentBinding.inflate(layoutInflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        setupData()
        //val jsonData = finraGetBondInfo("Boeing")

    }

    private fun setupData() {
        val thread = Thread(Task()).start()
    }


    inner class Task() : Runnable {

        override fun run() {
            val doc = Jsoup.connect("http://openinsider.com/search?q=GME").get()
            val table = doc.select(".tinytable")
            // Get the table header cells
            val tableHeaderRow = TableRow(activity)
            tableHeaderRow.isClickable = true
            table.select("thead").select("tr").forEach {row ->
                row.getElementsByTag("th").forEach { cell ->
                Log.d("CELL text", cell.text())
                val textView = TextView(activity)
                textView.text = cell.text()
                tableHeaderRow.addView(textView)

                }
            }
            // Get the table body cells
            table.select("tbody").select("tr").forEach {row ->
                val tableRow = TableRow(requireActivity())
                tableRow.isClickable = true

                row.getElementsByTag("td").forEach { cell ->
                    val textView = TextView(activity)
                    textView.text = cell.text()
                    tableRow.addView(textView)
                }
            }
        }

    }

}
android
  • 3 respostas
  • 21 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve