Help setting up

Hi, I'm having some troubles getting ebay_rest to work.
ebay_rest.json (I added the IT header because I'm from Italy)
    "***_instructions_***": {
        "01": "The ebay_rest module needs your eBay credentials.",
        "02": "Copy this file to your working folder and name it ebay_rest.json.",
        "03": "As you create and get, replace the placeholders in the two sections that follow.",
        "04": "Create a developer account - https://developer.ebay.com/api-docs/static/creating-edp-account.html",
        "05": "Get your OAuth credentials - https://developer.ebay.com/api-docs/static/oauth-credentials.html",
        "06": "Get your redirect_uri value - https://developer.ebay.com/api-docs/static/oauth-redirect-uri.html",
        "07": "Create production and sandbox logins at your eBay country-specific marketplace, e.g. https://www.ebay.com & https://sandbox.ebay.com.",
        "08": "Except for production users, scopes will be auto-discovered.",
        "09": "If the token and token_expiry are empty, they will be auto-generated."
    },
    "applications": {
        "production_1": {
            "app_id": "placeholder-placeholder-PRD-placeholder-placeholder",
            "cert_id": "PRD-placeholder-placeholder-placeholder-placeholder-placeholder",
            "dev_id": "placeholder-placeholder-placeholder-placeholder-placeholder",
            "redirect_uri": "placeholder-placeholder-placeholder-placeholder"
        },
        "sandbox_1": {
            "app_id": "my app id",
            "cert_id": "my cert id",
            "dev_id": "my dev id",
            "redirect_uri": "my redirect url"
        }
    },
    "users": {
        "production_1": {
            "email_or_username": "<production-username>",
            "password": "<production-user-password>",
            "scopes": [
                "https://api.ebay.com/oauth/api_scope",
                "https://api.ebay.com/oauth/api_scope/sell.inventory",
                "https://api.ebay.com/oauth/api_scope/sell.marketing",
                "https://api.ebay.com/oauth/api_scope/sell.account",
                "https://api.ebay.com/oauth/api_scope/sell.fulfillment"
            ],
            "refresh_token": "",
            "refresh_token_expiry": ""
        },
        "sandbox_1": {
            "email_or_username": "my email",
            "password": "my password",
            "refresh_token": "",
            "refresh_token_expiry": ""
        }
    },
    "headers": {
        "ENCA": {
            "accept_language": "en-CA",
            "affiliate_campaign_id": "",
            "affiliate_reference_id": "",
            "content_language": "en-CA",
            "country" : "CA",
            "currency": "CAD",
            "device_id": "",
            "marketplace_id": "EBAY_ENCA",
            "zip": "K1M 1M4"
        },
        "GB": {
            "accept_language": "en-GB",
            "affiliate_campaign_id": "",
            "affiliate_reference_id": "",
            "content_language": "en-GB",
            "country" : "GB",
            "currency": "GBP",
            "device_id": "",
            "marketplace_id": "EBAY_GB",
            "zip": "SW1A 1AA"
        },
        "US": {
            "accept_language": "en-US",
            "affiliate_campaign_id": "",
            "affiliate_reference_id": "",
            "content_language": "en-US",
            "country": "US",
            "currency": "USD",
            "device_id": "",
            "marketplace_id": "EBAY_US",
            "zip": "20500"
        },
        "IT": {
            "accept_language": "it-IT",
            "affiliate_campaign_id": "",
            "affiliate_reference_id": "",
            "content_language": "it-IT",
            "country": "IT",
            "currency": "EUR",
            "device_id": "",
            "marketplace_id": "EBAY_IT",
            "zip": "27100"
        }
    }
}

main.py
from ebay_rest import API, DateTime, Error, Reference

print(f"eBay's official date and time is {DateTime.to_string(DateTime.now())}.\n")

print("All valid eBay global id values, also known as site ids.")
print(Reference.get_global_id_values(), '\n')

try:
    api = API(application='sandbox_1', user='sandbox_1', header='IT')
except Error as error:
    print(f'Error {error.number} is {error.reason}  {error.detail}.\n')
else:
    try:
        print("The five least expensive iPhone things now for sale on-eBay:")
        for record in api.buy_browse_search(q='iPhone', sort='price', limit=5):
            if 'record' not in record:
                pass    # TODO Refer to non-records, they contain optimization information.
            else:
                item = record['record']
                print(f"item id: {item['item_id']} {item['item_web_url']}")
    except Error as error:
        print(f'Error {error.number} is {error.reason} {error.detail}.\n')
    else:
        pass

print("\nClass documentation:")
print(help(API))    # Over a hundred methods are available!
print(help(DateTime))
print(help(Error))
print(help(Reference))

Output
eBay's official date and time is 2022-01-04T19:19:15.979Z.

All valid eBay global id values, also known as site ids.
[{'ebay_site_id': '16', 'global_id': 'EBAY-AT', 'language': 'de-AT', 'site_name': 'eBay Austria', 'territory': 'AT'}, {'ebay_site_id': '15', 'global_id': 'EBAY-AU', 'language': 'en-AU', 'site_name': 'eBay Australia', 'territory': 'AU'}, {'ebay_site_id': '193', 'global_id': 'EBAY-CH', 'language': 'de-CH', 'site_name': 'eBay Switzerland', 'territory': 'CH'}, {'ebay_site_id': '77', 'global_id': 'EBAY-DE', 'language': 'en-DE', 'site_name': 'eBay Germany', 'territory': 'DE'}, {'ebay_site_id': '2', 'global_id': 'EBAY-ENCA', 'language': 'en-CA', 'site_name': 'eBay Canada (English)', 'territory': 'CA'}, {'ebay_site_id': '186', 'global_id': 'EBAY-ES', 'language': 'es-ES', 'site_name': 'eBay Spain', 'territory': 'ES'}, {'ebay_site_id': '71', 'global_id': 'EBAY-FR', 'language': 'fr-FR', 'site_name': 'eBay France', 'territory': 'FR'}, {'ebay_site_id': '23', 'global_id': 'EBAY-FRBE', 'language': 'fr-BE', 'site_name': 'eBay Belgium (French)', 'territory': 'BE'}, {'ebay_site_id': '210', 'global_id': 'EBAY-FRCA', 'language': 'fr-CA', 'site_name': 'eBay Canada (French)', 'territory': 'CA'}, {'ebay_site_id': '3', 'global_id': 'EBAY-GB', 'language': 'en-GB', 'site_name': 'eBay UK', 'territory': 'GB'}, {'ebay_site_id': '201', 'global_id': 'EBAY-HK', 'language': 'zh-Hant', 'site_name': 'eBay Hong Kong', 'territory': 'HK'}, {'ebay_site_id': '205', 'global_id': 'EBAY-IE', 'language': 'en-IE', 'site_name': 'eBay Ireland', 'territory': 'IE'}, {'ebay_site_id': '203', 'global_id': 'EBAY-IN', 'language': 'en-IN', 'site_name': 'eBay India', 'territory': 'IN'}, {'ebay_site_id': '101', 'global_id': 'EBAY-IT', 'language': 'it-IT', 'site_name': 'eBay Italy', 'territory': 'IT'}, {'ebay_site_id': '100', 'global_id': 'EBAY-MOTOR', 'language': 'en-US', 'site_name': 'eBay Motors', 'territory': 'US'}, {'ebay_site_id': '207', 'global_id': 'EBAY-MY', 'language': 'en-MY', 'site_name': 'eBay Malaysia', 'territory': 'MY'}, {'ebay_site_id': '146', 'global_id': 'EBAY-NL', 'language': 'nl-NL', 'site_name': 'eBay Netherlands', 'territory': 'NL'}, {'ebay_site_id': '123', 'global_id': 'EBAY-NLBE', 'language': 'nl-BE', 'site_name': 'eBay Belgium (Dutch)', 'territory': 'BE'}, {'ebay_site_id': '211', 'global_id': 'EBAY-PH', 'language': 'en-PH', 'site_name': 'eBay Philippines', 'territory': 'PH'}, {'ebay_site_id': '212', 'global_id': 'EBAY-PL', 'language': 'pl-PL', 'site_name': 'eBay Poland', 'territory': 'PL'}, {'ebay_site_id': '216', 'global_id': 'EBAY-SG', 'language': 'en-SG', 'site_name': 'eBay Singapore', 'territory': 'SG'}, {'ebay_site_id': '0', 'global_id': 'EBAY-US', 'language': 'en-US', 'site_name': 'eBay United States', 'territory': 'US'}]

The five least expensive iPhone things now for sale on-eBay:

Class documentation:
Help on Multiton in module ebay_rest.multiton object:

API = class Multiton(builtins.object)
 |  API(cls)
 |
 |  When init parameters match, reuse an old initialized object instead of making a new one.
 |  Objects that have not be been reused for an hour will be dropped from the pool.
 |
 |  Use this when the cost of object creation is high or there is a big benefit to object sharing.
 |
 |  Don't use this on data storage classes.
 |
 |  In ebay_rest, Multiton helps avoid making redundant REST calls to eBay.
 |  Redundant calls waste time, erode daily call limits and can trigger an "Internal Server Error" at eBay.
 |  I suspect the latter is eBay protecting itself from customer code stuck in an endless loop.
 |
 |  Multiton is a class decorator, and here is an example of how to use it.
 |
 |  @Multiton
 |  class YourClass:
 |      pass
 |
 |  Debugging tip, temporarily comment out the decorator is if object reuse is confusing diagnosis.
 |
 |  To learn about the Multiton Creation (Anti)Pattern, visit https://en.wikipedia.org/wiki/Multiton_pattern.
 |
 |  Methods defined here:
 |
 |  __call__(self, *args, **kwargs)
 |      Call self as a function.
 |
 |  __getattr__(self, attr)
 |
 |  __init__(self, cls)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |
 |  __instancecheck__(self, other)
 |      Check if an object is an instance.
 |
 |  __setattr__(self, attr, value)
 |      Implement setattr(self, name, value).
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)

None
Help on class DateTime in module ebay_rest.date_time:

class DateTime(builtins.object)
 |  Helpers for the specific way that eBay does date-time.
 |
 |  Static methods defined here:
 |
 |  from_string(d_t_string: str) -> datetime.datetime
 |      convert an Ebay dateTime string to a python datetime object with eBay's timezone
 |
 |      string YYYY-MM-DDTHH:MM:SS.SSSZ (e.g., 2004-08-04T19:09:02.768Z)
 |
 |      :param d_t_string (str, required)
 |      :return: datetime (datetime)
 |
 |  now() -> datetime.datetime
 |      Get the current time, as a python datetime object with eBay's timezone.
 |
 |      Date-time values are in the ISO 8601 date and time format.
 |      Hours are in 24-hour format (e.g., 2:00:00pm is 14:00:00).
 |      Universal Coordinated Time (UTC), also known as Greenwich Mean Time (GMT),
 |      also known as Zulu because the time portion of the time stamp ends with a Z.
 |
 |      :return: datetime (datetime)
 |
 |  to_string(d_t: datetime.datetime) -> str
 |      convert a python datetime object with eBay's timezone to an Ebay dateTime string
 |
 |      string YYYY-MM-DDTHH:MM:SS.SSSZ (e.g., 2004-08-04T19:09:02.768Z)
 |
 |      :param d_t (datetime, required)
 |      :return: datetime (str)
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)

None
Help on class Error in module ebay_rest.error:

class Error(builtins.Exception)
 |  Error(number: int, reason: str, detail: str = None) -> None
 |
 |  Used to return all exceptions from this package.
 |
 |  End user notes:
 |  When writing exception-handling code, take action based on the error number.
 |  Error numbers are unlikely to change, but the descriptive text will evolve.
 |
 |  Library maintainer notes.
 |  The error number is composed of a two-digit prefix and a three-digit suffix.
 |  Each new internal module is assigned a unique prefix counting down from 99.
 |  Give new "raises" within a module a unique suffix counting up from 001.
 |  Refrain from repurposing error numbers.
 |  Refrain from altering the error number or text descriptions when re-raising.
 |
 |  Method resolution order:
 |      Error
 |      builtins.Exception
 |      builtins.BaseException
 |      builtins.object
 |
 |  Methods defined here:
 |
 |  __init__(self, number: int, reason: str, detail: str = None) -> None
 |      Instantiate a new Error object.
 |
 |      :param number (int, required) A unique natural number code.
 |      :param reason (str, required) A short description of the reason.
 |      :param detail (str, optional) The details about the failure, optional.
 |      :return None (None)
 |
 |  __str__(self) -> str
 |      :return message (str)
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  __weakref__
 |      list of weak references to the object (if defined)
 |
 |  ----------------------------------------------------------------------
 |  Static methods inherited from builtins.Exception:
 |
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from builtins.BaseException:
 |
 |  __delattr__(self, name, /)
 |      Implement delattr(self, name).
 |
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |
 |  __reduce__(...)
 |      Helper for pickle.
 |
 |  __repr__(self, /)
 |      Return repr(self).
 |
 |  __setattr__(self, name, value, /)
 |      Implement setattr(self, name, value).
 |
 |  __setstate__(...)
 |
 |  with_traceback(...)
 |      Exception.with_traceback(tb) --
 |      set self.__traceback__ to tb and return self.
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from builtins.BaseException:
 |
 |  __cause__
 |      exception cause
 |
 |  __context__
 |      exception context
 |
 |  __dict__
 |
 |  __suppress_context__
 |
 |  __traceback__
 |
 |  args

None
Help on class Reference in module ebay_rest.reference:

class Reference(builtins.object)
 |  Caches of reference information sourced from eBay's developer website.
 |
 |  Static methods defined here:
 |
 |  get_application_scopes() -> dict
 |      Get eBay **Client Credential/Code** Grant Type Scopes
 |       that might be permitted when minting **Application** tokens.
 |
 |       Dictionary keys are the scopes, and data are descriptions.
 |
 |      Source https://developer.ebay.com/my/keys, Sandbox column, click OAuth Scopes, second section
 |
 |      :return application_scopes (dict)
 |
 |  get_country_codes() -> dict
 |      Get eBay country code information.
 |
 |      A partial list of ISO 3166 standard two-letter codes that represent countries around the world.
 |
 |      Source https://developer.ebay.com/devzone/xml/docs/reference/ebay/types/countrycodetype.html.
 |
 |      :return country_codes (dict)
 |
 |  get_currency_codes() -> dict
 |      Get eBay country code information.
 |
 |      A partial list of standard 3-digit ISO 4217 currency codes for currency used in countries around the world.
 |
 |      Source https://developer.ebay.com/devzone/xml/docs/Reference/eBay/types/CurrencyCodeType.html.
 |
 |      :return currency_codes (dict)
 |
 |  get_global_id_values() -> dict
 |      Get eBay global id information.
 |
 |      The Global ID is a unique identifier for combinations of site, language, and territory.
 |      Global ID values are returned in globalId and are used as input for the X-EBAY-SOA-GLOBAL-ID header.
 |      The global ID you use must correspond to an eBay site with a valid site ID.
 |      See https://developer.ebay.com/Devzone/merchandising/docs/Concepts/SiteIDToGlobalID.html
 |      eBay Site ID to Global ID Mapping for a list of global IDs you can use with the API calls.
 |
 |      Source https://developer.ebay.com/Devzone/merchandising/docs/CallRef/Enums/GlobalIdList.html.
 |
 |      :return global_id_values (dict)
 |
 |  get_item_enums_modified() -> dict
 |      Get eBay enumeration type definitions and SOME of their values.
 |
 |      Beware that many values are missing; expect to encounter new ones.
 |
 |      This has been modified in an opinionated way to aid with SQL database storage.
 |
 |      Source https://developer.ebay.com/api-docs/buy/browse/enums.
 |
 |      :return enums_modified (dict)
 |
 |  get_item_fields_modified() -> dict
 |      Get eBay item "response" field information.
 |
 |      The root container is ebay_item.
 |
 |      Details of a specific item can include description, price, category, all item aspects, condition,
 |      return policies, seller feedback and score, shipping options, shipping costs, estimated delivery,
 |      and other information the buyer needs to make a purchasing decision.
 |
 |      This has been modified in an opinionated way to aid with SQL database storage.
 |
 |      Source https://developer.ebay.com/api-docs/buy/browse/resources/item/methods/getItem#h2-output.
 |
 |      :return item_fields_modified (dict)
 |
 |  get_marketplace_id_values() -> dict
 |      Get eBay marketplace id information.
 |
 |      The following table lists the set of supported Marketplace IDs, their associated countries,
 |      the URLs to the marketplaces, and the locales supported by each marketplace
 |
 |      Source https://developer.ebay.com/api-docs/static/rest-request-components.html#marketpl.
 |
 |      :return marketplace_id_values (dict)
 |
 |  get_user_scopes() -> dict
 |      Get eBay **Authorization Code** Grant Type Scopes
 |      that might be permitted when minting **User Access** tokens.
 |
 |      Dictionary keys are the scopes, and data are descriptions.
 |
 |      Source https://developer.ebay.com/my/keys, Sandbox column, click OAuth Scopes, first section
 |
 |      :return user_scopes (dict)
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)

None

Process finished with exit code 0

What am I doing wrong?
Thanks in advance for any help

You did nothing wrong; eBay's sandbox doesn't appear to currently have any products for the Italian marketplace. When I ran your code with my production account, it found the following items.
item id: v1|402590657482|0 https://www.ebay.it/itm/402590657482?hash=item5dbc45ebca:g:TM4AAOSwmjxf1fOD item id: v1|165109622680|464663407133 https://www.ebay.it/itm/165109622680?hash=item26714ce798:g:EmAAAOSwqTxhXUka item id: v1|165109622679|464663449244 https://www.ebay.it/itm/165109622679?hash=item26714ce797:g:alIAAOSwP-phXUk2 item id: v1|165109622690|464663578370 https://www.ebay.it/itm/165109622690?hash=item26714ce7a2:g:1a0AAOSwFsthXUjj item id: v1|154638932099|454721705352 https://www.ebay.it/itm/154638932099?hash=item240132d883:g:NkMAAOSwD9dhXUia
While considering your issue, I noticed a bug and created a separate issue. https://github.com/matecsaj/ebay_rest/issues/33
Are you satisfied with this response? Can I close your issue?

Oh, I hadn't thought about that!
I'm new to the eBay API world and I just assumed that all the listings present in the production eBay would have also been in the sandbox.
Thanks a lot for your fast response.
I'll close this issue :)

Hi, sorry to bother you again but I'm now having a problem with sell_fulfillment_get_order.
I switched to production and the main.py code (the example one) in my fist post works ok.
So I modified it to (look in the else)
from ebay_rest import API, DateTime, Error, Reference

print(f"eBay's official date and time is {DateTime.to_string(DateTime.now())}.\n")

print("All valid eBay global id values, also known as site ids.")
print(Reference.get_global_id_values(), '\n')

try:
    api = API(application='production_1', user='production_1', header='IT')
except Error as error:
    print(f'Error {error.number} is {error.reason}  {error.detail}.\n')
else:
    response = api.sell_fulfillment_get_order(order_id="##-#####-#####")
    pass

print("\nClass documentation:")
print(help(API))    # Over a hundred methods are available!
print(help(DateTime))
print(help(Error))
print(help(Reference))

with a breakpoint on pass.
The problem is that a Chrome window opens with url https://auth.ebay.com/oauth2/error?errorId=invalid_request and content {"error_id":"invalid_request","error_description":"Input request parameters are invalid.","http_status_code":400} and in the console i get
Traceback (most recent call last):
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\a_p_i.py", line 2806, in sell_fulfillment_get_order
    return self._method_single(sell_fulfillment.Configuration, '/sell/fulfillment/v1', sell_fulfillment.OrderApi, sell_fulfillment.ApiClient, 'get_order', SellFulfillmentException, True, ['sell.fulfillment', 'order'], order_id, **kwargs)  # noqa: E501
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\a_p_i.py", line 446, in _method_single
    swagger_method = self._get_swagger_method(function_configuration, base_path, function_instance,
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\a_p_i.py", line 613, in _get_swagger_method
    configuration.access_token = self._user_token.get()
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 200, in get
    self._refresh_user()
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 233, in _refresh_user
    self._authorization_flow()
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 259, in _authorization_flow
    code = self._get_authorization_code(sign_in_url)
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 309, in _get_authorization_code
    form_userid = browser.find_element_by_name('userid')
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 664, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1244, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 424, in execute
    self.error_handler.check_response(response)
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="userid"]"}
  (Session info: chrome=97.0.4692.71)
Stacktrace:
Backtrace:
	Ordinal0 [0x0092FDC3+2555331]
	Ordinal0 [0x008C77F1+2127857]
	Ordinal0 [0x007C2E08+1060360]
	Ordinal0 [0x007EE49E+1238174]
	Ordinal0 [0x007EE69B+1238683]
	Ordinal0 [0x00819252+1413714]
	Ordinal0 [0x00807B54+1342292]
	Ordinal0 [0x008175FA+1406458]
	Ordinal0 [0x00807976+1341814]
	Ordinal0 [0x007E36B6+1193654]
	Ordinal0 [0x007E4546+1197382]
	GetHandleVerifier [0x00AC9622+1619522]
	GetHandleVerifier [0x00B7882C+2336844]
	GetHandleVerifier [0x009C23E1+541697]
	GetHandleVerifier [0x009C1443+537699]
	Ordinal0 [0x008CD18E+2150798]
	Ordinal0 [0x008D1518+2168088]
	Ordinal0 [0x008D1660+2168416]
	Ordinal0 [0x008DB330+2208560]
	BaseThreadInitThunk [0x76486739+25]
	RtlGetFullPathName_UEx [0x77548AFF+1215]
	RtlGetFullPathName_UEx [0x77548ACD+1165]

It seems stange to me that the OAuth2 works for buy_browse_search but not with sell_fulfillment_get_order.

Ok, I think I found the problem!
In token.py, in function _authorization_flow, the sign_in_url is generated incorrectly.
This is the first part of the generated sign_in_url (non-ASCII characters  converted to ASCII)
https://auth.ebay.com/oauth2/authorize?client_id=XXX&redirect_uri=https://auth.ebay.com/oauth2/authorize?client_id=XXX&response_type=code&redirect_uri=XXX&scope=
This is the fist part of the sign in URL directly from eBay:
https://auth.ebay.com/oauth2/authorize?client_id=XXX&response_type=code&redirect_uri=XXX&scope=
As you can see, in the generated URL there is an extra piece that souldn't be there:
&redirect_uri=https://auth.ebay.com/oauth2/authorize?client_id=XXX
If I remove this part then the link works correctly.
If you agree that this is the problem, I can open a separate issue here on GitHub

Encoding problem solved by decoding the URL:
in token.py, in generate_user_authorization_url, changed
return web_endpoint + '?' + query
to
return unquote(web_endpoint + '?' + query)
and imported unquote on top
from urllib.parse import parse_qs, urlencode, unquote
Now the Chromedriver loads the login page fine but there is another problem!
After the login I get asked to complete a captcha and, after that, the 2FA authentication and there is no time to do all this.

To solve the not enought time problem I increased the delay from 5 to 10 in _get_authorization_code in token.py.
Now there is still another problem. After the Chromedriver click on agree and closes the window I get
Traceback (most recent call last):
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\a_p_i.py", line 2806, in sell_fulfillment_get_order
    return self._method_single(sell_fulfillment.Configuration, '/sell/fulfillment/v1', sell_fulfillment.OrderApi, sell_fulfillment.ApiClient, 'get_order', SellFulfillmentException, True, ['sell.fulfillment', 'order'], order_id, **kwargs)  # noqa: E501
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\a_p_i.py", line 446, in _method_single
    swagger_method = self._get_swagger_method(function_configuration, base_path, function_instance,
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\a_p_i.py", line 613, in _get_swagger_method
    configuration.access_token = self._user_token.get()
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 200, in get
    self._refresh_user()
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 233, in _refresh_user
    self._authorization_flow()
  File "C:\Users\preda\PycharmProjects\eBaytest\venv\lib\site-packages\ebay_rest\token.py", line 266, in _authorization_flow
    raise Error(number=96007, reason='refresh_token.access_token is None.')
ebay_rest.error.Error: Error number96007. refresh_token.access_token is None.

One of your remarks was that a timeout was too short. Another user reported the same issue. You may be interested to know that a fix will be in next month's release. https://github.com/matecsaj/ebay_rest/issues/34


Client.mutate - optimisticResult?

Optimistic Updates not happening
I am trying to run graphqlClient.mutate() and pass an optimistic result object.
My understanding (from Apollo client knowledge) is that the [update] callback function should run twice. Once to return the optimistic result and once when the network request returns.
Am I mistaken? / Is this possible?
I would rather use client.mutate or similar because I will be programatically generating the return select fields depending on exactly which variable fields are passed and find that having Mutation widgets in the widget tree makes for much more code than required to get the job done.
Can this only be done via the Mutation() widget?
Mutation
await GraphQLProvider.of(context).value.mutate(
          MutationOptions(
            document: gql('''
            mutation updateUser(\$data: UpdateUserInput!) {
              updateUser(data: \$data) {
                id
                displayName
              }
            }
            '''),
            variables: {
              'data': {'displayName': value}
            },
            optimisticResult: {
              '__typename': 'User',
              'id': 'a379ea36-8a96-4bc6-82ae-c1b716c85b86',
              'updateUser': {
                '__typename': 'User',
                'id': 'a379ea36-8a96-4bc6-82ae-c1b716c85b86',
                'displayName': 'optimistic...'
              }
            },
            update: (cache, result) {
              print('running update');
              print(result);
              print(result?.isOptimistic);
              if (result!.hasException) {
                print(result.exception);
              } else {
                cache.writeFragment(
                    Fragment(
                        document: gql(
                      '''
                        fragment field on User {
                          displayName
                        }
                      ''',
                    )).asRequest(idFields: {
                      '__typename': result.data!['updateUser']['__typename'],
                      'id': result.data!['updateUser']['id'],
                    }),
                    data: result.data!['updateUser'],
                    broadcast: true);
              }
            },
            onError: (e) => throw new Exception(e),
          ),
        );

Query Widget
Query(
        options: QueryOptions(
            document: AuthedUserQuery().document,
            fetchPolicy: FetchPolicy.cacheAndNetwork,
            cacheRereadPolicy: CacheRereadPolicy.mergeOptimistic),
        builder: (result, {fetchMore, refetch}) => QueryResponseBuilder(
            result: result,
            builder: () {
              final _user =
                  AuthedUser$Query.fromJson(result.data ?? {}).authedUser;
              return Padding(
                padding: const EdgeInsets.symmetric(horizontal: 8.0),
                child: Column(
                  children: [
                    EditableTextFieldRow(
                      title: 'Name',
                      text: _user.displayName ?? '',
                      onSave: (newText) =>
                          _updateUser(context, 'displayName', newText),
                      inputValidation: (String text) =>
                          text.length > 2 && text.length <= 30,
                      validationMessage: 'Min 3, max 30 characters',
                      maxChars: 30,
                    ),
                  ],
                ),
              );
            }));

GraphQL Client Definition
_client = GraphQLClient(
        cache: GraphQLCache(store: HiveStore()),
        link: _link,
        defaultPolicies: DefaultPolicies(
            watchQuery: Policies(
                fetch: FetchPolicy.cacheAndNetwork,
                cacheReread: CacheRereadPolicy.mergeOptimistic)));

Thanks for your help and work on this package generally - it's awesome!

Got hit by this too, optimisticResult only triggers an update when using the Mutation widget, not when using the client directly with the mutate method

Thanks @juandiago, this did the trick. It's indeed a bug at this time

Is this still an issue? I'm not seeing optimisticResult trigger an update with the client and wondering if it's due to my implementation.

Is this still an issue? I'm not seeing optimisticResult trigger an update with the client and wondering if it's due to my implementation.

You should be know, the mantainer changes, so if you are see this bug in your implementation, ping us gain, but before make sure that your code is safe.
I put a couple of labels here

Hi Vincenzo! Glad to see graphql-flutter is in good hands 😃
I am just using the Dart graphql client library (not graphql-flutter). I cannot use the widgets in my architecture, and use the client directly.
When using the below code, the update callback is only called once with a response from network (never optimistically). Please let me know if you notice anything I'm doing wrong.
I'm using Artemis for type and document generation. It has been working flawlessly in every way (other than optimistic).
Thank you!
    final store = await HiveStore.open();
    final cache = GraphQLCache(
      store: store,
      possibleTypes: POSSIBLE_TYPES_MAP,
    );
    final token = getToken();
    final link = HttpLink(networkUrlManager.getGraphQLUrl(),
        defaultHeaders: {'Authorization': 'Bearer $token'});
    final client = GraphQLClient(
      cache: cache,
      link: link,
    );

    final variables = VariablesMutationCreateFriendRequest(
        input: InputFriendRequestInput(otherUserId: userId));

    QueryResult result = await client.mutate(MutationOptions(
        update: (cache, result) {
          // ISSUE - this is only getting called once (with network) and should be getting called with the optimisticResult
          print(cache);
        },
        optimisticResult: <String, dynamic>{
          'data': {
            'createFriendRequest': {
              '__typename': 'User',
              'id': userId,
              'friendStatus': 'SENT_PENDING',
            },
            '__typename': 'Mutation'
          }
        },
        document: OptionsMutationCreateFriendRequest(variables: variables).document,
        variables: variables.toJson()));

I think I found why it's not getting called. It also seems like this might be a known issue based on this comment in the client README (acknowledging the callbacks don't work the same as graphql-flutter).

NB: watchQuery, watchMutation, and ObservableQuery currently don't have a nice APIs for update onCompleted and onError callbacks, but you can have a look at how graphql_flutter registers them through onData in Mutation.runMutation.

And the graphql-flutter README specifies update should be called twice.

It will then call update(GraphQLDataProxy cache, QueryResult result) twice (once eagerly with optimisticResult), and rebroadcast all queries with the optimistic cache state.

Relevant code:
Future<QueryResult<TParsed>> fetchQuery<TParsed>(
  String queryId,
  BaseOptions<TParsed> options,
) async {
  final MultiSourceResult<TParsed> allResults =
      fetchQueryAsMultiSourceResult(queryId, options);
  return allResults.networkResult ?? allResults.eagerResult;
}

final result = await fetchQuery(_oneOffOpId, options);
// once the mutation has been process successfully, execute callbacks
// before returning the results
final mutationCallbacks = MutationCallbackHandler(
  cache: cache,
  options: options,
  queryId: _oneOffOpId,
);

final callbacks = mutationCallbacks.callbacks;

for (final callback in callbacks) {
  await callback(result);
}

I stepped through the code and confirmed the cache is being updated correctly and that eagerResult is correct. It's just never provided to the callback.
Network result is a future, so it'll never return the eager result (since it's not null).
It then only calls the callback once it's finish awaiting the networkResult (so eagerResult is basically thrown out).
I believe it's supposed to execute the callback for each result (first the eager one and then for the network result).

Using watchMutation with observable.stream.listen works as expected. It will get a query result first for the optimistic result and then second for the network result. It would be great if this could be added to the documentation for watchMutation 🙏

Glad that someone read the docs!

It will get a query result first for the optimistic result and then second for the network result. It would be great if this could be added to the documentation for watchMutation

PRs are welcome :)

:) I'll try to get a PR up this week.

Any updates on this? We are still experiencing this issue and it makes developing a responsive UI much harder.

A PR is always highly appreciated!
On Fri, Sep 9, 2022 at 10:53 AM András Geiszl @.***>
wrote:

Any updates on this? We are still experiencing this issue and it makes
developing a responsive UI much harder.
—
Reply to this email directly, view it on GitHub
https://github.com/zino-hofmann/graphql-flutter/issues/851#issuecomment-1241758386,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA2UFS55MWIWNFU33I6BSFTV5MCIPANCNFSM4ZXNHC6Q
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>


A way to hide a property from completions

Suggestion
🔍 Search Terms
List of keywords you searched for before creating this issue. Write them down here so that others can find this suggestion more easily and help provide feedback.
hide, private, internal, completions
The closest issue found was this but while its title suggests that it may be related - its content seems to be entirely different.
✅ Viability Checklist

My suggestion meets these guidelines:

[x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[x] This wouldn't change the runtime behavior of existing JavaScript code
[x] This could be implemented without emitting different JS based on the types of the expressions
[x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
[x] This feature would agree with the rest of TypeScript's Design Goals.

⭐ Suggestion
It would be cool if I could annotate a member property as being "hidden" and effectively hide it from the completions list.
📃 Motivating Example
I've found out that extracting type params using a conditional type doesn't always behave the same way as getting that type from a property member.
When it comes to inference we might get different results from signatures resembling those ones:
type StateMachine<TContext> = {
  context: TContext;
  TContext: TContext;
}
// in a more complicated situation this might not infer the return type correctly
declare function useMachine<T extends StateMachine<any>>(machine: T): T extends StateMachine<infer C> ? State<C> : never
// but this might work just OK
declare function useMachine<T extends StateMachine<any>>(machine: T): State<T["TContext"]>

Obviously, my situation at hand is far more complicated. All type params are actually used, it's possible to extract the generic using a conditional type but when we call useMachine with the "concrete" machine then it fails to retrieve the embedded type using the first technique.
I've accidentally figured out that the latter improved the situation for us. I've seen this technique to be called in the past "phantom types". Obviously, though, we don't our users to access such a phantom property - it's merely used to help us out with the inference at the consuming call site. So it would be quite cool if we could just annotate those properties somehow so they could be removed from the completions list.
I'm pretty sure that this is such a generic feature that it could be useful to people in more contexts. For instance, in react-navigation we might find this beauty:
https://github.com/react-navigation/react-navigation/blob/90874397e653a6db642822bff18014a3e5980fed/packages/core/src/types.tsx#L156-L168
I've tested out all of the JSdoc tags~ that I could think of but none of them work like that:
TS playground
It seem to me though that @ptivate/@access private should actually work as I've found some comments~ in the TypeScript codebase that private properties should be excluded. I see how JSDoc annotation is different from a "real" private property but it would be great if this could "just work".
I'm not sure how feasible implementing this is but maybe I could take a crack at this - it seems that the required changes would be limited to isValidPropertyAccessForCompletions
💻 Use Cases
It got kinda covered in the previous section.

@deprecated seems pretty close?

Thank you for the suggestion - it's indeed "pretty close" and I didn't think about using this (didn't actually realize that this would put them on the bottom of the suggestions list).
I think there is still potential in the original request though as "pretty close" is not the same. For the time being, I will use the suggested workaround (PR) but I would love it if I could just hide those properties in the future altogether.

Is there any news on this?

need this for what?

I came across a bootstrapping problem that would greatly benefit from having this functionality:
// Represents a type in my database schema. Needs to be fully functional before any initialization has taken place.
// Notably, the decorated properties are *not* accessible before initialization, so I need to provide a duplicate set
// of manually implemented property getters/setters. These needs to be publicly accessible but should be hidden
// from the completions list.
@DbType()
class Type {
   // Name of the type - not available during initialization, but required for initialization.
  @DbProperty({ type: String })
  accessor name: String;

  // Bootstrapping property to use in place of `name` during initialization.
  // Needs to be public (because it is accessed outside of the class) but should be hidden from the completions list.
  get __name(): String {
    return this.manuallyRead("name");
  }
  set __name(value: String) {
    this.manuallyWrite("name", value);
  }
}

This would be great for Valibot. We have an internal ._run property that I want to hide (or move down) and a ._types property that just stores type information but is never actually assigned at runtime.
https://github.com/fabian-hiller/valibot/blob/v0.36.0/library/src/types/schema.ts#L50-L59

For the use case in the original motivating example, I've been using symbols for this. I don't know if there are any downsides to this approach.
declare const phantom: unique symbol;
type Phantom = typeof phantom;

type Demo<T> = {
    [phantom]: T;
    value: T;
}
declare const demoValue: Demo<'test'>;
type DemoPhantom = (typeof demoValue)[Phantom];
  // ^?

(Playground)

need this for what?

let's say I have a property that I know exists but should not be used somewhere else, it's like private but without the classes.

let's say I have a property that I know exists but should not be used somewhere else, it's like private but without the classes.

You can expose the object as a type that does not include the property, or mark the property as deprecated, or use a convention like underscore prefix, or use a symbol key. Perhaps a more specific example?

let's say I have a property that I know exists but should not be used somewhere else, it's like private but without the classes.

You can expose the object as a type that does not include the property, or mark the property as deprecated, or use a convention like underscore prefix, or use a symbol key. Perhaps a more specific example?

I have a function that recursively calls itself when it fails,
because it recursively calls itself, I don't want it to run some functions again and use the previous result,
downloadFile(opts: {
// this should be private
hash: number
}) {
const hash = opts.hash || createHash();

// fails
return downloadFile({ hash })

}

I should not be able to use hash when calling this function elsewhere, I guess symbols could work, deprecated is a bit ehh, idk why private shouldn't work for object types

The example still seems incomplete. You have a function that accepts a parameter that has a property that you intend to use but you want that property to be undocumented or hidden. Do you want the hash property to be visible only to that function? How is the caller then able to know he is providing a valid argument?
Assuming that hash is meant to be a "private" property only visible to certain "friend" functions, typing the object with a public interface that omits the property and then using type assertions inside the friend function seems like the appropriate and idiomatic approach.
I'd be all for private in object literals, but I would expect private member access to be limited to the literal's lexical scope. That wouldn't satisfy this use case.

I should not be able to use hash when calling this function elsewhere

Sorry, missed this bit. So your example makes sense, but the rest of my response applies.


build-sys: add Makefile compatible with darvaza's but mono-project

same as darvaza's but without the subproject handling

@karasz amended


[IA] Move detailed SDK config out of Concepts

It doesn't make sense IMHO for detailed SDK config pages to be under Concepts. This PR proposes a move of those detailed SDK config pages into the "Language APIs & SDKs" section, which feels like a better home.
Comments on this IA reorg are most welcome.
⚠ The PR link checking will fail: I'll fix that if/once there is buy-in regarding the reorg.

Preview: https://deploy-preview-3888--opentelemetry.netlify.app/docs/languages/sdk-configuration/
Redirect tests:

https://deploy-preview-3888--opentelemetry.netlify.app/docs/concepts/sdk-configuration/
TBC

Screenshot

This makes LOTS of sense. Conceptual information shouldn't have instructional docs around.
+1


ReferenceError: log is not defined (JavaScript error at /documents/api_v2)

log is not defined for log("Loaded SwaggerUI")
Swagger Issue

Please, work in devel.

Arshak90 decided to omit this task.


fixes for Sql Server 2008 and early

correct drop trigger function in function tests\framework\db\mssql\ActiveRecordTest::testSaveWithComputedColumn
fix number of select query params for old sql server version, without correct offset support in function framework\db\mssql\QueryBuilder::upsert

Q
A

Is bugfix?
✔

New feature?
❌

Breaks BC?
❌

Tests pass?
✔/❌

Fixed issues

@bizley @samdark
Please review fixes for SQL Server < 11

👍


Errors in LSTM examples on the website

There is an error in LSTM examples on ml5js website that shows, which leads the example to crash:
Uncaught TypeError: ml5.LSTMGenerator is not a function

This error is appearing in two pages:

https://ml5js.org/docs/lstm-example
https://ml5js.org/docs/lstm-interactive-example

It is a problem caused by mismatching of library version (LSTMGenerator -> charRNN)?

@NHibiki  - just going through and flagging this again ==> we will need to update the website to inform people that charRNN is is now class for doing LSTM. Thanks for flagging this!

Closing this issue now since we use ml5.charRNN now. Thanks!


docs: fixed small errors

Looks like cloud build failure was about perf tests on mobile.
Rerunning just in case
/gcbrun

Looks like there is a problem in the firebase tests for mobile. @csilvestrini do you know anything about the "android-firebase-test-lab"? I don't seem to be able to view the logs. (Not high priority)

Looks like there is a problem in the firebase tests for mobile. @csilvestrini do you know anything about the "android-firebase-test-lab"? I don't seem to be able to view the logs. (Not high priority)

Not sure sorry. Logs didn't say anything useful. Hopefully it's just flaky?

Thanks, I'll run it again in a bit to see if its something external.
Cheers
Joshua Pratt | Arcs |<EMAIL_ADDRESS>On Thu, Jul 9, 2020 at 10:52 AM Cameron Silvestrini <
<EMAIL_ADDRESS>wrote:

Looks like there is a problem in the firebase tests for mobile.
@csilvestrini https://github.com/csilvestrini do you know anything
about the "android-firebase-test-lab"? I don't seem to be able to view the
logs. (Not high priority)
Not sure sorry. Logs didn't say anything useful. Hopefully it's just flaky?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/PolymerLabs/arcs/pull/5620#issuecomment-655831970,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAIRUHR74UQOKUPOSSPSWZDR2UIGJANCNFSM4OMQZ2LA
.

/gcbrun

/gcbrun


Define sensible defaults for vulnerability filters, grouping and issue contents in the sample configuration files

Default Filter should be Severity=Critical or High and isSuppressed=False
Grouping - No change
Issue contents. TBD. Will revisit when we have an answer to the deep link issue

Default filters in sample configuration files have been updated

Additional question: should the JIRA issue show vulnerability ID or issue instance ID?


[FR] Allow to disable Description field when adding new Manufacturer Part

Problem
I'd like to keep the company description as part of my manufacturer dataset. However, when adding a new Manufacturer Part the description if long clutters the view a lot.

Suggested solution
It would be great if one could simply disable the description in the settings.
Also, when disabled remove the - which appears behind the manufacturer name to separate the description form the name.
Describe alternatives you've considered
Removing the description text altogether
Do you want to develop this?
Not at the moment
Version: [0.7.1]

Hit there @afkiwers please do not leave placeholder text in the report. I removed it already this time - just for the future.

Probably a more generic solution would be to truncate long data entries which are displayed in these form fields.


Can't get the knowledge assistant to work with html file .

Steps to reproduce the problem:

Create an assistant with  html file (Do not enable Browser)
I got html for - https://github.com/acorn-io/runtime/issues ( from view page source)
Wait for the file to be fully loaded.
Took a long time about 41 minutes for loading to be done.

2024-02-13 10:54:34 [2024-02-13 18:54:34,495: WARNING/ForkPoolWorker-1] [447700193805348600,<PHONE_NUMBER>05348601,<PHONE_NUMBER>05348602,<PHONE_NUMBER>05348603,<PHONE_NUMBER>05348604,<PHONE_NUMBER>05348605,<PHONE_NUMBER>05348606,<PHONE_NUMBER>05348607,<PHONE_NUMBER>05348608,<PHONE_NUMBER>05348609,<PHONE_NUMBER>05348610,<PHONE_NUMBER>05348611,<PHONE_NUMBER>05348612,<PHONE_NUMBER>05348613,<PHONE_NUMBER>05348614,<PHONE_NUMBER>05348615,<PHONE_NUMBER>05348616,<PHONE_NUMBER>05348617,<PHONE_NUMBER>05348618,<PHONE_NUMBER>05348619,<PHONE_NUMBER>05348620,<PHONE_NUMBER>05348621,<PHONE_NUMBER>05348622,<PHONE_NUMBER>05348623,<PHONE_NUMBER>05348624,<PHONE_NUMBER>05348625,<PHONE_NUMBER>05348626,<PHONE_NUMBER>05348627,<PHONE_NUMBER>05348628,<PHONE_NUMBER>05348629,<PHONE_NUMBER>05348630,<PHONE_NUMBER>05348631,<PHONE_NUMBER>05348632,<PHONE_NUMBER>05348633,<PHONE_NUMBER>05348634,<PHONE_NUMBER>05348635,<PHONE_NUMBER>05348636,<PHONE_NUMBER>05348637,<PHONE_NUMBER>05348638,<PHONE_NUMBER>05348639,<PHONE_NUMBER>05348640,<PHONE_NUMBER>05348641,<PHONE_NUMBER>05348642,<PHONE_NUMBER>05348643,<PHONE_NUMBER>05348644,<PHONE_NUMBER>05348645,<PHONE_NUMBER>05348646,<PHONE_NUMBER>05348647,<PHONE_NUMBER>05348648,<PHONE_NUMBER>05348649,<PHONE_NUMBER>05348650,<PHONE_NUMBER>05348651,<PHONE_NUMBER>05348652,<PHONE_NUMBER>05348653,<PHONE_NUMBER>05348654,<PHONE_NUMBER>05348655,<PHONE_NUMBER>05348656,<PHONE_NUMBER>05348657,<PHONE_NUMBER>05348658,<PHONE_NUMBER>05348659,<PHONE_NUMBER>05348660,<PHONE_NUMBER>05348661,<PHONE_NUMBER>05348662,<PHONE_NUMBER>05348663,<PHONE_NUMBER>05348664,<PHONE_NUMBER>05348665,<PHONE_NUMBER>05348666,<PHONE_NUMBER>05348667,<PHONE_NUMBER>05348668,<PHONE_NUMBER>05348669,<PHONE_NUMBER>05348670,<PHONE_NUMBER>05348671,<PHONE_NUMBER>05348672,<PHONE_NUMBER>05348673,<PHONE_NUMBER>05348674,<PHONE_NUMBER>05348675,<PHONE_NUMBER>05348676,<PHONE_NUMBER>05348677,<PHONE_NUMBER>05348678,<PHONE_NUMBER>05348679,<PHONE_NUMBER>05348680,<PHONE_NUMBER>05348681,<PHONE_NUMBER>05348682,<PHONE_NUMBER>05348683,<PHONE_NUMBER>05348684,<PHONE_NUMBER>05348685,<PHONE_NUMBER>05348686,<PHONE_NUMBER>05348687,<PHONE_NUMBER>05348688,<PHONE_NUMBER>05348689,<PHONE_NUMBER>05348690,<PHONE_NUMBER>05348691,<PHONE_NUMBER>05348692,<PHONE_NUMBER>05348693,<PHONE_NUMBER>05348694,<PHONE_NUMBER>05348695,<PHONE_NUMBER>05348696,<PHONE_NUMBER>05348697,<PHONE_NUMBER>05348698,<PHONE_NUMBER>05348699,<PHONE_NUMBER>05348700,<PHONE_NUMBER>05348701,<PHONE_NUMBER>05348702,<PHONE_NUMBER>05348703,<PHONE_NUMBER>05348704,<PHONE_NUMBER>05348705,<PHONE_NUMBER>05348706,<PHONE_NUMBER>05348707,<PHONE_NUMBER>05348708,<PHONE_NUMBER>05348709,<PHONE_NUMBER>05348710,<PHONE_NUMBER>05348711,<PHONE_NUMBER>05348712,<PHONE_NUMBER>05348713,<PHONE_NUMBER>05348714,<PHONE_NUMBER>05348715,<PHONE_NUMBER>05348716,<PHONE_NUMBER>05348717,<PHONE_NUMBER>05348718,<PHONE_NUMBER>05348719,<PHONE_NUMBER>05348720,<PHONE_NUMBER>05348721]
2024-02-13 10:54:34 [2024-02-13 18:54:34,496: INFO/ForkPoolWorker-1] file file_6bd608 processing completed)
2024-02-13 10:54:34 [2024-02-13 18:54:34,500: INFO/ForkPoolWorker-1] Task app.tasks.execute_asst_file_create[b7c4353e-8954-420b-a276-cd35c4259b47] succeeded in 2462.22321224201s: None

Following is the chat I had:

Tested with latest install of rubra.
We are not allowed to load .json or .html anymore when creating assistants.


Proof-of-concept: CSS-only navbar-toggle/navbar-collapse, progressively enhanced with unobtrusive JS

You may know there is a little issue with the "hamburger" menu: currently (as of BS v3.3.2), it won't work without JS.
Issue has already been reported & discussed in the past (#10506) and closed by @mdo as "won't fix".
I bring it back to the table with these two examples I've prepared.
Bootstrap navbar-collapse without Javascript (CSS-only):

http://jsbin.com/sevula/2/
(output only; if needed, resize your window so the navbar collapses and the hamburguer icon appears)
http://jsbin.com/sevula/2/edit?html,css,output

The solution is based on a well-known trick: using the :target pseudo-class to apply styles to hide/show an element (you may have seen this trick used for CSS-only modals, for example).
Now, the progressively enhanced version, with unobtrusive Javascript.
Bootstrap navbar-collapse with unobstrusive Javascript (progressive enhancement)

http://jsbin.com/duvili/3/
(output only; if needed, resize your window so the navbar collapses and the hamburguer icon appears)
http://jsbin.com/duvili/3/edit?html,css,output

This second example is built on top of the CSS-only one: it uses the same CSS. In fact, the CSS used in the CSS-only example isn't even used/applied to this second JS-enhanced version! The HTML for the navbar markup is also the same for both examples.
The only additions are the necessary script tags for adding the proper JS.
So, how does it works?
As stated, the HTML for the navbar remains the same for both versions (CSS-only & JS-enhanced).
The CSS-only version relies on using an anchor () instead of a <button>, with the href attribute set to the corresponding  id of the collapsable navbar element. More precisely:

              Toggle navigation

            Project name

Home

About

Contact

            Close menu

You will notice that there is also another anchor after the the div.navbar-nav. This one is used to create the clickable overlay that will "close" (hide) the navbar-collapse. I set is href to #navbar so to have somewhere to scroll back (and get focus) when the user closes the menu.
The JS-enhanced version uses the collapse.js and transition.js plugins for Bootstrap. I've inlined them because it was the easier way I found to have them included on a JSbin.
And that's all.
"What about those "no-js" selectors in the stylesheet? We ain't use that in Bootstrap!"
Those styles are applied to the CSS-only version, or to the JS-enhanced version before JS runs (or if it fails to run). The selectors prefixed and isolated using the good ol' .no-js trick, so they won't apply when the class is switched to .js.
Disclaimer: I don't currently know how progressive enhancement & unobtrusive JS techniques are approached by Bootstrap developers (that is, I don't know "the Bootstrap way").
So for the sake of these examples, and to make them as clear and obvious as possible, I decided to go with the 'no-js/js' route, which is well known by most web-developers.
I'll appreciate some feedback in the matter.
Does it need any changes or hacks to any Bootstrap file?
No, it doesn't.
It works with Bootstrap v3.3.2 out of the box. Of course, it requires the use of an  instead of a <button>, but both the Bootstrap CSS and the collapse.js plugin already accept the usage of an  for the "hamburger" icon.
What about accessibility?
I'm not an expert, but I think this approach to navbar-toggle/navbar-collapse might be a bit more accessible than the current way promoted by Bootstrap docs.
They work without JS, which I think it's already an instant win when it comes to accessibility. On top of that, the use of an  instead of a <button> may work as an "skip-to-navbar" anchor (in the CSS-only version and/or when JS fails).
Feedback is welcome.

Hi @maniqui!
You appear to have posted a live example (http://jsbin.com/wunipi/1/edit), which is always a good first step. However, according to Bootlint, your example has some Bootstrap usage errors, which might potentially be causing your issue:

W002:  is missing X-UA-Compatible <meta> tag that disables old IE compatibility modes
W003:  is missing viewport <meta> tag that enables responsiveness

You'll need to fix these errors and post a revised example before we can proceed further.
Thanks!
(Please note that this is a fully automated comment.)

Hi @maniqui!
You appear to have posted a live example (http://jsbin.com/viforo/3/edit), which is always a good first step. However, according to the HTML5 validator, your example has some validation errors, which might potentially be causing your issue:

line 16, column 153: Bad value button for attribute type on element a: Subtype missing.

You'll need to fix these errors and post a revised example before we can proceed further.
Thanks!
(Please note that this is a fully automated comment.)

Note: We're not going to make any significant changes to the navbar in the rest of Bootstrap v3.x.x, so this would have to target Bootstrap v4, where we're already planning to overhaul the navbar.

@cvrebert: OK, understood, thanks for the feedback.
BTW, let me say that this post is not a feature request, but more a post to show that unobtrusive JS for navbar-collapse is achievable with current Bootstrap (v3.x.x) code, without changes to core files.
Web-developers using Bootstrap v3.x.x can just simply follow the suggestions on the opening post (change <button> for , and add some scoped styles) and get a navbar-collapse that works with & without JS.

Also, I've fixed the complains of that @twbs-lmvtfy robot.
Here are the fixed versions.  And that's an order! :-P
Bootstrap navbar-collapse without Javascript (CSS-only):

http://jsbin.com/sevula/1/
(output only; if needed, resize your window so the navbar collapses and the hamburguer icon appears)
http://jsbin.com/sevula/1/edit?html,css,output

Bootstrap navbar-collapse with unobstrusive Javascript (progressive enhancement)

http://jsbin.com/duvili/2/
(output only; if needed, resize your window so the navbar collapses and the hamburguer icon appears)
http://jsbin.com/duvili/2/edit?html,css,output

Unfortunately, the pure CSS version does not work well for keyboard users (they can open the menu, but not close it anymore unless they follow some link), so this has some accessibility concerns (though granted, still more accessible than having the menu not work at all without JS).
For the unobtrusive JS version, if you are changing from <button> to , you should also include a role="button" to expose the correct role to assistive technologies.

Unfortunately, the pure CSS version does not work well for keyboard users (they can open the menu, but not close it anymore unless they follow some link), so this has some accessibility concerns (though granted, still more accessible than having the menu not work at all without JS).

You are right. They can't close it by just hitting the Intro key. One way to close it (beside following some link to other page) is tabbing to the "Close menu" link (which works, at the same time, as the clickable overlay).

tabbing to the "Close menu" link

which gives no visual indication of being there unfortunately, so sighted keyboard users will likely only discover it by accident, if at all.

Adding a :focus style may help. Will look into it later.

I've done some minor improvements to add styles for :focus state on the "Close menu" link, as an aid to sighted keyboard users.
Also, in the source order, I've moved the "Close menu" link above the .navbar-nav, so when navigating using the Tab key (through the navbar), it comes after the "hamburger" icon, and before the navbar-nav. I'm just guessing that this could be a more intuitive order...

I believe that using the :target option also pollutes the browser history quite heavily, no? I tried that out before switching to a checkbox based solution (seen in http://lanyon.getpoole.com). That, for the most part, works pretty well. Unsure about the accessibility of it though.

You are correct: it does pollute the browser history on each click. Though, one would wonder why the user would be frenetically showing/hiding the menu, without clicking on any other link (being it another #anchor on the same page or a link to a different URL). Notwithstanding, this history polluting might be an usability/accessibility issue.
Re: the sibling checkbox trick on Lanyon. Nice usage of it

Id is not same!

What do you mean @malikfaizanhaider ?

Punting on this for now—it's something we could perhaps visit in v4, but not the initial release. Please do consider releasing it as an add-on though!


schema building support changeColumn

Currently we need to write raw SQL for change column type, it make migration non-compatible across different relational databases such as postgresql/mysql
Does knex support changeColumn just like rails does ?
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column
knex.schema.table('tableName', (table) => {
  table.changeColumn('columnName', 'newType');
});

There is pull request which just needs some minor changes which will support this kind of altering https://github.com/tgriesser/knex/pull/1759


Holistic example code is not working

System information (Please provide as much relevant information as possible)
- Have I written custom code (as opposed to using a stock example script provided in Mediapipe):
- OS Platform and Distribution (e.g., Linux Ubuntu 16.04, Android 11, iOS 14.4):

MediaPipe version: mediapipe-<IP_ADDRESS>-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Bazel version:
Solution (e.g. FaceMesh, Pose, Holistic): Holistic
Programming Language and version ( e.g. C++, Python, Java): Python

Describe the expected behavior:
It doesn't work because it doesn't receive a "pose_landmark_heavy.tflite".
Perhaps the file was deleted due to recent work.
Standalone code you may have used to try to get what you need :
If there is a problem, provide a reproducible test case that is the bare minimum necessary to generate the problem. If possible, please share a link to Colab/repo link /any notebook:
https://mediapipe.page.link/holistic_py_colab
https://colab.research.google.com/drive/16UOYQ9hPM6L5tkq7oQBl1ULJ8xuK5Lae?usp=sharing#scrollTo=BAivyQ_xOtFp
Other info / Complete Logs :
Downloading model to /usr/local/lib/python3.7/dist-packages/mediapipe/modules/pose_landmark/pose_landmark_heavy.tflite
---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)
[<ipython-input-9-4b9d4f973a30>](https://localhost:8080/#) in <module>
      1 # Run MediaPipe Holistic and draw pose landmarks.
      2 with mp_holistic.Holistic(
----> 3     static_image_mode=True, min_detection_confidence=0.5, model_complexity=2) as holistic:
      4   for name, image in images.items():
      5     # Convert the BGR image to RGB and process it with MediaPipe Pose.

8 frames
[/usr/lib/python3.7/urllib/request.py](https://localhost:8080/#) in http_error_default(self, req, fp, code, msg, hdrs)
    647 class HTTPDefaultErrorHandler(BaseHandler):
    648     def http_error_default(self, req, fp, code, msg, hdrs):
--> 649         raise HTTPError(req.full_url, code, msg, hdrs, fp)
    650
    651 class HTTPRedirectHandler(BaseHandler):

HTTPError: HTTP Error 404: Not Found

Hi @AlphaNote, Please pull the latest update from the master branch it must work now. Refer these two issues for better understading #3674 and #3675. Thank you!

Hi @AlphaNote, Could you please confirm this is still an issue or resolved as per the above comment. Thank you!

Hi @kuaashish, Thank you for your comment.
I solved the problem by referring to #3674 and #3675. And I checked that the version has been upgraded to 0.8.11 in pip.
mediapipe-0.8.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl


Create web services

E meter - Create web services (BI #43)

Closing this issue, because it has been included as a task in the user story itself.


Added Github and Stash PR building plugins

Both maybe?

+1 for both.

I only wonder if we shouldn't have 2 separate roles. One for Stash and one
for Github. Most likely you won't use both.


🐛 [firebase_storage] Native cast exception is thrown on Android when maximum requested data is too large

Bug report
Describe the bug
Native cast exception is thrown on Android when maximum requested data is too large, even though the real size of the data in storage could be anything, even one byte.
Steps to reproduce
Steps to reproduce the behavior:
FirebaseStorage.instance.ref("example/path").getData(9223372036854775807);

9223372036854775807 is the max int for flutter android
output in the device logs:
Showing sdk gphone x86 64 logs:
I/flutter (14501): The Dart VM service is listening on http://<IP_ADDRESS>:36121/D_tygeOp1zY=/
E/AndroidRuntime(14501): FATAL EXCEPTION: pool-2-thread-2
E/AndroidRuntime(14501): Process: com.example.test, PID: 14501
E/AndroidRuntime(14501): java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
E/AndroidRuntime(14501):        at io.flutter.plugins.firebase.storage.FlutterFirebaseStoragePlugin.lambda$referenceGetData$3$io-flutter-plugins-firebase-storage-FlutterFirebaseStoragePlugin(FlutterFirebaseStoragePlugin.java:261)
E/AndroidRuntime(14501):        at io.flutter.plugins.firebase.storage.FlutterFirebaseStoragePlugin$$ExternalSyntheticLambda12.run(Unknown Source:6)
E/AndroidRuntime(14501):        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
E/AndroidRuntime(14501):        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
E/AndroidRuntime(14501):        at java.lang.Thread.run(Thread.java:1012)

Expected behavior
Data should be returned when the file exists in storage or an exception in flutter is thrown, not a native exception.
Additional context
Flutter does not catch native plugin exceptions, so app will just terminate.

Flutter doctor
Run flutter doctor and paste the output below:
Click To Expand
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.10.1, on Microsoft Windows [Version 10.0.22621.1702], locale en-US)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.2.6)
[√] Android Studio (version 2021.3)
[√] IntelliJ IDEA Ultimate Edition (version 2023.1)
[√] VS Code (version 1.78.2)
[√] Connected device (4 available)
[√] Network resources

• No issues found!

Note: this can be avoided by setting the value to value to<PHONE_NUMBER>, which is the max size of an Integer in java. Any larger and you get the issue above. That limits retrievals to about 2 GB maximum. This should be change to support larger values or at the very least throw an exception on the dart side if anything more is passed in.

The crash can be reproduced using the plugin example app along with the code snippet shared above.
I added the lines below to the sample app.
Tapping on the FAB triggers the crash
floatingActionButton: FloatingActionButton(
        onPressed: () {
          FirebaseStorage.instance.ref("example/path").getData(9223372036854775807);
        },
      ),

Hello @mcmah309, this was fixed as part of the rewriting of the storage plugin using pigeon. Feel free to reopen if you are still experiencing this on the latest version but I was unable to reproduce it. Thanks


HiDive - fails to download correct subtitle file or detect multiple subtitle files

Checklist

[x] I'm reporting a broken site support
[x] I've verified that I'm running youtube-dl version 2020.01.24
[x] I've checked that all provided URLs are alive and playable in a browser
[x] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[x] I've searched the bugtracker for similar issues including closed ones

Verbose log

$ youtube-dl -v --write-sub --all-subs -f worst "https://www.hidive.com/stream/food-wars/s01e001"
[debug] System config: []
[debug] User config: [u'--no-call-home']
[debug] Custom config: []
[debug] Command-line args: [u'-v', u'--write-sub', u'--all-subs', u'-f', u'worst', u'https://www.hidive.com/stream/food-wars/s01e001']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2020.01.24
[debug] Python version 2.7.17 (CPython) - Linux-4.15.0-74-generic-x86_64-with-Ubuntu-18.04-bionic
[debug] exe versions: ffmpeg 3.4.6, ffprobe 3.4.6, phantomjs 2.1.1, rtmpdump 2.4
[debug] Proxy map: {}
[HiDive] food-wars/s01e001: Downloading JSON metadata
[HiDive] food-wars/s01e001: Downloading m3u8 information
[HiDive] food-wars/s01e001: Downloading m3u8 information
[HiDive] food-wars/s01e001: Downloading m3u8 information
[info] Writing video subtitles to: food-wars_s01e001-food-wars_s01e001.en.vtt
[debug] Invoking downloader on u'https://www.hidive.com/manifest/child/44e859ea5112f40a78407113c08a1dd9a0fd6096/FDW_s01e001_tv_or_na_ja_xx_HLS360p_16x9_00_v.m3u8'
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 151
[download] Destination: food-wars_s01e001-food-wars_s01e001.mp4
[download] 100% of 145.63MiB in 03:31
[debug] ffmpeg command line: ffprobe -show_streams 'file:food-wars_s01e001-food-wars_s01e001.mp4'
[ffmpeg] Fixing malformed AAC bitstream in "food-wars_s01e001-food-wars_s01e001.mp4"
[debug] ffmpeg command line: ffmpeg -y -loglevel 'repeat+info' -i 'file:food-wars_s01e001-food-wars_s01e001.mp4' -c copy -f mp4 '-bsf:a' aac_adtstoasc 'file:food-wars_s01e001-food-wars_s01e001.temp.mp4'

Description

I'm trying to download a video from HiDive with the Japanese audio and English subtitles. However, it only downloads a limited subtitle file intended to accompany the English dub audio. This .vtt file contains Caption lines (for translating on-screen text and song lyrics) but not Subtitle lines (for translating spoken text).
Even using --all-subs, it only detects and downloads this Captions subtitle file. The full Subtitle file definitely exists, and appears in the browser requests. For comparison, it can be found at
https://www.hidive.com/caption/vtt/d40c35ce045ef78d47fe727b3690ad27b4d1f8a9/FDW_s01e001_tv_hv_or_ja_en_v02.vtt.
The output of --list-subs only shows one entry for English. If you look at the example URL, there are not only multiple English subtitles but other foreign-language versions which the youtube-dl extractor doesn't detect. Example:
$ youtube-dl --list-subs "https://www.hidive.com/stream/food-wars/s01e001"
[HiDive] food-wars/s01e001: Downloading JSON metadata
[HiDive] food-wars/s01e001: Downloading m3u8 information
[HiDive] food-wars/s01e001: Downloading m3u8 information
[HiDive] food-wars/s01e001: Downloading m3u8 information
Available subtitles for food-wars/s01e001:
Language formats
en       vtt, vtt, vtt

My guess is that "vtt, vtt, vtt" means it's interpreting three separate English-language .vtt subtitle files as if they were separate formats of the same file (a problem, since you can't select between them using --sub-lang), and it's failing to detect the Portuguese and Spanish subs entirely.

Hi i was wondering what is the url to download stuff from hidive    Youtube-dl -   hidive url every time i try it says i have to log in how to i log in what is the Youtube dl comand to log in and download or choose quality

Think it would be youtube-dl --username --password url for the format unless they use cookies then think it would be like  youtube-dl --cookies "path for cookies file" url.

Hi darkhelmet thanks for responding so you mean    youtube-dl --username --password https://www.hidive.com/stream/btooom/s01e001    i tried that and it dont work i tried youtube-dl --https://www.hidive.com/stream/the-fruit-of-grisaia/s01e001"  what command do  you use when your downloading from hidive ?

You have to actually put in your user name and password, do you have a hidive account? It will be your email and your password for the site.

yh i do have a hidive account i typed my email password and the link i type like this
youtube-dl --email --password https://www.hidive.com/stream/btooom/s01e001  it says error no such option and then shows my email

['--newline', '-u', 'PRIVATE', '-p', 'PRIVATE', '-i', '-o', 'C:\Users\Owner\Downloads\%(title)s-%(height)sp.%(ext)s', '-v', '--hls-prefer-native', '--add-metadata', 'https://www.hidive.com/stream/food-wars/s01e001'] Is what use for mine so it will write in show data. Where it says private you put in your email and password.

Thanks dude your amazing

NP

darkhelmet dude sorry to be annoying but is there a way to get the sub with the download or do i need to download that separately

As for the food wars problem youtube-dl needs to be able to grab the following subs, id="tv_hv_ja_en", id="tv_br_ja_en", id="tv_br_ja_pt", id="tv_br_ja_sp", id="tv_hv_en_xx", and id="tv_hv_en_en" in the extractor. Other shows may require additional detection.

youtube-dl -u -p  --write-sub --all-subs https://www.hidive.com/stream/btooom/s01e001 Should do it but not sure if they have fixed the detection issue with the proper subs.

Didn't work dude they must have no fixed it yet thanks tho dude for all the help  much appreciated

Its ok, but yea they need a lot of updating on this one since there are multiple streams for subs as well as video since they have shows in English, Japanese and even Spanish now for the audio language as well as home versions and broadcast versions too.

yh hopefully they will sort it out i originally just tried using video download helper to try get the links but there drm protected which is weird because i don't think  Vrv crunchyroll or funimation are  this way you get subs and english versions

darkhelmet  hidive has uncensored versions of shows the one i downloaded was uncensored but the one the site was is there a command where i can choose version like the  720p 1080p or a command to list versions of the file

-F, --list-formats List all available formats of requested videos. -f "best[height=720]" -f "best[height=1080]"

Thanks for responding dark helmet so you mean like this youtube-dl -u -p  https://www.hidive.com/stream/btooom/s01e001 -F, ---F, --list-formats    and it will show me could you help me with the right command im a idiot

youtube-dl -F -u -p https://www.hidive.com/stream/btooom/s01e001

-F is the short version and --list-formats is the long version of the same command.

thanks darkhelmet your amazing it show me the format how do i chose one like what command i type im so stupid

youtube-dl  -f "best[height=720]" -u -p https://www.hidive.com/stream/btooom/s01e001 will give you 720p and youtube-dl  -f "best[height=1080]" -u -p https://www.hidive.com/stream/btooom/s01e001 will give you 1080p to download.

thanks again dude your awesome

The problem with the extractor for hidive is it needs to know if the video is home video hv or broadcast br and then needs to detect if the subs are English en, Japanese jp, Portuguese pt or Spanish LatAm sp. The https://www.hidive.com/tv page will give you a list of formats for audio and subtitles that will need supporting. It will need sub support for English, Latin American Spanish, Portuguese, Arabic, German, European Spanish, French, Italian, and Russian subs.

But then on the movies page it also has Korean listed for audio. https://www.hidive.com/movies

darkhelmet is there a similar command line for vrv.co if i want to download from there with youtubedl

It should be the same as the hidive one unless you need subs. But just a warning their subs and subs use different links for the same show unlike hidive. You will need to go to the show page and chose which version you want of the show to get the url from.

Hi darkhelmet i tried this command
youtube-dl -u -p pasword  https://vrv.co/watch/GREX7JW8Y/Mob-Psycho-100:Ripped-Apart-Someone-Is-Watching  and nothing is happening is my command wrong or maybe it just don't support vrv anymore

It still works
@ C:\Users\Owner\youtube-dl

youtube-dl -u  -p https://vrv.co/watch/GREX7JW8
Y/Mob-Psycho-100:Ripped-Apart-Someone-Is-Watching
[vrv] None: Downloading webpage
[vrv] Downloading Token Credentials JSON metadata
[vrv] GREX7JW8Y: Downloading resource path JSON metadata
[vrv] GREX7JW8Y: Downloading CMS Signing JSON metadata
[vrv] GREX7JW8Y: Downloading object JSON metadata
[vrv] GREX7JW8Y: Downloading video JSON metadata
[vrv] GREX7JW8Y: Downloading streams JSON metadata
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-ar-ME information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-fr-FR information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-ru-RU information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-de-DE information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-es-LA information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-pt-BR information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-es-ES information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-en-US information
[vrv] GREX7JW8Y: Downloading hls-audio-ja-JP-hardsub-it-IT information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-ar-ME information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-fr-FR information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-ru-RU information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-de-DE information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-es-LA information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-pt-BR information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-es-ES information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-en-US information
[vrv] GREX7JW8Y: Downloading dash-audio-ja-JP-hardsub-it-IT information
[dashsegments] Total fragments: 148
[download] Destination: Ripped Apart ~Someone Is Watching~-GREX7JW8Y.fdash-audio
-ja-JP-hardsub-de-DE-f2-v1-x3.mp4
[download]   9.8% of ~1.10GiB at  4.22MiB/s ETA 03:17

yh it works  but the video has no audio when it is downloaded its weird it just captures video

dark helmet i found the proBLEMwhen i list formats there are links without audio  i think this will work but i don't know how to register the format what do i put here for fomat bit   youtube-dl --format EMPTY -u -p  https://vrv.co/watch/GREX7JW8

hls-audio-ja-JP-3078-2     mp4        1920x1080  [ja-JP] 3078k , avc1.640028, 23
.974fps, mp4a.40.2 (best)   this is the best format but which part of it to i put for youtube-dl to register it

What is the line you are using because it should download both the video and audio with the line gave you.

im using this command  - youtube-dl -u -p --write-sub --all-subs https://vrv.co/watch/GREX7JW8        it is downloading the files separate the audio the video and the sub  i get the sub being a separate file but shouldn't the video and audio be one file

Not until the file is finished and it should give you a message at the end assuming you are using a command prompt for this.
[ffmpeg] Merging formats into "Ripped Apart ~Someone Is Watching~-GREX7JW8Y.mp4"
Deleting original file Ripped Apart ~Someone Is Watching~-GREX7JW8Y.fdash-audio-
ja-JP-hardsub-de-DE-f2-v1-x3.mp4 (pass -k to keep)
Deleting original file Ripped Apart ~Someone Is Watching~-GREX7JW8Y.fdash-audio-
ja-JP-hardsub-ru-RU-f1-a1-x3.m4a (pass -k to keep)

this happens to me  [dashsegments] Total fragments: 148
[download] Destination: Ripped Apart ~Someone Is Watching~-GREX7JW8.fdash-audio-
ja-JP-hardsub-de-DE-f2-v1-x3.mp4
[download] 100% of 1.35GiB in 01:54:48
[dashsegments] Total fragments: 148
[download] Destination: Ripped Apart ~Someone Is Watching~-GREX7JW8.fdash-audio-
ja-JP-hardsub-ru-RU-f1-a1-x3.m4a
[download] 100% of 22.63MiB in 03:19
[ffmpeg] Merging formats into "Ripped Apart ~Someone Is Watching~-GREX7JW8.mp4"
ERROR: file:Ripped Apart ~Someone Is Watching~-GREX7JW8.fdash-audio-ja-JP-hardsu
b-de-DE-f2-v1-x3.mp4: No such file or directory

Might not be a good idea to have this running in that folder. If possible try running it from the desktop in a folder just for this program but make sure you also have all the files for ffmpeg from the source where you downloaded it from.


Implement Phlex::Component#render_in

References #1, #68
Allows Phlex::Component instances to be passed to the render view helper in Rails.
Currently this is just an alias for #call with no arguments, and as such it completely ignores the view context argument.
However, there was some discussion on Discord about maybe supporting capturing blocks like:
<%= render MyComponent.new do %>
  other ERB content
<% end %>

This is not super hard to implement if there's interest, but I'm not sure if it will conflict or be confused with other, more idiomatic, uses of passing blocks to Phlex components. (e.g. the table fabricator example).

The ActionController API has an (apparently undocumented) larger contract. The renderable "thing" passed to #render should also respond to :format. I believe this is used for setting a content type header.
I did a brief test "shot in the dark" test by adding:
def format
  :html
end

And that seemed to make render MyComponent.new work from controllers, but I haven't figured out where in Rails that's called and if :html is actually the right thing to return.

I had no idea it would be this simple. Thanks for following up on this. 🙏

This is not super hard to implement if there's interest, but I'm not sure if it will conflict or be confused with other, more idiomatic, uses of passing blocks to Phlex components. (e.g. the table fabricator example).

I would love it if we could support both. There must be something unique about the block that's captured from ERB after the %>.

I would love it if we could support both. There must be something unique about the block that's captured from ERB after the %>.

There really isn't much special about it, it's just a normal block passed to #render_in that will eval in the ERB context (e.g. strings are appended to the output buffer). You can capture the output of the block using view_context#capture so #render_in can look like this:
def render_in(view_context, &block)
  raise "too many blocks 😅" if block && @_content
  @_content = proc { Raw.new(view_context.capture(&block)) } if block
  call
end

I don't know if that quite works, since I haven't actually read enough of Phlex's code to say if Raw is going to do what I expect. The important thing is that view_context.capture(&block) returns a string that you can then nest somewhere inside the phlex output.
However, if my assumptions about Raw are correct, that would let you do something like:
# copied from the README
class CardComponent < Phlex::Component
  def initialize(title:)
    super
  end

  def template(&)
    div.rounded.drop_shadow.p_5 do
      h1 @title
      content(&)
    end
  end
end

<%= render Card.new(title: "Nested ERB content") do %>

Weird phlex, but ok.

—<%= current_user.name %>

  <%= current_user.name %>
<% end %>

I submitted my previous comment too soon. I meant to clarify that this is where the conflict arises. A normal "phlex block" is normally passed to #initialze, so to use it with render you need to add parens:
<%= render(CardComponent.new(title: "Nested Phlex content") do
  p "not the prettiest..."
end) %>

If you want to try and distinguish between "block types" (is this a phlex or ERB block?) passed to #render_in I suspect the performance will fall off a very cliff, but I've been wrong about this sort of thing before. :wink:

I’ve almost got this working in a branch, but ERB is outputting the ERB content inside the block.

Interesting, I assumed you need to evaluate the block somewhere for that to happen. I was testing out the behaviour with this very simple "component":
  class HelloWorldComponent
    def render_in(view_context, &block)
      <<~HTML.html_safe

          Hello world. Your content is:

          #{view_context.capture(&block) if block}

      HTML
    end
  end

<%= render HelloWorldComponent.new do %>
really cool
<% end %>

output:

  Hello world. Your content is:

    really cool

I’m getting really close. Now have the second "Hello World" in the CardComponent.

I can't figure out where the first one comes from.

I’ve done it!! Thank you so much for your help @grncdr. I’m going to open a new PR with your stuff @alexandreruban stuff and some extra stuff.

Closing in favour of #70


Wrong version listed for script tag (CDN)

Version
2.6.10
Reproduction link
https://vuejs.org/v2/guide/installation.html#CDN
Steps to reproduce
Installation > Direct script Include > CDN
What is expected?
<script<EMAIL_ADDRESS>What is actually happening?
<script<EMAIL_ADDRESS>The listed documentation is under the wrong version.

Was trying to create an SPA without node/webpack due to company restrictions. Copied the tag from documentation to wonder for hours why the app wasn't working.

2.6.10 is the latest version and the link works as expected, serving Vue 2.6.10 UMD build.
I don't see why this should be the "wrong" version.


Remove deprecated setPersistent on UIPasteboard

Do we want it to be part of our MSAL 0.3.0 release? If yes, please point this PR to release/1.1.0, and MSAL one to release/0.3.0

I will re-branch from rel branch and re submit


Power Platform Functional Testing for Emerald

💡 Summary
As part of Emerald release, the secure configuration policies are going through an overhaul - with many policies being updated/revised. For each policy that is being revised/updated, the ScubaGear tool code is updated as well. To ensure that the tool's update is accurate, a detailed functional testing has been planned for the Emerald release. Each policy will be functionally tested to check that all pass/fail scenarios have been correctly processed by the tool.
This issue functionally tests each policy of Power Platforms product of ScubaGear tool. The main objective is to test Power Platforms policies and ensure that ScubaGear tool is providing the correct result for each possible configuration option. A secondary objective is to collect and document the required commands to test the functionality - this is to help automate the functional tests in a future release. To collect commands and help implement automated functional tests - please follow detailed instructions provided in #378
Motivation and context
This functional testing ensures that ScubaGear results of pass/fail are accurate as per the updated secure baseline configurations.
Implementation notes
For each Power Platforms policy do the following:

[ ] Document a list of test scenarios that should produce a Pass from ScubaGear. These are cases where the tenant is set to a configuration that is considered compliant with the baseline policy. There may be multiple cases.
[ ]  Perform the same as bullet 1 but do so for the Fail scenarios (i.e. non-compliant).
[ ]  For each pass/fail criteria identified in the above steps, configure a tenant to a known state and run the ScubaGear tool. Ensure that the result from the ScubaGear produces the correct result. This step can be done manually - objective is to test every possible config option separately and ensure that the ScubaGear produces correct assessment result.
[ ]  As an extension to the previous step - for each Pass and Fail scenario, identify the Powershell cmdlet, command line parameter names and values that can be used to configure the tenant to a specific compliant or non-compliant state. Use the existing Powershell code in the respective ScubaGear provider module for the product you are working on as a reference. In many cases the cmdlets in the provider module are "Get cmdlets" and to configure the tenant you simply need to call the "Set" equivalent cmdlet. As an example, for Sharepoint the "Get-SPOTenant" cmdlet is used in the provider so to perform functional testing and change the tenant to a specific configuration state you would use the respective "Set-SPOTenant" cmdlet.

Acceptance criteria
For each Power Platforms policy:

[ ] All possible Pass/Fail criteria are identified
[ ]  All possible Pass (or Compliant) configurations are tested and confirmed that ScubaGear correctly notes them in results.
[ ]  All possible Fail (on Non-compliant) configurations are tested and confirmed that ScubaGear correctly notes them in results.
[ ]  Commandlets and command line parameters for each configuration option are identified and documented as part of test result.

E3
ScubaGear is tested against a E3 tenant for Power Platform policies. The tenant is a production tenant and does not allow change of config - also the user account does not have the power platform license. So testing done manually (by running ScubaGear against the tenant and manually analyzing the results and tenant configs to ensure the results are accurate). Lack of license limited this to limited policies - for all the testable policies, results were accurate. Results report is attached in excel format.
ScubaGear-Emerald-ManualTestResults-E3-POWERPLATFORM.xlsx


Why doesn't Sleuth enable Scope when create Span for Kafka Streams by default?

Hi team,
My project is based on spring-cloud-stream-kafka 3.1.4 and spring-cloud-sleuth 3.0.4 (and zipkin brave).
When I use Sleuth, while also benefiting from tracing context information from slf4j.MDC such as traceId and spanId, it allows me to track logs more easily.
However, I recently found out that when Sleuth collects information about kafka-streams endpoints, it does not update MDC.
This is because Brave only updates MDC when a span is in scope(brave.context.slf4j.MDCScopeDecorator.MDCContext), and Sleuth does not have corresponding support for spring cloud stream kafka; it directly uses the kafka-streams instrument provided by Brave.
As far as I know, none of the instruments provided by Brave simultaneously enable scope when create/get span.
On the other hand, the web instruments (such as org.springframework.cloud.sleuth.instrument.web.servlet.TracingFilter) provided by Sleuth have scope enabled during processing.
Q:

Is it true that Sleuth does not enable Scope when processing Kafka Streams?
(If the answer to 1 is True) Why is Scope not enabled when processing kafka-streams endpoints, but it is enabled when handling Web requests?
Is opening the scope myself a good practice?  (through AOP or other means)

I think this is intentional since you can get multiple messages at that point, which one of them should be chosen for propagating its tracing information?
Also, even if this would be a bug, Sleuth 3.1 reached the end of its OSS support lifetime, you should migrate to the latest Micrometer Tracing (and latest Spring Boot 3.x).


Upgrading to elixir (from 1.6.6/OTP20) 1.7.3/otp 21 fails to load crypto.so at runtime

Elixir version (elixir -v):

Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] [dtrace]
Elixir 1.7.3 (compiled with Erlang/OTP 21)

Nerves environment: (mix nerves.env --info)
|nerves_bootstrap| Environment Package List
Pkg:         nerves_toolchain_ctng
Vsn:         1.5.0
Type:        toolchain_platform
BuildRunner: nil
Pkg:         nerves_system_br
Vsn:         1.4.1
Type:        system_platform
BuildRunner: nil
Pkg:         nerves_system_rpi3
Vsn:         1.3.0
Type:        system
BuildRunner: {Nerves.Artifact.BuildRunners.Docker, []}
Pkg:         nerves_toolchain_arm_unknown_linux_gnueabihf
Vsn:         1.1.0
Type:        toolchain
BuildRunner: {Nerves.Artifact.BuildRunners.Local, []}

|nerves_bootstrap| Loadpaths Start
Nerves environment
MIX_TARGET:   rpi3
MIX_ENV:      dev
|nerves_bootstrap| Environment Variable List
target:     rpi3
toolchain:  ~/.nerves/artifacts/nerves_toolchain_arm_unknown_linux_gnueabihf-darwin_x86_64-1.1.0
system:     ~/.nerves/artifacts/nerves_system_rpi3-portable-1.3.0
app:        ~/code/sapient/camnet/nerves_neuron
Other details:
attempted fixes so far, completely clean deps and build, upgrade all dependencies, rinse repeat
Current behavior
Startup of nerves fails with:
'Unable to load crypto library. Failed with error"
:load_failed, Failed to load NIF library: '/srv/erlang/lib/crypto-4.3.2/priv/lib/crypto.so: invalid ELF header''}}
OpenSSL might not be installed on this system
Expected behavior
nerves_firmware_ssh starts up normal

Quick update, when attempting to replicate the issue in a brand new nerves project, created with elixir 1.7.3 / otp 21 this issue does not occur. I'll keep digging ...
|nerves_bootstrap| Environment Package List
Pkg:         nerves_system_br
Vsn:         1.4.1
Type:        system_platform
BuildRunner: nil
Pkg:         nerves_system_rpi3
Vsn:         1.3.0
Type:        system
BuildRunner: {Nerves.Artifact.BuildRunners.Docker, []}
Pkg:         nerves_toolchain_arm_unknown_linux_gnueabihf
Vsn:         1.1.0
Type:        toolchain
BuildRunner: {Nerves.Artifact.BuildRunners.Local, []}
Pkg:         nerves_toolchain_ctng
Vsn:         1.5.0
Type:        toolchain_platform
BuildRunner: nil
|nerves_bootstrap| Loadpaths Start
Nerves environment
MIX_TARGET:   rpi3
MIX_ENV:      dev
|nerves_bootstrap| Environment Variable List
target:     rpi3
toolchain:  ~/.nerves/artifacts/nerves_toolchain_arm_unknown_linux_gnueabihf-darwin_x86_64-1.1.0
system:     ~/.nerves/artifacts/nerves_system_rpi3-portable-1.3.0
app:        ~/code/sapient/nerves_firmware_ssh_test

I ran out of time looking into the root cause. The workaround is to simply move the code into a project created from scratch with latest erlang/otp + elixir. OTP ftw making this trivial.

Thanks for the update and for taking some time to try to figure out the root cause.

Hello Frank and Tobias, good to see you here :-)
I have run into the same issue. Any updates yet on how to fix this other than recreating project from scratch and copying all code into it?
Me too, I switched from Erlang/OTP 20 to Erlang/OTP 21 and from Elixir 1.4 to 1.7. The error occurs, when shoehorn tries to use the crypto library.
I'll follow Tobias lead and recreate my project, so no need to fix this for me, but I guess others might run into the same issue.

I don't think there are any updates. I totally believe that it happens, but I haven't been able to reproduce it. It really seems like I have checks in nerves_system_br to catch this before runtime, but obviously something isn't working.


Add Support for Device/Distribution Metadata Endpoints

See Ruby library implementation for reference.
Add support for the following endpoints:
Device Metadata:

https://m2x.att.com/developer/documentation/v2/device#Read-Device-Metadata
https://m2x.att.com/developer/documentation/v2/device#Update-Device-Metadata
https://m2x.att.com/developer/documentation/v2/device#Read-Device-Metadata-Field
https://m2x.att.com/developer/documentation/v2/device#Update-Device-Metadata-Field

Distribution Metadata:

https://m2x.att.com/developer/documentation/v2/distribution#Read-Distribution-Metadata
https://m2x.att.com/developer/documentation/v2/distribution#Update-Distribution-Metadata
https://m2x.att.com/developer/documentation/v2/distribution#Read-Distribution-Metadata-Field
https://m2x.att.com/developer/documentation/v2/distribution#Update-Distribution-Metadata-Field

@fsaravia this is ready for review.  Will add Collections Metadata support when implementing https://github.com/attm2x/m2x-android/issues/8

:+1: