Giter Site home page Giter Site logo

parafoxia / analytix Goto Github PK

View Code? Open in Web Editor NEW
35.0 3.0 6.0 1.96 MB

A simple yet powerful wrapper for the YouTube Analytics API.

Home Page: https://parafoxia.github.io/analytix/

License: BSD 3-Clause "New" or "Revised" License

Python 99.04% HTML 0.96%
python utility data service youtube analytical-information api-wrapper youtube-api pandas arrow

analytix's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

analytix's Issues

Switch to using a conftest.py file to share fixtures

Summary

conftest.py files provide a space to define shared fixtures.

Why?

Better practise than the current methods.

Ideal implementation

All shared fixtures go into the conftest.py file.

All mock creator methods would still need to exist, so maybe include them in a file of their own.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Twitch analytics

Summary
Twitch analytics, similar to YouTube ones. There are seemingly a few options for this, but I'm not sure any of them contain channel analytics. Either some third-party thing will be needed, or this may not be possible.

The idea
More stats!

The ideal implementation
As close to the YouTube analytics systems as possible for maximum consistency.

Contribution
Do you want to contribute this feature yourself?
Yes

Optimise logging

Summary

Currently all logging uses f-strings, however that is not the best way to do it, as strings are always resolved regardless of whether they're actually needed or not. The Python logging HOWTO touches on this, and various SO answers agree..

Why?

Speeeeeeed!

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add Polars support

Summary

Polars is an alternative to Pandas which claims to be significantly faster.

Why?

Other dataframe alternatives are included, such as PyArrow.

Ideal implementation

report.to_polars or report.to_polars_dataframe perhaps? report.to_dataframe may need renaming to report.to_pandas.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Error 403: Forbidden | Default Code and Configuration

Hello,

I am facing an issue with "Error 403: Forbidden" with the default code from this projects home page.

Perhaps there is a chance I have messed up somewhere in the Google Developer Cloud, however I was successfully able to create both the secrets.json and tokens.json and ensure that the file paths are correctly set.

I enabled the "YouTube Analytics API" and set the scope for it for the last 2 options on the scope list as instructed in the YouTube video here.

It's set to use external with testing enabled and my email address was added to the test list which was the same email I authorized in the OAuth stage when I ran the application for the first time. Now when I attempt to run it again with the added tokens.json now in my project directory, the code throws "Error: 403". The OAuth Client ID is also currently set to Desktop.

Unlike the video however, I have updated the initialization code to reflect what's on this project page and I have enabled logging as you can see in the screenshot I have provided.

Error

Multiple doc issues

Summary

  • The YouTubeAnalyticsReport class is not documented.
  • The authorise method no longer raises an IncompleteRequest exception.
  • The description for include_historical_data is incomplete.

Reproduction steps
N/A

Error traceback
N/A

Checklist

  • I have searched for existing issues on the matter.
  • I have provided all the necessary information.
  • I have not accidently shared any sensitive info, such as client secret files.

Ability to export reports as spreadsheets

Summary
analytix can currently export reports to JSON and CSV/TSV formats, though being able to export as a spreadsheet (XSLX by default) would be useful in cases where data will be analysed in Excel.

The ideal implementation
A Report.as_spreadsheet or Report.as_excel method. Potentially allow for different spreadsheet extensions to be allowed aside from XSLX.

Contribution
Do you want to contribute this feature yourself?
Yes/No

Add Apache Arrow support

Summary

Apache Arrow is a commonly used data processing platform. While I'm not particularly smitten with the platform itself, the Feather format that comes with it is seriously nice, and definitely worth including natively.

Conversions should be made to:

  • Arrow Tables
  • Feather files
  • Parquet files

Why?

Having these methods allows developers to utilise these tools without having to install pandas.

Ideal implementation

Report.to_arrow_table
Report.to_feather
Report.to_parquet

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Min DF version tests aren't working

Steps to reproduce

Expected behaviour

They should either pass or fail depending on whether the min version is stil supported.

Current behaviour

They always fail as they can't find any tests.

analytix version

Extra information

Additional information

This is based in CI, not an analytix bug per se.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Implement (some) Data API functionality

Summary

The remaining three manageable resources after groups (#30) have been implemented.

Why?

Mainly convenience, as users would have a consistent interface to access additional information without the need for an additional library.

Ideal implementation

Video, Channel, and Playlist classes that inherit from the Resource ABC created as part of #30.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Implement webserver functionality for authorisation

Summary

Webserver authorisation (or loopback IP addresses) are the recommended way to handle authorisation for desktop projects.

Why?

Manual code entry has been removed, and though v3.3.2 introduces a temporary solution (see #33), there's no telling how long that solution will work for.

Ideal implementation

Probably something within the Analytics and AsyncAnalytics classes, but unsure beyond that.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

No handling for when a sort option is not one of the metrics

Steps to reproduce

with Client("secrets.json") as client:
    report = client.retrieve_report(
        dimensions=("day",),
        metrics=("likes",),
        sort_options=("-views",),
    )

Expected behaviour

analytix handles this, and throws an InvalidRequest error.

Current behaviour

An APIError is thrown.

analytix version

4.1.1

Extra information

Information:
• Python version: 3.11.1 (CPython)
• Operating system: Darwin (22.3.0)
• Installed in: /Users/ethanhenderson/Programs/Projects/analytix/analytix

Additional information

No response

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Video query support, perhaps

Summary
A more basic form of the Analytics API more or less, complete with a less complex auth flow. This could also be used to get info on any channel, albeit nowhere near as detailed as the Analytics API.

The idea
Moar support! Plus, the ability to compare basic info for channels.

The ideal implementation
This wouldn't work the same as the Analytics of Reporting stuff at all, but would be simpler, so that works.

Contribution
Do you want to contribute this feature yourself?

  • Yes
  • No

Parameterise report type tests

Summary

Instead of having multiple tests for each report types, have a single test that is run multple times using different parameters.

Why?

  • This provides a cleaner interface with which to test functionality
  • It is easier to provide a more complete set of tests
  • It is easier to add new dimensions etc. when they are added.

Ideal implementation

Using pytest.mark.parametrize.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Remove deprecated playlist reports on 30 Jun 2024

Summary

Remove all deprecated functionality related to the deprecation of the "isCurated" filter.

Why?

The API is removing it -- deprecated reports won't work anymore.

Ideal implementation

Just remove them, probably. Make sure to remove the tests as well.

Additional information

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Turn off the server and manually process the data.

Summary

The ability to get the OAuth2 URL instead of showing it in the console and a function to process Google's response without using the server.

Why?

I am creating a web app and showing the OAuth2 URL in the console is not useful for me as the final users don't see the console. Also, in the case of web apps, you are already running a server, and temporarily running the internal server this library use for authorization may cause many complications for web apps. Some examples are:

  • Conflicts with the server that is already running.
  • The internal server of the library would try to run several times if several users try to authorize at the same time (a complex logic would need to be implemented to use different ports).
  • One internal server instance may run and never be used if the user does not complete the authorization process (more complex needs to be added to handle this scenario).

Ideal implementation

To have a way to not use the internal server and just show an error message if the user is not authorized yet.
Example:

try:
    client = Analytics.with_secrets("secrets.json", use_server=False)
except NotAuthorized as e:
    # Handle the error however you prefer.
    # `e` contains the error message "You need to authorize analytix; to do so, visit this URL: https://[...]"

Also, as the server is turned-off, I'll need a way to process the received data. As this is a webapp, I'll need get the query strings and/or headers however my framework allows me to do it and use a function to save the token.
Example:

Analytics.save_token(
    # ...
)

Additional information

No response

Contribution

  • I wish to contribute to this feature.

I can contribute by answering questions, providing ideas, and testing. But I don't think I can code it by myself as I don't fully understand how the code works.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Token expires after a week

Summary

I am running the below code every day. However after a week or so the token expires and I had to renew the access token. It may be basic thing, However I am struggling with it. Can you please help me ?

def get_report():
    client = Client("secret.json")
    report = client.retrieve_report(
        dimensions=("video",),
        max_results=200,
        sort_options=("-views",),
        end_date= date.today(),
        currency="EUR",
        start_date=(date.today()- timedelta(days=365))
    )
    file_name = "analytics.csv"
    report.to_csv(file_name)
    return file_name

Why?

I think this is because the token expiry is set to a less time

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Further improve error messages

Summary

While error messages were improved in version 4, they're still not 100% clear.

Firstly, the raising of InvalidRequest or any of it's subclasses should be stopped in favour of only ever raising InvalidRequest for invalid requests (though the subclasses should still exists in case anyone is checking for those explicitly).

Secondly, the wording could be improved, i.e.: "the 'day' and 'month' dimesions cannot be used together".

Why?

Errors would be easier to resolve.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Playlist and ad performance reports

Summary
All video reports are supported, so the next step is to get all the playlist ones good to go.

The idea
More comprehensive support.

The ideal implementation
Same as video reports, just with the playlists. May need to add a boolean allowing the user to specify whether they want a video or playlist report.

Contribution
Do you want to contribute this feature yourself?

  • Yes
  • No

Factory reports

Summary
Factory methods can be used to simplify the process of creating more common reports. For example, the current method of getting the daily performance for a specific video is:

client = YouTubeAnalytics("secrets.json")
client.retrieve(
    dt.date(2021, 1, 1),
    dt.date(2021, 6, 30),
    dimensions=("day",),
    filters={"video": "videoID"},
)

The proposed method would look (something) like this:

factory = YouTubeAnalyticsFactory("secrets.json")
factory.video_performance("videoID", by="day", since=dt.date(2021, 1, 1))

A better example would be getting the daily performance channel wide:

factory = YouTubeAnalyticsFactory("secrets.json")
factory.daily_performance(since=dt.date(2021, 1, 1))

The idea
It will make it quicker and easier for users to make more common requests.

The ideal implementation
A separate YouTubeAnalyticsFactory class.

Contribution
Do you want to contribute this feature yourself?
Yes

Replace issue templates with issue forms

Summary
Issue forms provide a much better way to issues to be created, forcing issue creators to provided all necessary information.

As demonstrated, I can just remove all the other categories at will.

There should be a form for:

  • Bug reports
  • Feature requests
  • Improvements (built into feature requests?)
  • Maybe DevOps stuff

Contribution
Do you want to contribute this improvement yourself?
Yes/No

In-house report plotting

Summary

A method in the AnalyticsReport class than can plot reoprts.

Why?

Having the ability to quickly look at data directly (as well as save plots) could be helpful for those who aren't necessarily interested in creating detailed plots themselves, but just want a quick look at what the data looks like. In theory, this could incentivise users to create more detailed plots for their needs.

Ideal implementation

Some simple stuff, just to enable quick plotting of data.

For time series reports, a line plot should be created. For anything else, either a pie or bar chart should be created.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add new dimensions and report type

Summary

New stuff was added:

  • "User activity by city" report type
  • city dimension
  • creatorContentType dimension

As per https://developers.google.com/youtube/analytics/revision_history#december-15,-2022.

Why?

.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Metrics are generally unordered

Summary
Metrics are stored as sets which are unordered, meaning the columns are also unordered.

Reproduction steps
Pull any particularly complicated report.

Error traceback
N/A

Checklist

  • I have searched for existing issues on the matter.
  • I have provided all the necessary information.
  • I have not accidently shared any sensitive info, such as client secret files.

Reports Retrieves Blank rows

Steps to reproduce

import analytix
from analytix import Client

Let's enable the logger so we can see what's going on.

analytix.enable_logging()

if name == "main":
with Client("secrets_youtube_data.json") as client:
report = client.retrieve_report(
dimensions=("video",),
metrics=("estimatedMinutesWatched", "views", "likes", "subscribersGained"),
max_results=10,
sort_options=("-estimatedMinutesWatched",),
)
report.to_csv("top_10_watched_videos.csv")

Expected behaviour

list of 10 video's sorted by views

Current behaviour

blank csv file with only headers.

analytix version

4.1.3

Extra information

Information:
• Python version: 3.9.12 (CPython)
• Operating system: Windows (10)
• Installed in: C:\Users\s.piroe\Anaconda3\lib\site-packages\analytix

Additional information

1,748,694ms [ INFO ] analytix.oidc: Secrets loaded (type: installed)!
1,748,703ms [ INFO ] analytix.oidc: Tokens loaded!
1,748,765ms [ INFO ] analytix.shard: Access token does not need refreshing
1,748,766ms [ INFO ] analytix.client: Authorisation complete!
1,748,766ms [ INFO ] analytix.queries: Validating request
1,748,769ms [ INFO ] analytix.queries: Getting data between 2023-01-22 and 2023-02-19
1,748,769ms [ INFO ] analytix.queries: Report type determined as 'Top videos by region'
1,748,770ms [ INFO ] analytix.queries: Request OK!
1,748,981ms [ INFO ] analytix.shard: Created report of shape (0, 5)!

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Data for 1 year

Summary

How can I pull data for 1 year ?

Why?

The current fetched report provides data for 28 days

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add `modin` support

Summary
Currently analytix only supports pandas for DataFrame conversion, but modin and sharks are alternatives some users may prefer,

The idea
analytix will have extra compatibility.

The ideal implementation
Detect whether any library is installed (in order -- modin, pandas, sharks), import the relevant library, and create the DataFrame using it.

modin needs extra setup to get working, though this should ideally be handled by the user where possible.

Contribution
Do you want to contribute this feature yourself?
Yes/No

The REQUIRED feature amount does not work

Summary
When a report type that has a required dimension and optional dimensions is verified, it errors when optional dimensions are passed.

Reproduction steps
N/A (already fixed)

Error traceback
N/A (already fixed)

Checklist

  • I have searched for existing issues on the matter.
  • I have provided all the necessary information.
  • I have not accidently shared any sensitive info, such as client secret files.

Typing overhaul

Summary

May render #54 redundant (at least for now).

The removal of Python 3.7 support, alongside other things, opened the door for more types to be used. However, the list of "other things" is very small, and largely consists of typing changes anyway, so a better option could be to simply import new types from typing_extensions where necessary and take advantage of types included all the way in 3.11.

Whether a new dependency would be needed in all situations, or whether it would only need to be installed when using analytix[types] is currently unknown. I can think of a way to do it, but it might be too messy to be really valid.

Also, since PEP 563 is no longer happening, it might be worth removing support for future annotations.

Why?

Better typing = better code!

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add __all__ to files

Summary

Re-exporting only specific classes, functions, etc. can help avoid undesirable behaviour:
image

Why?

Only things from analytix should be importable by analytix, ideally.

Ideal implementation

Adding an __all__ to all files that need to re-export specific things (which is probably all files).

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Switch out dataclasses for attrs

Summary

Attrs provides increased functionality for more Python versions than dataclasses.

Why?

Attrs is already required by AIOHTTP, so there would be no extra dependencies.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add attributes to documentation

Summary

Currently, classes have their initialisation args and kwargs documented, but not their attributes.

Why?

For completeness.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Implement the `groups` and `groupItems` resources

Summary

The following resources should be implemented:

Why?

These resources are part of the Analytics API, but have been missed thus far.

Ideal implementation

More than likely Group and GroupItem classes which are constructed from the data. These should both inherit from an ABC (maybe called Resource?) to allow for easier potential implementation of Data API elements.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Data fetch for more than 200 videos

Summary

Currently in a single go data can be fetched for 200 videos. However if there are more than 200 videos then indexing needs to be done, which is okay to do. However, there is no way to find max number of videos present in the channel so that indexing can be done.

Why?

If a channel has more than 200 videos it is difficult to fetch the data.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Deprecate / remove support for PyPy 3.8

Summary

PyPy 3.8 is no longer supported (even though Python 3.8 is). Things are already breaking (though granted only in third-party libs, for now), and it may be time to let go of it as an officially supported version.

Why?

^^

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add token refreshing

Summary
Add the ability to refresh OAuth tokens automatically.

The idea
Refreshing tokens when needed (or just every time the application is started as there's no usage limit), will mean the user only needs to reauthorise after 200 days, rather than 1 hour.

The ideal implementation
Refresh token on startup would be easiest, however, this would not work for scheduled things. With that being said, analytix is not natively designed for this purpose anyways, so it will probably be fine. Version 3 will handle this.

Contribution
Do you want to contribute this feature yourself?
If someone doesn't PR something before I get the chance to work on it lmao.

Make the `Report.to_csv` and `Report.to_json` methods awaitable.

Summary

Currently in order to write a report to json or to csv asynchronously you must use a separate method.

  • Add the ability to await the sync methods directly to use them asynchronously.

Why?

While it's not the biggest deal (considering most libs that impl sync and async work this way currently),it would be nice to just be able to have a single method that can be used in both contexts.

Ideal implementation

report = analytix.Report(...) # Some generated report

report.to_csv("sync.csv") # works
await report.to_csv("async.csv") # also works and uses aiofiles

report.to_json("sync.json") # works
await report.to_json("async.json") # also works and uses aiofiles

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Remove Python 3.7 support

Summary

This would remove support for Python 3.7, which reaches end of life on 27 June 2023.

Why?

It would allow the use of additional features, such as the walrus operator and TypedDict.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add tests for v4

This is a tracking issue for v4 tests.

  • Clients
    • AsyncBaseClient
    • AsyncClient
    • Client
  • Dimensions
  • Filters
  • Groups
  • Metrics
  • OIDC
    • Missing authentication tests involving the webserver These are now done!
  • Queries
  • Reports
  • Shards
  • Sort options
  • Utils

Add a trouble-shooting guide

Summary

Add a page in the documentation covering the most common issues and ways to fix them.

Why?

The API is complicated, and analytix can only do so much to make the experience easier, and even then it can be a little difficult to get used to, especially when the causes of issues are unclear.

Ideal implementation

A guide in the documentation.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add a column headers info to the `Report` class

Summary

Add the column headers information found in the response from the API.

Why?

It would provide a simpler interface to perform certain tasks, as well as provide the user with additional information provided by the API.

Ideal implementation

Probably a ColumnHeaders dataclass that has name, data_type, and column_type attributes. A Report.column_info attribute would be a list of these objects. The columns attribute would become a property extracting data from this, and a rows property would also be created to match.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Implement a system to fetch and decode JWTs

Summary

JWTs contain user identification information, which is useful when applications wish to use Google's systems when authenticating (for example, they don't want to store passwords etc. in their databases). This would allow those building web apps to have a single authentication process, rather than binding a website account with the authentication tokens.

Why?

analytix does not currently have a mechanism with which to do this, and if a developer wanted to authenticate and fetch JWTs, they wouldn't be able to use analytix's utilities to do so. Those using the scripting client that wish to use them would also need to essentially rewrite part of the client.

Ideal implementation

Additional JWT scopes should be added to the Scopes enum in a way that isn't breaking. There should also be a system (probably in the client) that can fetch the decode keys from the Google OAuth API and decode the JWTs using those keys.

Additional information

Work on this has already begun.

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Reporting API support

Summary
Support for the YouTube Reporting API as well as the Analytics API.

The idea
Support for more things!

The ideal implementation
New file in the youtube submodule that handles it all the same. The Reporting API uses the same service so that doesn't have to change, thankfully.

Contribution
Do you want to contribute this feature yourself?

  • Yes
  • No

Using Griffe 39 or higher breaks docs

Steps to reproduce

Install Griffe 39 and run the docs.

Expected behaviour

The docs render as expected.

Current behaviour

The admonitions break (well, when the version isn't pinned like it currently is).

analytix version

5.1.0

Extra information

Information:
• Python version: 3.12.1 (CPython)
• Operating system: Darwin (23.2.0)
• Installed in: /Users/ethanhenderson/Programs/Projects/analytix/analytix

Additional information

No response

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Add Python 3.11 final to CI

Summary

3.11-dev should be changed to 3.11 in the CI workflow.

This is currently blocked by actions/runner-images#6459. The Darwin build artefact is now available.

Why?

Python 3.11 final has been released.

Ideal implementation

No response

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Handle changes to playlist reports

Summary

Remove support for the isCurated fitler and add support for the new playlistViews metric.

https://developers.google.com/youtube/analytics/revision_history#january-19,-2024
https://developers.google.com/youtube/analytics/dimensions#Playlist_Dimensions

There are plenty of other changes too that need to be addressed.

Why?

The isCurated filter is being deprecated in favour of a new playlistViews metric. analytix currently doesn't support this and will need to by 30 Jun 2024.

Ideal implementation

Still working that out.

Additional information

No response

Contribution

  • I wish to contribute this feature.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Breaking change in API secrets causing issues

Steps to reproduce

  1. Download the API secrets for your app
  2. Attempt to authorise

Expected behaviour

The client is authorised.

Current behaviour

image

analytix version

3.3.1

Extra information

Information:
• Python version: 3.10.4 (CPython)
• Operating system: Linux (5.10.102.1-microsoft-standard-WSL2)
• Installed in: /home/parafoxia/Programs/Projects/analytix/analytix

Additional information

This is caused by the first redirect URL being removed from downloaded API secrets.

Checklist

  • I have searched the issue tracker for duplicate issues and couldn't find any. If this is a follow-up issue, I have specified as such.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.